Cordys BOP 4平台开发实战——MongoDB提供文档服务(1)

在Cordys平台,使用WS-AppServer Package组件,新建C_MongoPackage自定义类。

1、查询返回单个文档JSON数据

(1)查询返回独立文档

MongoDB语法:

.find({"ID":"2015040011"})

Soap请求:

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">

<SOAP:Body>

<FindDocuments xmlns="http://schemas.cordys.com/XiaoywWSAppServerPackage" preserveSpace="no" qAccess="0" qValues="">

<collectionName>BusinessEntity</collectionName>

<querycondition>{"ID":"2015040011"}</querycondition>

</FindDocuments>

</SOAP:Body>

</SOAP:Envelope>

返回值截取内容如下:

<findDocuments>

{ "_id" : { "$oid" : "5525d9e084ae4890fc58c489"} , "ID" : "2015040011" , "Name" : "高级采购流程" , "Dept" : "经营管理部"}

</findDocuments>

(2)查询返回嵌套文档

MongoDB语法:

.find({"ID":"2015040013"})

Soap请求:

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">

<SOAP:Body>

<FindDocuments xmlns="http://schemas.cordys.com/XiaoywWSAppServerPackage" preserveSpace="no" qAccess="0" qValues="">

<collectionName>BusinessEntity</collectionName>

<querycondition>{"ID":"2015040013"}</querycondition>

</FindDocuments>

</SOAP:Body>

</SOAP:Envelope>

嵌套文档查询结果截取主要内容如下:

<findDocuments>

{ "_id" : { "$oid" : "55260ce084ae4cb2fa2e2bea"} , "ID" : "2015040013" , "Name" : "新版合作伙伴采购流程" , "Dept" : "经营管理部" , "DETAIL" :

[ { "WF" : "01" , "WFNAME" : "启动"} , { "WF" : "02" , "WFNAME" : "结束"}]}

</findDocuments>

2、扩展文档,返回文档系统级的_id

(1)插入单文档操作

MongoDB语法:

.save({"ID":"2015040012","Name":"新版外包采购流程","Dept":"经营管理部"})

Soap请求:

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">

<SOAP:Body>

<GetExpandDocument xmlns="http://schemas.cordys.com/XiaoywWSAppServerPackage" preserveSpace="no" qAccess="0" qValues="">

<collectionName>BusinessEntity</collectionName>

<JSONString>{"ID":"2015040012","Name":"新版外包采购流程","Dept":"经营管理部"}</JSONString>

</GetExpandDocument>

</SOAP:Body>

</SOAP:Envelope>

返回_id值如下:

<getExpandDocument>5525e34d84ae4cb2fa2e2be6</getExpandDocument>

(2)插入嵌套文档(相当于一对多关系)

MongoDB语法:

.save({ID:‘2015040013‘,Name:‘新版合作伙伴采购流程‘,Dept:‘经营管理部‘,DETAIL:[{WF:‘01‘,WFNAME:‘启动‘},{WF:‘02‘,WFNAME:‘结束‘}]})

Soap请求:

<GetExpandDocument xmlns="http://schemas.cordys.com/XiaoywWSAppServerPackage" preserveSpace="no" qAccess="0" qValues="">

<collectionName>BusinessEntity</collectionName>

<JSONString>{ID:‘2015040013‘,Name:‘新版合作伙伴采购流程‘,Dept:‘经营管理部‘,DETAIL:[{WF:‘01‘,WFNAME:‘启动‘},{WF:‘02‘,WFNAME:‘结束‘}]}</JSONString>

</GetExpandDocument>

(3)修改数据,在_id值不变的情况下,执行修改操作

MongoDB语法:

.save({"_id":{"$oid":"5525d9e084ae4890fc58c489"},"ID":"2015040011","Name":"经领导外包采购流程","Dept":"经营管理部"})

Soap请求:

<GetExpandDocument xmlns="http://schemas.cordys.com/XiaoywWSAppServerPackage" preserveSpace="no" qAccess="0" qValues="">

<collectionName>BusinessEntity</collectionName>

<JSONString>{"_id":{"$oid":"5525d9e084ae4890fc58c489"},"ID":"2015040011","Name":"经领导外包采购流程","Dept":"经营管理部"}

</JSONString>

</GetExpandDocument>

附件代码:

/*

This class has been generated by the Code Generator

*/

package com.unicom.xiaoywwsappserverpackage;

import com.cordys.cpc.bsf.busobject.BusObjectConfig;

import com.cordys.cpc.bsf.busobject.BusObjectIterator;

import com.mongodb.DB;

import com.mongodb.DBCollection;

import com.mongodb.DBCursor;

import com.mongodb.DBObject;

import com.mongodb.BasicDBObject;

import com.mongodb.MongoClient;

import com.mongodb.MongoClientURI;

import com.mongodb.WriteResult;

import com.mongodb.util.JSON;

public class C_MongoPackage extends C_MongoPackageBase

{

public C_MongoPackage()

{

this((BusObjectConfig)null);

}

public C_MongoPackage(BusObjectConfig config)

{

super(config);

}

/* 内部私有共享方法:用于链接数据库,需要传输DB */

private static DB connectDB(DB v_db){

try {

MongoClientURI uri = new MongoClientURI("mongodb://用户名:密码@10.64.52.120:27017/数据库名称");

MongoClient client =  new MongoClient(uri);

v_db = client.getDB("ayuming");

} catch (Exception e) {

e.printStackTrace();

}

return v_db;

}

/* 查询返回单个文档,输入参数分别为Collection名称、查询条件 */

public static String findDocuments(String collectionName, String querycondition)

{

DB db = null;

String ret_str = null;

try {

db = connectDB(db);

DBCollection collection = db.getCollection(collectionName);

DBObject query = (BasicDBObject) JSON.parse(querycondition);

DBCursor dbCursor = collection.find(query);

int curCount = dbCursor.count();

if (curCount > 0){

ret_str = dbCursor.next().toString();

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (db != null) {

try {

db.requestDone();

db = null;

} catch (Exception e) {

e.printStackTrace();

}

}

}

return ret_str;

}

public static BusObjectIterator<com.unicom.xiaoywwsappserverpackage.C_MongoPackage> getC_MongoPackageObjects(com.cordys.cpc.bsf.query.Cursor cursor)

{

// TODO implement body

return null;

}

/* 保存单个文档到数据库中,输入参数为Collection名称、JSON格式的文档,支持嵌套模型 */

public static String getExpandDocument(String collectionName,String JSONString) {

DB db = null;

String ret_id = null;

try {

db = connectDB(db);

DBCollection collection = db.getCollection(collectionName);

DBObject query = (BasicDBObject) JSON.parse(JSONString);

WriteResult writeResult = collection.save(query);

ret_id = query.get("_id").toString();

} catch (Exception e) {

e.printStackTrace();

} finally {

if (db != null) {

try {

db.requestDone();

db = null;

} catch (Exception e) {

e.printStackTrace();

}

}

}

return ret_id;

}

public void onInsert()

{

}

public void onUpdate()

{

}

public void onDelete()

{

}

}

注:此代码只是PoC使用,请完善加入日志处理等必要功能再使用到生产环境上。

参考及相关:

云计算统一办公运营平台服务能力设计方案》 肖永威 2014.11

用MongoDB数据库来管理办公系统中文档型的表单和信息——通用流程化应用审批单设计思路(二,续)》 肖永威 2015.01

时间: 2025-01-16 02:37:48

Cordys BOP 4平台开发实战——MongoDB提供文档服务(1)的相关文章

Cordys BOP 4平台开发入门实战演练——While循环流程建模开发及测试

关于While循环 Cordys C3版本中,While循环解释如下: While循环是BPMN组构造,用于一组活动或子流程执行所满足的While条件.在每个循环体开始,进行测试条件,如果测试结果为"假"是则不执行.因此,这组活动或子流程将执行0或多次.While结构用于执行多次循环或根本不执行:也就说,从开始条件是假,将不执行循环.当在循环体内迭代循环,当前循环的打破也是下一次循环迭代的开始.打破循环功能有助于打破或退出循环,继续执行循环体后续活动环节.While结构代表图例如下图1

Cordys BOP 4平台开发入门实战演练——Until流程建模开发

关于Until流程 Until是BPMN组结构,用于一组活动环节或子流程在条件为真之前执行.不象While组结构,这组活动环节或子流程至少执行一次.Until结构图表示如下图1所示. 图1 Until流程建模实践 (1)Until流程建模 在Business Process Model里画出如图1所示的流程图. (2)流程绑定表单 流程绑定WhileTest表单. (3)创建Message并与表单绑定 图2 (4)流程Start活动设置Input Message (5)配置Until属性Prop

Cordys BOP 4平台开发入门实战演练——For Each流程建模开发

关于For Each For Each是BPMN组结构,并且体现应该执行消息内每个子单元的活动或子流程.For Each循环使用一个计数器,称为一个详尽描述重复执行相同活动的迭代器.For Each代表图如下图1所示. 图1 迭代器有下述3个数值: 初始迭代器值 增量值 执行条件 在执行条件失败时循环结束.应复制对于结构中"Message Map"的递归元素(Element)的XPath去工作. For Each循环流程实践 (1)新建BPM流程 按下图2所示,用鼠标圈上活动环节,点击

Cordys BOP 4平台开发入门实战演练——Webservices开发(使用MongoDB数据库)

1.在WS-AppServer Package中新建自定义类"C_MongoPackage" 2.添加自定义方法Method,expandDocument和findDocuments两个方法. 3.方法设置两个参数,分别是collectionName和JSONString. 4.由系统产生Java代码 5.弹出如下"Generate Java Code on WS-AppServer Models"窗口. 6.由系统生产WebService 7.弹出Generate

OpenText Cordys BOP 4平台开发入门实战演练——基础理论知识

前言 随着互联网技术的发展,基于B/S结构的软件架构,呈现出多样化,所涉及到的富客户端.Webservice.WEB 2.0.HTML5等技术也粉墨登场,本文将介绍基于OpenText Cordys产品的SOA体系架构和相关开发技术,为开发人员分享另一种软件系统开发实践. 其中,富客户模型将界面分解成许多的既可以和用户直接交互又可以和服务器进行通信的小单元模块,所涉及到开发语言是JavaScript,以及围绕HTML DOM开发动态网页. 关于SOA SOA是面向服务的体系结构,它将应用程序的不

Cordys BOP 4平台开发入门实战演练——Webservices开发(1)

0.文章导读 本文档针对Cordys BOP-4 WS-AppServer基础功能进行验证和快速开发指导.(高级实践文档请参考后续文档). 0.1.WS-AppServer概述 WS-AppServer是Web Service Application Server的简称,是Cordys平台中基于数据库的Java业务逻辑开发层,其最根本的特性如下: (1)连接数据库 WS-Apps通过连接池访问数据库,可以从数据库表结构直接产生相应的Java代码,并发布成Web服务: 提供事务处理(transac

Cordys BOP 4平台开发入门实战演练——HTML/JS界面开发实践

本文案例介绍基于HTML/JS方式开发Web界面,不使用Cordys XForm的解决方案. 1.定义资源目录 按上图在项目中建立文件夹,上传相关资源文档到指定文件中,例如下图把bootstrap.js文件上传到js文件夹中. 2.新建HTML网页 编写HTML文件,并保存为Demotenantcount.htm. 3.设置访问界面起点 配置界面资源定义文件,告知Cordys平台这些网页界面访问资源. 4.定义Web资源发布位置 定义Web资源位置为:"Training_WSApp/Web&qu

Cordys BOP 4平台开发入门实战演练——Webservices开发(2)

1.前言 本文主要是通过实战演练,介绍各类个性化.自定义WebService及其方法的开发方法,以及相关技术,重点介绍Cordys NOM类型(底层基于C语言的XML对象解析),以及Java中Soap WebService的调用技术. 首先介绍本文所依赖的数据库设计,采用常用的主从表模式,包括:用户账号表"sm_account".登录验证用户表"sm_auth_account".租户账号表"sm_tenant_account ",提供人员多重身份

Cordys BOP 4平台开发入门实战演练——流程建模开发(BPM)

1.流程建模开始 在Workspace的项目中,本文项目名称为:Training_WSApp.在项目中根目录下建立BPM文件夹,然后鼠标右键,在弹出菜单中选择New ->Business Process Model组件,进行流程建模开发. 图1 图2 2.图形化建模 在Business Process Model工作台上,图形化.拖拽绘制流程图. 图3 (1)为BPM流程配置表单(新建) 图4 注意:发布表单 图5 在Business Process Model界面中,在其左下角选择Worksp