1. BPM集成
1.1. BPM集成开发流程
外部系统可以发起协同平台的HTML正文协同和表单协同,按照管理员预先设定的流程和表单模板进行流转.
接口列表
- public ServiceResponse launchFormCollaboration(String token, String senderLoginName, String templateCode, String subject, String data, Long[] attachments, String param, String relateDoc) throws ServiceException; 用途:发起表单流程。 参数:token为登录验证后获取的身份令牌;senderLoginName为发起者的登录名(登录协同的登录名);templateCode为模板编号;subject为协同的标题;data为XML格式的表单数据,格式与getTemplateDefinition返回值中的FormExport相同。保障数据的正确性,参见表单XML2.0版本。同时兼容1.0和2.0格式的XML。 attachments为上传附件的文件ID数组(通过上传附件接口获得);param为控制是否流程发送。0:缺省值,发送,进入下一节点的待办(如果需要选人则保存到待发)1:不发送,保存到待发;relateDoc上传附件为关联文档,relateDoc格式:模块类型1|关联文档ID;模块类型2|关联文档ID,关联文档ID。例如:"col|123;doc|321,654",目前只支持关联协同文档,模块类型为col,此参数可以为空。 返回值:返回流程Id。
- public ServiceResponse launchHtmlCollaboration(String token, String senderLoginName, String templateCode, String subject, String bodyContent, Long[] attachments) throws ServiceException; 用途:发起html正文流程(不包括office正文)。 参数:token为登录验证后获取的身份令牌;senderLoginName为发起者的登录名(登录协同的登录名);templateCode为模板编号;subject为协同的标题;bodyContent为HTML正文内容;attachments为上传附件的文件ID数组(通过上传附件接口获得)。 返回值:返回流程id。
- long getFlowState(String token,long flowId) throws ServiceException; 用途:取得流程运转状态。 参数:token为登录验证后获取的身份令牌;flowId为流程Id(launchFormCollaboration或launchHtmlCollaboration的返回值)。 返回值:返回流程的状态。
- public long[] getFormCollIdsByDateTime(String token,String[] templateCode,String beginDateTime,String endDateTime) throws ServiceException; 用途:按时间段查询指定表单模板已经审批通过和结束的流程。 参数:token为登录验证后获取的身份令牌;templateCode为模板编号数组;beginDateTime开始查询时间(yyyy-MM-dd HH:mm:ss);endDateTime结束查询时间(yyyy-MM-dd HH:mm:ss)。 返回值:返回流程Id数组。
- getTemplateDefinition(已废弃) 用途:获取表单模板定义。请手动发起模板流程后,使用exportFlow2获取模板的定义(导出流程信息时,原始接口exportFlow作为1.0版本不做任何改动。针对2.0版本单独提供导出接口exportFlow2,参数与1.0版本相同)
流程状态:
表单XML2.0版本:
3.12SP1以后版本简化了XML格式,推出2.0版本的表单数据XML。
1.0版本的XML里的数据值不能包含“<”、“&”等字符,否则发起表单流程将会失败,2.0以后支持这些特殊字符。
1.0版本仅兼容旧的开发,如果您基于3.12SP1以后版本,请使用2.0版本的XML进行开发。
2.0格式XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<formExport version="2.0">
<!-- 表单基本属性 -->
<summary id="6903526366448995796" name="formmain_0096"/>
<!-- 主表值列表 -->
<values>
<column name="项目名称">
<value><![CDATA[神华集团项目]]></value>
</column>
<column name="负责人">
<value>2</value>
<title>张强</title>
</column>
</values>
<!-- 从表列表 -->
<subForms>
<subForm>
<!-- 从表值列表 -->
<values>
<row>
<column name="源码名称">
<value><![CDATA[系统]]></value>
</column>
<column name="改进建议">
<value><![CDATA[0]]></value>
<title><![CDATA[进一步提高]]></title>
</column>
</row>
</values>
</subForm>
</subForms>
</formExport>
元素和属性说明:
获取表单数据定义:
有两个途径可以获取表单数据XML的规范: 1 按照模板编号调用BPMService.getTemplateDefine,但导出的XML只包含字段定义,不包含数据格式。 2 在协同中使用表单模板填写数据,发起流程,按照协同Id调用DocumentService.exportFlow,导出的XML中FormExport部分就是包含数据的定义。
3.12SP1以后版本可以按照下面的步骤获取2.0版本定义:
在协同平台中使用表单模板填写数据,发起流程,按照协同Id调用DocumentService的exportFlow2,导出的XML中FormExport部分就是包含数据的定义。(DocumentService的exportFlow导出的xml为1.0版本的数据)
导出的XML片段如下:
发起表单流程数据的校验Schema和XSL文件校验发起流程的表单XML,以避免运行时发生错误
指定了Schema和XSL的XML文件示例,请参照添加Schema和XSL。
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="http://127.0.0.1/seeyon/FormExport.xsl"?> <DataPojo type="FormExport" version="1" valuecount="5" isnull="false" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://127.0.0.1/seeyon/FormExport.xsd">
Schema校验:指定Schema:在XML的Root节点(DataPojo type="FormExport")添加Schema属性
<DataPojo type="FormExport" version="1" valuecount="5" isnull="false" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://{host}/seeyon/FormExport.xsd">
校验:使用XML编辑器(如XMLSpy)进行Schema校验,保证XML的结构合法。
指定XSL:在XML的PI(<?xml version="1.0" encoding="UTF-8"?>)后添加<?xml-stylesheet type="text/xsl"href="http://{host}/seeyon/FormExport.xsl"?>校验:使用IE打开添加了XSL的XML文件,系统会用红色字体提示文件中的错误。
简化发起流程的XML:为控制XML的大小,发起流程时可以不包含definitions中的数据,但必须有definitions声明。例如XML中的
<DataProperty propertyname="definitions" valuetype="10" isnull="false" length="2"> <DataPojo type="DefinitionExport" version="1" valuecount="11" isnull="false"> <DataProperty propertyname="len" valuetype="0" value="20"/> <DataProperty propertyname="enumId" valuetype="3" value="-1"/> <DataProperty propertyname="defaultValue" valuetype="1" isnull="false"/> <DataProperty propertyname="type" valuetype="0" value="0"/> <DataProperty propertyname="extendName" valuetype="1" isnull="true"/> <DataProperty propertyname="mathRuleScript" valuetype="1" isnull="true"/> <DataProperty propertyname="optionId" valuetype="0" value="0"/> <DataProperty propertyname="digits" valuetype="0" value="0"/> <DataProperty propertyname="isNullable" valuetype="0" value="0"/> <DataProperty propertyname="name" valuetype="1" isnull="false">start_member_id</DataProperty> <DataProperty propertyname="displayName" valuetype="1" isnull="false">发起人</DataProperty> </DataPojo> <DataPojo type="DefinitionExport" version="1" valuecount="11" isnull="false"> <DataProperty propertyname="len" valuetype="0" value="20"/> <DataProperty propertyname="enumId" valuetype="3" value="-1"/> <DataProperty propertyname="defaultValue" valuetype="1" isnull="false"/> <DataProperty propertyname="type" valuetype="0" value="0"/> <DataProperty propertyname="extendName" valuetype="1" isnull="true"/> <DataProperty propertyname="mathRuleScript" valuetype="1" isnull="true"/> <DataProperty propertyname="optionId" valuetype="0" value="0"/> <DataProperty propertyname="digits" valuetype="0" value="0"/> <DataProperty propertyname="isNullable" valuetype="0" value="0"/> <DataProperty propertyname="name" valuetype="1" isnull="false">approve_member_id</DataProperty> <DataProperty propertyname="displayName" valuetype="1" isnull="false">审核人</DataProperty> </DataPojo> </DataProperty>
可以替换为
<DataProperty propertyname="definitions" valuetype="10" isnull="true" length="0"/>
流程日志 为了对发起表单流程进行运行时的监控,提供了BPM流程日志,在服务器的/USER-DATA/BPM/logs/FlowLog.log中记录发起流程的状态(模板编号、发起人、发起时间、是否成功、发起的协同Id、描述、xml),如果出错了在描述中记录错误信息。并在webapps/seeyon/USER-DATA/BPM/xml中保存发起流程的xml文件。 可以通过webapps/seeyon/WEB-INF/cfgHome/base/Log4j.properties修改流程日志的级别:缺省为info,记录所有,调试稳定后可修改为warn(只记录警告和出错的流程)或error(只记录出错的流程)
#
# FlowLog
#
log4j.category.com.seeyon.v3x.services.flow.log = info , flowLog
log4j.additivity.com.seeyon.v3x.services.flow.log = false