# 发起表单(Html正文)流程

文档链接 (opens new window).

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

# 推荐使用接口(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参数
useNewDataStructure 是否使用新的表单数据格式
doTrigger 是否执行触发

表单data参数

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

thirdAttachments参数说明

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

请求参数示例:

{
    "appName": "collaboration",
    "data": {
        "data": {
            "formmain_0177": {
                "文本1": "测试文本1-111",
                "上传附件1": "3091996204880318295",
                "图片下拉1": "-2767075386175501632"
            },
            "formson_0185": [
                {
                    "图片下拉2": "-2767075386175501632",
                    "上传附件2": "-6092561120937621142"
                }
            ],
            "thirdAttachments": [
                {
                    "subReference": "3091996204880318295",
                    "fileUrl": "432641077895385013",
                    "sort": 1
                },
                {
                    "subReference": "-6092561120937621142",
                    "fileUrl": "355134930180197101",
                    "sort": 1
                }
            ],
            "changedFields":{
                "formmain_0177":["选人1","文本1"],
                "formson_0185":["选人2"]
            }
        },
        "templateCode": "ABC1111",
        "draft": "0",
        "attachments": [
            123456,
            123457
        ],
        "relateDoc": "col|123,456;doc|321,654",
        "subject": "",
        "useNewDataStructure": false,
        "doTrigger": true
    }
}

# 请求表单参数说明(@Since v8.0sp2)

masterTable的结构

参数 类型 是否必填 说明
name String 数据库表名称
record Object 记录的数据
changedFields String[] 需要计算的字段

masterTable—record的结构

参数 类型 是否必填 说明
id long 数据id
fields Object[] 包含字段

masterTable—record—fields的结构

参数 类型 是否必填 说明
name String 数据域名称
value String 数据值(优先)
showValue String 显示值

subTables的结构

参数 类型 是否必填 说明
name String 数据库表名称
records Object[] 包含的所有数据
changedFields String[] 需要计算的字段

subTables—records的结构

参数 类型 是否必填 说明
id long 数据id
fields Object[] 包含字段

subTables—records—fields的结构

参数 类型 是否必填 说明
name String 数据域名称
value String 数据值(优先)
showValue String 显示值

请求参数示例(@Since v8.0sp2):

{
    "appName": "collaboration",
    "data": {
        "data": {
            "masterTable":{
                "name":"formmain_0019",
                "record":{
                    "id":123456789101,
                    "fields":[
                        {
                            "name":"field0001",
                            "value":"",
                            "showValue":"create"
                        },
                        {
                            "name":"field0002",
                            "value":"",
                            "showValue":"one"
                        }
                    ]
                },
                "changedFields": ["field0001","field0002"]
            },
            "subTables": [
                {
                    "name":"formson_0021",
                    "records": [
                        {
                            "id": 123456789101,
                            "fields": [
                                {
                                    "name":"field0005",
                                    "value":"",
                                    "showValue":"cap"
                                }
                            ]
                        }
                    ],
                    "changedFields": ["field0005"]
                }
            ]
        },
        "templateCode": "SOAP01",
        "draft": "0",
        "subject": "又试1下",
        "useNewDataStructure": true,
        "doTrigger": true
    }
}

返回数据:

{
  "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 标题

# 过时接口(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, 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
        }
    ]
}

{
"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 没有主表记录错误
创建人:yinyanting