## **發起表單(Html正文)流程**
[文檔鏈接](http://open.seeyon.com/book/ctp/restjie-kou/biao-dan-liu-cheng-ji-cheng.html).
可發起指定模板的Html正文流程或表單流程。
### **推薦使用接口(Since:V80sp1)**
**接口請求說明:**
```
http請求方式:POST
http://ip:port/seeyon/rest/bpm/process/start
```
**示例:**
```java
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
}
}
```
**返回數據:**
``` java
{
"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中已經封裝好的,如果要單獨獲取可如下方式:
```java
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的登錄名,如下:
```java
String senderLoginName ="lsm";
```
templateCode模板編號:對應創建模板時填寫的模板編號(即ctp_template表TEMPLETE_NUMBER字段)
```java
String templateCode ="100";
```
subject協同的標題:發出表單模板對應的標題,如下:
```java
String subject ="申請流程標題";
```
data表單數據:表單數據信息,REST接口提供了獲取已經發送的表單流程XML新方法,請參考[取得流程正文數據](#取得流程正文數據)
注意在獲取表單數據XML 需要轉換成String
提供已發表單轉String示例:
```java
private CTPRestClient client = null;
...
String data = client.get("flow/data/-6074085048046957774", String.class);//-6074085048046957774為已發流程ID
```
**V6.1表單流程正文數據支持JSON格式,示例如下:**
```java
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;
```java
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為控制流程發送.
```java
String param="0";
```
表單流程通過REST POST創建示例:
```java
private CTPRestClient client = null;
MAP info =new HashMap();//存放上述參數
String checkUrl ="flow/"+模板ID;
...
client.post(url, info, String.class);
```
發起HTML正文流程示例1:
```java
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:
```java
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 | 沒有主表記錄錯誤 |
- 概要
- 技術介紹
- 框架與環境
- vue開發
- 開發規范
- 前端開發規范
- 總體原則
- HTML規范
- HTML&css規范
- vue編碼規范
- Javascript規范
- 后端開發規范
- cap4
- 自定義控件
- 前端2.0(PC+移動)
- PC前端
- 后端
- 移動端
- 移動端接口
- 低版本協同升級到V5 8.0適配說明
- 自定義按鈕
- 自定義按鈕(無流程)
- 自定義控件(列表插槽)
- 自定義按鈕(篩選條件)
- 低版本協同升級到V5 8.0適配說明
- 門戶空間
- 門戶與欄目掛載
- 欄目開發及流程說明
- 頁面模板
- 客開通路及插件體系
- 表單設計器擴展配置
- 使用步驟
- 配置說明
- 事件API
- Demo示例
- 運行態客開通路
- 插件使用步驟
- 插件接口
- 事件接口
- 鉤子相關接口
- 表單操作接口
- Demo示例
- 插件機制
- 表單運行態接口(舊)
- 白名單插件
- 版本記錄
- vue組件庫
- 開發指南
- 開發文檔規范
- 業務組件介紹
- 業務組件
- table組件
- 分頁組件
- title組件
- 統計排隊組件
- code組件
- 條件篩選
- 批量導入
- 上傳Excel
- 批量更新
- 批量刷新
- UI組件
- 按鈕組件
- 復選組件
- 取色器組件
- 示例組件
- 水平選擇組件
- 選圖標組件
- 提示組件
- 單選組件
- 搜索組件
- 選擇組件
- 穿梭框組件
- 標簽組件
- 文本組件
- 樹組件
- 驗證組件
- 菜單組件
- iframe組件
- toolbar
- 統計組件
- 餅圖
- 柱狀圖
- 圖標
- 業務關系開發指南
- 自定義觸發
- 自定義關聯
- 后端API
- 更新表單數據緩存
- 發起表單流程
- 取得指定表單PDF或截圖
- 無流程批量添加
- 無流程批量刪除
- 無流程批量更新
- 無流程批量導出
- 客開培訓文檔
- Vue基礎培訓
- Vue實戰培訓
- Vue進階培訓
- VueCLI3培訓
- cap3
- 自定義控件
- 后端
- 移動端
- 前端編譯
- 表單運行態接口
- 協同云