1. 表单流程集成

1.1. 概述

1.1.1. 关于模板编号

无论是发起Html正文流程,还是表单流程,模板编号至关重要,它决定了发起的流程。

1.1.2. Html正文流程模板编号

  • 单位管理员登录。

  • 进入功能应用设置 → 协同应用设置 → 新建

  • 点击高级,在模板编号中设置。

1.1.3. 表单正文流程模板编号

  • 表单管理员登录。

  • 进入表单应用 → 流程表单制作 → 新建

  • 点击应用绑定,在模板编号中设置。

1.1.4. ctp_affair表STATE字段含义

参数 说明
col_waitSend(1) 协同-待发
col_sent(2) 协同-已发
mcol_pending(3) 协同-待办
col_pending_repeat_auto_deal(30) 待办-重复处理自动跳过
col_done(4) 协同-已办
col_cancel(5) 协同-取消
col_stepBack(6) 协同-回退
col_takeBack(7) 协同-取回
col_competeOver(8) 协同-竞争执行结束
col_stepStop(15) 协同-终止
mt_attend(9) 会议-参与
mt_unAttend(10) 会议-不参与
edoc_exchange_send(3) 公文交换-待发送
edoc_exchange_sent(4) 公文交换-已发送
edoc_exchange_receive(3) 公文交换-待签收
edoc_exchange_received(4) 公文交换-已签收
edoc_exchange_register(3) 公文交换--待登记
edoc_exchange_registered(4) 公文交换--已登记
edoc_exchange_withdraw(18) 公文交换--被撤销
inquiry_no_audit(20) 调查--待审核
bul_toaudit(21) 公告--待审核
news_toaudit(22) 新闻--待审核
info_failure(23) 信息报送-失效
info_stepBack(24) 信息报送-退件

1.2. 发起表单(Html正文)流程

可发起指定模板的Html正文流程或表单流程。

1.2.1. 推荐使用接口(Since:V80sp1)

接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/bpm/process/start

示例:

Map<String, Object> map = new HashMap<String, Object>();
        map.put("appName", "collaboration");

        Map<String, Object> data1 = new HashMap<String, Object>();
        data1.put("templateCode", "asss_001");
        data1.put("draft", "0");
        data1.put("attachments", new ArrayList<Long>() {
            add(3128081619541315193l); 
            add(-1686961755437117824l);
        });
        data1.put("relateDoc", "col|-2871660587841141706,-1609894079662438907");
        data1.put("subject", "aaa1");

        Map<String, Object> data2 = new HashMap<String, Object>();
        data2.put("formmain_0018", new HashMap<String, Object>(){put("申请人", "saa"); put("车牌号", "ddd");});

        data1.put("data", data2);

        map.put("data", data1);
        Map result = client.post("bpm/process/start" ,map);

传入参数说明:

参数 是否必须 说明
appName 应用类型
data data参数

data参数

参数 是否必须 说明
templateCode 模板编号,参见表单正文流程模板编号
draft 是否为待发:0:新建-发送;1:新建-保存待发
attachments 协同标题区附件,Long型List,值为附件的Id。Id是附件接口响应结果中fileUrl字段的值。
relateDoc 协同公文的id
subject 未设置取模板设置的标题
data 表单data参数

表单data参数

参数 是否必须 说明
formmainxxx 表单字段数据,json格式:key字段显示名称,value字段值(如果是cap4的附件控件,则value为附件的相关信息)
formsonxx1 数组结构,参考主表
thirdAttachments CAP4附件参数

thirdAttachments参数说明

参数 是否必须 说明
subReference 对应的附件字段的value值
fileUrl 上传的附件ID
sort 附件排序

请求参数示例:

{
    appName : "collaboration",
    data : {
        data :{
            "formmainxxx":{
                "申请人":"人员Id",
                "部门Id":"研发中心",
                "申请日期":"2018-06-13"
            },
            "formsonxx1":[
                {
                    "商品名称":"键盘",
                    "单价":23,
                    "期望到货时间":"2018-06-20"
                },
                {
                    "商品名称":"鼠标",
                    "单价":33,
                    "期望到货时间":"2018-06-20"
                }],
            "formsonxx2":[
                {
                    "商品名称":"键盘",
                    "实际单价":21,
                    "到货时间":"2018-06-19"
                },
                {
                    "商品名称":"键盘",
                    "实际单价":30,
                    "到货时间":"2018-06-19"
                }],
            "thirdAttachments" : [
                {
                    "subReference":8451540374587001174,
                    "fileUrl":-7390855572027915259,
                    "sort":1
                },
                {
                    "subReference":8451540374587001174,
                    "fileUrl":-7390855572027915268,
                    "sort":2
                }
            ]
        },
        templateCode : "001",
        draft : "0",
        attachments : [
            123456,
            123457],
        relateDoc : "col|123,456;doc|321,654",
        subject : ""
    }
}

返回数据:

{
  "code" : 0,
  "data" : {
    "workitems" : [ {
      "nodeName" : "节点姓名",
      "userLoginName" : "loginName",
      "id" : "6063271658185834554",
      "userName" : "用户姓名",
      "nodeId" : "15940211100644",
      "userId" : "5647565013925644425"
    } ],
    "app_bussiness_data" : "{\"affairId\":\"-7826004588359563757\",\"summaryId\":\"2076716881761815485\"}",
    "processId" : "5724125432261003059",
    "subject" : "aaa1",
    "errorMsg" : ""
  },
  "message" : ""
}

返回参数说明:

参数 说明
code 返回码
nodeName 节点名称
userLoginName 登录名
id wf_workitem_run.id
userName 用户名
nodeId 节点ID(ctp_affair.activity_id)
userId 人员ID
affairId 事项ID
summaryId 协同ID
processId 流程ID(ctp_affair.process_id)
subject 标题

1.2.2. 过时接口(V61update)

注意V6.1此接口支持直接传入JSON数据格式。

接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/flow/{templateCode}
例如:
http://127.0.0.1/seeyon/rest/flow/A0001

参数说明:

发起表单流程所需要参数,可以参考文档【BPM集成】中的【public ServiceResponse launchFormCollaboration(String token, String senderLoginName, String templateCode, String subject, String data, Long[] attachments, String param) throws ServiceException;】;

参数 是否必须 说明
templateCode 模板编号,参见表单正文流程模板编号
token 为登录验证后获取的身份令牌
senderLoginName 发起者的登录名(登录协同的登录名)
subject 协同的标题
data HTML正文流程为html内容;取得流程正文数据支持传入json格式数据
attachments 附件,Long型List,值为附件的Id。Id是附件接口响应结果中fileUrl字段的值。
param 为控制是否流程发送。0:缺省值,发送,进入下一节点的待办(如果需要选人则保存到待发)1:不发送,保存到待发。
transfertype (V6.1增加)data格式,xml:表示data为XML格式;json:表示data为json格式
formContentAtt (V6.1增加) 表单附件 组件传入ID参数
accountCode (V6.1增加)发起人单位编码(用于发起人兼职多单位情况,用不同单位角色发起流程)

参数获取说明:

发起表单是多参数,建议组装为MAP传参。 token身份令牌:token在CTPRestClient中已经封装好的,如果要单独获取可如下方式:

private CTPRestClient client = null;
CTPServiceClientManager clientManager = CTPServiceClientManager.getInstance("http://127.0.0.1");
client = clientManager.getRestClient();
...
String token = client.get("token/" + userName + "/" + password+"?loginName="+loginName, String.class,"text/plain");

senderLoginName发起者的登录名:发起者登录OA的登录名,如下:

String senderLoginName ="lsm";

templateCode模板编号:对应创建模板时填写的模板编号(即ctp_template表TEMPLETE_NUMBER字段)

String templateCode ="100";

subject协同的标题:发出表单模板对应的标题,如下:

String subject ="申请流程标题";

data表单数据:表单数据信息,REST接口提供了获取已经发送的表单流程XML新方法,请参考取得流程正文数据

注意在获取表单数据XML 需要转换成String

提供已发表单转String示例:

private CTPRestClient client = null;
...
String data = client.get("flow/data/-6074085048046957774", String.class);//-6074085048046957774为已发流程ID

V6.1表单流程正文数据支持JSON格式,示例如下:

string data ="{"field1":"主表数据1","field2":"主表数据2",sub:[{"field3":"从表数据3","field4":"从表数据4","field5":"从表数据5"},{"field6":"从表数据6"},{"field10":"从表数据10","field11":"从表数据11"}]}";

注意:这里sub代表从表数据,而field1等字段信息是对应【流程表单制作】-【基础设置】中控件的【名称】字段

表单流水号场景:

现在发起流程接口只支持【计算流水号】

1.新建流水号:创建流水号:表单应用-流水号管理;

2.模板设置流水号:表单应用-流程表单设置-流程表单制作-选择控件-计算公式设置-系统数据域中选择流水号

表单附件组件场景:

1.获取附件ID:通过文档上传接口 获得【注意:如果2个表单附件控件都是同一个附件,也需要上传2次,获取不同的ID,而不能2个表单附件控件共用一个附件ID】

2.发起接口XML/json数据中设置附件ID;

3.需要formContentAtt重设置附件ID;

List<Long> formcontentatt=new ArrayList();//表单正文组件ID,这里需要注意,就算三个正文组件上传的同一个文件,这个文件也需要通过上传接口上传三次,而给予表单控件三个不同的附件ID,不能一个ID给多个表单组件
res.put("formContentAtt",formcontentatt);//表单附件组件

CAP4表单附件组件场景更正(Since V8.0,仅支持CAP4表单)

更正说明:由于原有结构不支持控件多个附件或者附件无法添加到表单中的场景,因此接口请求增加formContentAtt参数,参数为数组格式,说明如下:

参数名 说明
subReference 表单内字段value值,如“上传附件1”的value值
fileUrl 附件ID 文档上传接口
sort 附件排序

CAP4表单附件组件更正调用示例

{
    "data": {
        "文本1": "示例",
        "上传附件1": "8451540374587001174"
    },
    "subject": "示例",
    "senderLoginName": "seeyon",
    "transfertype": "json",
    "formContentAtt":[
        {
            "subReference":8451540374587001174,
            "fileUrl":-7390855572027915259,
            "sort":1
        },
        {
            "subReference":8451540374587001174,
            "fileUrl":-7390855572027915268,
            "sort":2
        }
    ]
}

param为控制流程发送.

String param="0";

表单流程通过REST POST创建示例:

private CTPRestClient client = null;
MAP info =new HashMap();//存放上述参数
String checkUrl ="flow/"+模板ID;
...
client.post(url, info, String.class);

发起HTML正文流程示例1:

Map data = new HashMap() {
            {
                put("senderLoginName", "s1");
                put("subject", "这个是用Map方式发的");
                put("data", "正文内容");
                put("attachments",new Long[] {-1l,-5199818657160149985l});
                put("formContentAtt",formcontentatt);//表单附件控件
            }
        };
        Long flowId1 = client.post("flow/H0001" ,data, Long.class);

发起HTML正文流程示例2:

Long flowId2 = client .post("flow/H0001",
                        "{"senderLoginName":"s1","subject":"这是用JSON发的","data":"HTML正文","attachments":[-1,1]}",
                        Long.class);

返回说明

正常情况下,返回创建成功以后对应的流程Id。

返回异常说明:

异常编码 异常说明
12005 无效的token,请再次验证
21011 单位名称不能为空或不存在
25001 职务级别不存在
25002 职务级别名称为空
25003 职务级别已存在
23023 部门名称为空
23024 父部门名称为空
23025 部门已存在
24001 岗位不存在
24002 岗位名称为空
24003 岗位已存在
22129 设置人员的所属部门出错
22011 人员登录名为空
50126 按登录名查找发起人出错
50121 表单不存在
50122 无表单权限
50123 无流程表单导入出错
50124 XML解析失败
50125 模板不存在
50126 无模板访问权限
50127 非表单正文内容
50128 不是无流程表单,请检查模板编号是否正确
50129 模板为非流程模板,请检查模板编号是否正确
31013 指定流程不存在
50130 此表单已经停用
50131 无输入字段
50132 日期格式错误
50133 没有主表记录错误

1.3. 取得流程正文数据

获取流程(协同)的正文数据,不包括标题等信息。 本接口主要用于帮助开发人员获取发起表单流程所需的data格式。

接口请求说明:

http请求方式:GET
http://ip:port/seeyon/rest/flow/data/{flowId}?exportType=0&exportFormat=json
例如:
http://127.0.0.1/seeyon/rest/flow/data/-5199818657160149985

参数说明:

参数 是否必须 说明
flowId 流程的summaryId
exportType 不填写返回的是枚举的enumvalue, 0返回枚举Showvalue,1返回枚举ID
exportFormat 导出格式:xml,导出XML格式;json,导出JSON格式。since 7.0

返回说明

表单流程返回XML格式的表单数据,HTML正文流程返回正文内容。 如果流程ID错误或者为空时,返回信息为空。 返回的表单数据示例:

<formExport version="2.0">
  <summary id="-3291075926708173666" name="formmain_0001"/>
  <definitions/>
  <values>
    <column name="部门">
      <value>&lt;![CDATA[A]]&gt;</value>
    </column>
    <column name="百万">
      <value/>
    </column>
    <column name="十万">
      <value/>
    </column>
    <column name="">
      <value/>
    </column>
    <column name="">
      <value/>
    </column>
    <column name="">
      <value/>
    </column>
    <column name="">
      <value/>
    </column>
    <column name="">
      <value/>
    </column>
    <column name="">
      <value/>
    </column>
    <column name="">
      <value/>
    </column>
    <column name="用途说明">
      <value>&lt;![CDATA[测试]]&gt;</value>
    </column>
    <column name="财务总监">
      <value/>
    </column>
    <column name="总裁">
      <value/>
    </column>
    <column name="财务审核">
      <value/>
    </column>
    <column name="部门总监">
      <value/>
    </column>
    <column name="部门经理">
      <value/>
    </column>
    <column name="大写分">
      <value>&lt;![CDATA[9]]&gt;</value>
    </column>
    <column name="单据号">
      <value/>
    </column>
    <column name="结算方式">
      <value/>
    </column>
    <column name="日期">
      <value/>
    </column>
    <column name="经手人">
      <value/>
    </column>
    <column name="大写">
      <value/>
    </column>
    <column name="小写">
      <value/>
    </column>
  </values>
 <subForms>
  <values>
 <column name="field5">
      <value/>
    </column>
 </values>
</subForms>
</formExport>

1.4. 取得流程状态

开发者可以通过流程ID(即col_summary表ID)获取流程状态。

接口请求说明:

http请求方式:GET
http://ip:port/seeyon/rest/flow/state/{flowId}

参数说明:

参数 是否必须 说明
flowId 流程的summaryId

返回说明

正常情况下,会返回的是Integer类型的数值。 如果录入的流程ID错误或者为空时,返回信息为空。

流程状态说明如下图:

1.5. 取得指定表单模板已结束的流程ID

开发者可以通过指定模板编号,TOKEN,开始时间以及结束时间,来获取已经结束的模板流程ID【col_summary表ID】。

接口请求说明:

http请求方式:GET
http://ip:port/seeyon/rest/flow/FromFinish/{templateCode}/{startTime}/{endTime}

参数说明:

参数 是否必须 说明
token[废弃] 验证token信息【还是老SOAP 下的AuthorityServiceTest.authenticate()方式】
templateCode 表单模板编号【如果有多个请以逗号隔开,如String templateCode="789,777";】
startTime 查询开始时间 如2012-01-02
endTime 查询结束时间 如2012-01-02

代码示例

String templateCode="789,777";
token=AuthorityServiceTest.authenticate();
String result = client.get("flow/FromFinish/" + token+"/"+templateCode+"/2012-01-02/2015-12-08", String.class);

返回说明

正常情况下,会返回的是模板流程对应col_summary表ID,否则为空。

1.6. 取得表单模板XML信息(V61update)

开发者可以通过指定模板编号获取表单模板XML信息。

V6.1 增加获取表单XML2.0格式接口

接口请求说明:

http请求方式:GET
http://ip:port/seeyon/rest/flow/FromTemplate/{templateCode}
http请求方式:GET(V6.1增加获取表单XML2.0接口)
http://ip:port/seeyon/rest/flow/fromtemplatexml/{templateCode}

参数说明:

参数 是否必须 说明
templateCode 表单模板编号

返回说明

正常情况下,会返回的表单模板XML信息。

1.7. 取得指定表单HTML信息

开发者可以通过表单流程affairId和人员ID获取表单HTML信息。

注意:affairId不能用发起状态对应的ID,也就是affairId表STATE为2的ID,同时,当表单流程做了预归档后,doc_resources表存的SOURCE_ID也是发起节点affairId,也是不能用于此接口的。

接口请求说明:

http请求方式:GET
http://ip:port/seeyon/rest/form/export/{affairId}/{memId}

参数说明:

参数 是否必须 说明
affairId 表单affairId
memId 人员ID

返回说明

DEMO:
CTPRestClient client = RestResource.getInstance().resouresClent();
String result[] = client.get("form/export/{affairId}/{memId}", String[].class);
System.out.println(result[0]);//只是表单数据
System.out.println(result[1]);//完整的HTML信息(包括数据信息)

正常情况下,会返回的表单HTML信息。

1.8. 取得指定表单流程当前待办人员信息(Since:V61)

开发者可以通过表单流程summaryId获取表单当前待办人员信息。

接口请求说明:

http请求方式:GET
http://ip:port/seeyon/rest/flow/dostaff/{summaryId}

参数说明:

参数 是否必须 说明
summaryId 表单summaryId

返回说明

正常情况下,会返回的表单流程待办节点人员信息。

1.9. 根据SummaryID或AffairID获取表单数据(Since:V61)

根据SummaryID或者AffairID获取表单数据

接口请求说明:

http请求方式:GET
http://ip:port/seeyon/rest/form/getformdata/{SummaryID或者AffairID}

参数说明:

参数 是否必须 说明
summaryId 表单summaryId
AffairID 表单AffairID

注意:表单summaryId 或者 表单AffairID 必须填一个

返回说明

请求成功,返回的表单数据信息。

1.10. 获取指定协同附件列表(Since:V61)

根据SummaryID或者AffairID获取指定协同附件列表.

接口请求说明:

http请求方式:GET
http://ip:port/seeyon/rest/coll/attachments/{SummaryID}/{AffairID}/{attType}

参数说明:

参数 是否必须 说明
summaryId 表单summaryId
attType 0代表附件,2代表关联文档,“0,2”代表附件和关联文档
示例:
Long summaryId=6469925997427117213L;
Long affairId=0L;
client.get("coll/attachments/"+summaryId+"/2", String.class);

返回说明

请求成功,返回的附件列表信息。

1.11. 获取人员有权限模板ID列表(Since:V61)

根据人员登录名,获取该人员所有权限调用的协同及表单模板ID列表.

接口请求说明:

http请求方式:GET
http://ip:port/seeyon/rest/template/templateidlist/{loginName}/{moduleType}

参数说明:

参数 是否必须 说明
loginName 登录名
moduleType 1-协同模板;2-表单模板,4-公文模板
示例:
client.get("template/templateidlist/lsm/1,2,4", String.class);

返回说明

请求成功,返回的模板ID列表信息。

1.12. 协同处理接口

1.12.1. 推荐使用接口(Since:V80sp1)

接口请求说明

http请求方式:POST
http://ip:port/seeyon/rest/bpm/workitem/finish

示例:

Map<String, Object> map = new HashMap<String, Object>();
map.put("appName", "collaboration");
map.put("workitemId", "6063271658185834554");

Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("attitude", "1");
map1.put("content", "意见内容");

Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("comment_deal", map1);
map2.put("submitType", "1");
map2.put("baseProcessXML", "");
map2.put("baseReadyObjectJSON", "");
map2.put("messageDataList", "");
map2.put("changeMessageJSON", "");
map.put("data", map2);
Map result = client.post("bpm/process/finish" ,map);

参数说明:

参数 是否必须 说明
appName 应用类型
workitemId 事项ID(wf_workitem_run.id)
attitude 态度(1 已阅, 2 同意, 3 不同意)
content 意见内容
submitType 是否需要提交协同 (1:提交协同,2:暂存待办 默认1)
baseProcessXML 工作流XML。工作流有加签和减签时传入processXML。
baseReadyObjectJSON 当前会签信息, 由后台生成, 加签/知会不传值,该参数可以为null,此时表示没有针对当前流程的Ready状态的节点 如果不为空,并且格式符合BPMProcess的话,在该xml的基础上执行流程修改操作
messageDataList 发送消息用的json格式字符串, 由后台生成
changeMessageJSON 加签/减签等操作数据, 后台生成

返回说明 请求成功: 返回信息中"code" : 0 非0表示异常。

1.12.2. 过时接口(Since:V60)

处理自由协同操作接口(暂时只支持协同与表单流程)。

接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/affair/finishaffair

参数说明:

参数 是否必须 说明
affairId 流程ID
memberid 当前处理人ID
comment 处理意见
attitude 态度:1同意,2不同意,0已阅
示例:
    Map res = new HashMap();
    res.put("affairId", 4649147029372880118L);
    res.put("memberid", "5225821413792960362");//当前处理人ID
    res.put("comment", "可以我看到了!");//处理意见
    res.put("attitude", "0");//态度:1同意,2不同意,0已阅

    client.post("affair/finishaffair", res, String.class);

返回说明

请求成功,返回的true。

1.13. 协同终止接口(Since:V60)

终止协同流程操作(暂时只支持协同与表单流程)。

接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/affair/stop

参数说明:

参数 是否必须 说明
affairId 流程ID
repealComment
member 当前处理人登录名
示例:
    Map res = new HashMap();
    res.put("affairId", -3163744027596143175L);
    res.put("repealComment", "");
    res.put("member", "lsm");//当前处理人登录名

    client.post("affair/stop", res, String.class);

返回说明

请求成功,返回的true。

1.14. 协同撤销接口(Since:V60)

撤销协同流程操作(暂时只支持协同与表单流程)。

接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/affair/cancel

参数说明:

参数 是否必须 说明
affairId affairId ID
summaryId summaryId ID
member 当前处理人登录名
示例:
    Map res = new HashMap();
    res.put("summaryId", 8846764470742567536L);
    res.put("affairId", -2108792029172252434l);
    res.put("member", "lsm");//当前处理人登录名

    client.post("affair/cancel", res, String.class);

返回说明

请求成功,返回的true。

1.15. 协同取回接口(Since:V61sp1)

取回协同流程操作(暂时只支持协同与表单流程)。

接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/bpm/workitem/takeback

参数说明:

参数 是否必须 说明
appName(String) 应用类型,协同,表单设置为:collaboration
workitemId(String) 待办事项Id,对应ctp_affair表SUB_OBJECT_ID字段
dataMap(Map) Key有这些isSaveOpinion:是否在原意见上修改.true:保留原意见。
示例:
   Map datares = new HashMap();
   datares.put("isSaveOpinion", "true");//是否在原意见上修改。 "true", 保留原意见

    Map res = new HashMap();
    res.put("appName", "collaboration");//应用类型,协同表单设置为:collaboration
    res.put("workitemId", "");//对应事项接口返回对象中的subObjectId
    res.put("data",datares);//当前处理人登录名

    client.post("bpm/workitem/takeback" ,res, String.class);

返回说明 请求成功: 返回信息中"code" : 0 非0表示异常。

1.16. 协同回退接口(Since:V61sp1)

回退协同流程操作(暂时只支持协同与表单流程)。 接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/bpm/workitem/stepBack

参数说明:

参数 是否必须 说明
appName(String) 应用类型,协同,表单设置为:collaboration
workitemId(String) 待办事项Id,对应ctp_affair表SUB_OBJECT_ID字段
dataMap(Map) Key有:isWFTrace:0 流程追溯
- comment_deal:attitude:1 已阅,2 同意,3 不同意
- comment_deal:content: 回退意见
示例:
   Map commentres = new HashMap();
   commentres.put("attitude", "1");//"1", //1 已阅,   2 同意, 3 不同意
   commentres.put("content", "回退意见");//意见

   Map datares = new HashMap();
   datares.put("isWFTrace", "0");//,// 流程追溯
   datares.put("comment_deal",commentres);

    Map res = new HashMap();
    res.put("appName", "collaboration");//应用类型,协同表单设置为:collaboration
    res.put("workitemId", "");//对应事项接口返回对象中的subObjectId
    res.put("data",datares);//当前处理人登录名

    client.post("bpm/workitem/stepBack" ,res, String.class);

返回说明 请求成功: 返回信息中"code" : 0 非0表示异常。

1.17. 协同指定回退接口(Since:V61sp1)

指定回退协同流程操作(暂时只支持协同与表单流程)。 接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/bpm/workitem/specifyback

参数说明:

参数 是否必须 说明
appName(String) 应用类型,协同,表单设置为:collaboration
workitemId(String) 待办事项Id,对应ctp_affair表SUB_OBJECT_ID字段
targetNodeId(String) 被指定回退的节点ID,对应ctp_affair表ACTIVITY_ID字段
stepbackStyle(String) 0:表示回退流程会一个个通过中间节点回退到指定节点,1:表示直接跳过中间的节点,直接到指定节点
dataMap(Map) Key有:isWFTrace:0 流程追溯
- comment_deal:attitude:1 已阅,2 同意,3 不同意
- comment_deal:content: 回退意见
示例:
   Map commentres = new HashMap();
   commentres.put("attitude", "1");//"1", //1 已阅,   2 同意, 3 不同意
   commentres.put("content", "指定回退意见");//意见

   Map datares = new HashMap();
   datares.put("isWFTrace", "0");//,// 流程追溯
   datares.put("comment_deal",commentres);

    Map res = new HashMap();
    res.put("appName", "collaboration");//应用类型,协同表单设置为:collaboration
    res.put("workitemId", "");//对应事项接口返回对象中的subObjectId
    res.put("targetNodeId", "");//可以通过指定回退到节点人员的已办事项接口来获取,对应已办事项接口返回对象的activityId
    res.put("data",datares);//当前处理人登录名

    client.post("bpm/workitem/specifyback" ,res, String.class);

返回说明 请求成功: 返回信息中"code" : 0 非0表示异常。

1.18. 流程加签/当前会签/知会/多级会签接口(Since:V7.0)

流程加签/当前会签/知会/多级会签 操作。 接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/bpm/process/addNode

参数说明:

参数 是否必须 说明
appName(String) 模块ID:("collaboration")(公文暂不支持)
workitemId(String) 业务ID,对应ctp_affair表CASE_ID字段
changeType(String) 流程修改类型(1加签、2知会、3当前会签、5多级会签、6传阅)
submitType(String) 是否需要提交协同 (0:不需要,1:提交协同,2:暂存待办 默认1)
data(String) 流程修改信息
示例:

        CTPRestClient client = RestResource.getInstance().resouresClent();
        String jsonData ="{'add_node_info': {"
                + "'userId': ['-5497257474554312519|true', '4867812283561102527']," //加签的组织机构id(人员,部门,岗位,组,外部单位和单位id), 如果传入的是部门(部门id|是否包含子部门(不包含true,包含false,不传默认为false))
                其他只传入id即可
                + "'node_process_mode': 'all'," //有多人节点时的执行模式(全体执行:all,竞争执行:competition。默认全体执行)
                + "'policyId': '-1615966327731106420'," //节点权限id(当前会签才传入,知会和当前会签都不传入)
                + "'formOperationPolicy': '1'," //    表单节点权限(0:同当前节点权限,1:只读。普通协同默认为0,表单协同默认为1)
                + "'backToMe': '1'," //加签处理后流程是否回到我(0:否,1:是)
                + "'dealTerm': '2017-11-10 11:12'," //节点期限(节点期限到期的时间。时间格式 "yyyy-MM-dd HH:mm")
                + "'remindTime': '4320'," //提前提醒时间传入分钟数,只能传入下面的数字(0:无,5:5分钟,10:10分钟,15:15分钟,30:30分钟,60:1小时,120:2小时,180:3小时,240:4小时,480:8小时,720:0.5天,1440:1天,2880:2天,4320:3天,10080:1周)
                + "'flowType': '2'" //加签类型(并发:2,串发:1,与下一节点并发:5)
                + "},"
                + "'comment_deal': {"
                + "'attitude': '1'," //// 1 已阅, 2 同意, 3 不同意
                + "'content': '接口指定回退'"
                + "}"
            + "}";
        Map map = new HashMap() {
            {
                put("appName", "collaboration"); //必填|模块id(eg:"collaboration","edoc")
                put("workitemId", "5593664130991175609");//业务ID
                put("changeType", "1");//流程修改类型(1加签、2知会、3当前会签)
                put("submitType", "-8808053010255165035");// 是否需要提交协同  (0:不需要,1:提交协同,2:暂存待办  默认1)   
                put("data", jsonData);//流程修改信息

            }
        };
        client.post("bpm/process/addNode", map, String.class);

返回说明 请求成功: 返回信息中"code" : 0 非0表示异常。

1.19. 流程减签接口(Since:V7.0)

流程减签 操作。 接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/bpm/process/deleteNode

参数说明:

参数 是否必须 说明
appName(String) 模块ID:("collaboration","edoc")
activityIdList(String) 减签的节点
submitType(String) 是否需要提交协同 (0:不需要,1:提交协同,2:暂存待办 默认1)
data(String) 流程修改信息
示例:

         CTPRestClient client = RestResource.getInstance().resouresClent();
         String jsonData ="{"
                 + "'appName' : 'collaboration',"
                 + "'workitemId' : '-5593664130991175609'," //模块id
                 + "'activityIdList' : '4867812283561102527'," //减签的节点
                 + "'submitType' : '1', " //是否需要提交协同  (0:不需要,1:提交协同,2:暂存待办  默认1)
                 + "'data':{"
                     + "'comment_deal' : {"
                     + "'attitude': '1'," // 1 已阅, 2 同意, 3 不同意
                     + "'content' : '接口指定回退'"
                         + "}"
                     + "}"
                 + "}";
         Map map = new HashMap() {
             {
                 put("appName", "collaboration"); //必填|模块id(eg:"collaboration","edoc")
                 put("activityIdList", "5593664130991175609");//减签的节点
                 put("submitType", "1");//是否需要提交协同  (0:不需要,1:提交协同,2:暂存待办  默认1)    
                 put("data", jsonData);//流程修改信息

             }
         };
         client.post("bpm/process/deleteNode", map, String.class);

返回说明 请求成功: 返回信息中"code" : 0 非0表示异常。

1.20. 节点替换接口(Since:V7.0)

替换流程节点, 新建自由协同和处理流程时的流程编辑都调用这个方法(立即生效) 接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/bpm/process/freeReplaceNode

参数说明:

参数 是否必须 说明
appName(String) 模块ID:("collaboration","edoc")
activityId(String) 数字类型的字符串, 需要替换的节点ID
processId(String) 当前的流程id
caseId(String) 数字类型的字符串, 流程的实例ID, 没有时传-1
data(String) 将节点替换成这个信息
{
   appName : "collaboration",
   activityId : "-5593664130991175609",
   processId : "8492409909120645741", 当前的流程id
   caseId : "327612323971118692",    数字类型的字符串, 流程的实例ID, 没有时传-1  
   "data":{
          "userId":["-5497257474554312519|true","4867812283561102527"] 替换成的组织机构id(人员,部门,岗位,组,外部单位和 单位id),如果传入的是部门(部门id|是否包含子部门(不包含true,包含false,不传默认为false))其他只传入id即可
          }
}
示例:

         CTPRestClient client = RestResource.getInstance().resouresClent();
         String jsonData ="{"
                 + "'appName' : 'collaboration',"
                 + "'workitemId' : '-5593664130991175609'," //模块id
                 + "'processId' : '4867812283561102527'," //减签的节点
                 + "'caseId' : '327612323971118692', " //数字类型的字符串, 流程的实例ID, 没有时传-1  
                 + "'data':{"
                     + "'userId' : ['-5497257474554312519|true','4867812283561102527']" //替换成的组织机构id(人员,部门,岗位,组,外部单位和单位id),
                        //如果传入的是部门(部门id|是否包含子部门(不包含true,包含false,不传默认为false))
                        //其他只传入id即可
                 + "}";
         Map map = new HashMap() {
             {
                 put("appName", "collaboration"); //必填|模块id(eg:"collaboration","edoc")
                 put("activityIdList", "5593664130991175609");//数字类型的字符串, 需要替换的节点ID
                 put("processId", "1");//当前的流程id
                 put("caseId", "1");//数字类型的字符串, 流程的实例ID, 没有时传-1  
                 put("data", jsonData);//将节点替换成这个信息

             }
         };
         client.post("bpm/process/freeReplaceNode", map, String.class);

返回说明 请求成功: 返回信息中"code" : 0 非0表示异常。

1.21. 转办接口(Since:V7.0)

转办,(立即生效) 接口请求说明:

http请求方式:POST
http://ip:port/seeyon/rest/bpm/process/replaceItem

参数说明:

参数 是否必须 说明
appName(String) 模块ID:("collaboration","edoc")
workitemId(String) 当前流程工作事项id
nextMemberId(String) 替换后的人员id
          {
            "appName" : "collaboration",
            "workitemId" : "-5593664130991175609",
            "nextMemberId" : "8492409909120645741", 替换后的人员id
         }
示例:

         CTPRestClient client = RestResource.getInstance().resouresClent();
         Map map = new HashMap() {
             {
                 put("appName", "collaboration"); //必填|模块id(eg:"collaboration","edoc")
                 put("activityIdList", "5593664130991175609");//当前流程工作事项id
                 put("nextMemberId", "1");//替换后的人员id

             }
         };
         client.post("bpm/process/freeReplaceNode", map, String.class);
    }

返回说明 请求成功: 返回信息中"code" : 0 非0表示异常。

1.22. 获取流程图生成图片接口(Since:V7.0)

流程图生成图片 接口请求说明:

http请求方式:GET
:http://ip:port/seeyon/rest/bpm/process/diagramImg?isRunning=true&processId=xxx&workitemId=xxx

参数说明:

参数 是否必须 说明
isRunning(String) 是否是正在运行的流程(true:正在运行,false:模板流程)
processId(String) 流程Id
workitemId(String) 当前事项id
caseId(String) 流程实例Id (isRunning 为true是必填,没有时传-1)

返回说明 请求成功: 返回信息中"code" : 0 非0表示异常。

1.23. 获取表单完整数据函数(Since:V61)

前台本地API:获取当前表单完整数据.

函数位置:common/content/form.js中

函数名称:getFormData()

示例:在commono/content/content.jsp中调用getFormData()
 getFormData();
 var content = {};
 content.contentType = "${contentList[0].contentType}";
 content.moduleType = "${contentList[0].moduleType}";
...

1.24. 按表单字段获取字段信息(Since:V61)

前台本地API:通过指定表单字段(如:field0001)获取指定字段的表单信息.

函数位置:common/content/form.js中

函数名称:getCurrentFormMasterRS({表单字段})

示例:在commono/content/content.jsp中调用getCurrentFormMasterRS({表单字段})
 getCurrentFormMasterRS('field0001');
 var content = {};
 content.contentType = "${contentList[0].contentType}";
 content.moduleType = "${contentList[0].moduleType}";
...

1.25. 通过SummaryId或AffairId获取表单数据(Since:V61)

后台方法API:可以配合后台监听方法,获取表单FormDataMasterBean

函数位置:FormManager

函数名称:selectDataBySummaryIdOrAffairId

示例:配合后台处理事件监听中调用
 @ListenEvent(event = CollaborationProcessEvent.class, async = true)
 public void onProcess(CollaborationProcessEvent event) {
 if (formManager == null) {
 formManager=(FormManager)AppContext.getBean("formManager");
 }
 FormDataMasterBean     formManager.selectDataBySummaryIdOrAffairId(event.getSummaryId().toString());

results matching ""

    No results matching ""