# 7.模型生命周期
# 邏輯事件
| 事件 | 描述 |
|---|---|
| beforeCreate | 單據創建時,卡片數據組裝之前 |
| afterCreated | 單據創建時,卡片數據組裝之后 |
| beforeCalculate | 單據字段觸發計算時,數據計算之前 |
| afterCalculated | 單據字段觸發計算時,數據計算之后 |
| beforeUpdate | 單據執行保存操作時,卡片數據組裝之前 |
| afterUpdate | 單據執行保存操作時,卡片數據組裝之后 |
| afterUpdated | 單據數據全部保存完成,索引更新完成之后 |
| stateChanged | 單據狀態發生改變的時候,從一個狀態到另一個狀態之時 |
| afterUpdateCommit | 單據數據保存提交之后 |
# 處理程序
# NkDocAssertCycleInterceptor 通用的數據校驗程序
{
"提示信息1": "${表達式,返回boolean}",
"提示信息2": "${表達式,返回boolean}",
"提示信息3": "${表達式,返回boolean}"
}
2
3
4
5
# NkDocByCondiUpdateDocInterceptor 更新當前單據
提示
_condition:處理程序執行條件,可使用表達式 formCard:描述哪個卡片觸發的計算,(如果事件是帶計算的,并且calculate為TRUE,一定要指定formCard,不然后造成循環調用) _calculate:值為TRUE 或者false,表示是否觸發計算 updates:更新的卡片數據,value值是表達式
在參數列中填入json參數
{
"_condition": "${返回真或假,表示是否執行更新邏輯}",
"formCard":"NkDynamicForm",
"_calculate":"true",
"updates": {
"docState": "'VOFF'",
"data.custom.name":"'張三'",
"data.custom.age":"18",
"data.custom.address":"${data.idcard.address}"
}
}
2
3
4
5
6
7
8
9
10
11
# NkDocDingTalkMessageInterceptor 釘釘機器人消息發送
提示
_condition:處理程序執行條件,可使用表達式,默認為true url:發送消息的url地址 data:發送數據集合
在參數列中填入json參數
{
"_condition": "${docState=='S004'}",
"url": "https://oapi.dingtalk.com/robot/send?access_token=24c9f168a382104bd0f36e0808cc9e9fa698934202e5ac2e4590299c831cee25",
"data": {
"msgtype": "markdown",
"markdown": {
"title": "#{data?.quest?.person?.docName}有BUG待處理",
"text": "@#{data?.quest?.personMobile}你有新的BUG待處理\n\n任務:**#{data?.message?.desc}**\n\n測試人員:#{data?.test?.tester?.docName}\n\n[點擊查看詳情](http://pm.nkpro.cn/#/apps/docs/detail/#{docId})"
},
"at": {
"atMobiles": ["${data?.quest?.personMobile}"],
"isAtAll": false
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# NkDocShortMessageNotificationInterceptor 短信通知
提示
_condition:處理程序執行條件,可使用表達式,默認為true phone:接收方號碼,可傳多個接收方手機號 templateCode:簽名通道號,簽名通道號&模板Id(華為云) templateParams:模板參數,表達式模式
在參數列中填入json參數
{
"_condition": "${docState == 'NEW'}",
"phone": [],
"templateCode": "簽名通道號&模板Id", //簽名通道號和模板Id用&分割(華為云)
"templateParams": {
"1": "${@doc.detail(data.partner?.customer?.docId).data.base.comName}", //承租人名稱
"2": "${@doc.detail(preDocId)?.docNumber}"
}
}
2
3
4
5
6
7
8
9
# NkDocStateChangedCreateDocInterceptor 創建單據
單據存在則修改,不存在就創建
提示
_condition:處理程序執行條件,默認true _update:觸發修改條件,默認true _businessKey:目標單據業務主鍵 _validateSpEL:驗證表達式 _validateMessage:驗證提示 _refSpEL:映射到單據引用字段的路徑,要將本單據映射到目標單據的某個字段上 _optSource:操作描述 _calculate:創建或修改數據時候是否需要計算 _postConditionSpEL:后置條件表達式,若為空則為true docType:需要創建的單據類型 docState:需要創建的單據狀態 docName:目標單據名稱 preDocId:目標單據的前序單據ID 可配 data:目標的單據的默認卡片數據
在參數列中填入json參數
{
"_condition": "${docState == 'ACTI'}",
"_update": true,
"_businessKey": "${docId}",
"_validateSpEL": true,
"_validateMessage": "",
"_refSpEL": "data.overdue.urgeQuest",
"_calculate": true,
"_optSource": "",
"preDocId": "${docId}",
"docType": "RBM1",
"docState": "NEW",
"data": {
"overdue": "${data?.overdue}"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# NkDocStateChangedUpdateDocInterceptor 修改其他單據
單據存在則修改,不存在則不處理
提示
_condition:處理程序執行條件,默認true _update:觸發修改條件,默認true _businessKey:目標單據業務主鍵 _validateSpEL:驗證表達式 _validateMessage:驗證提示 _refSpEL:映射到單據引用字段的路徑,要將本單據映射到目標單據的某個字段上 _optSource:操作描述 _calculate:創建或修改數據時候是否需要計算 _postConditionSpEL:后置條件表達式,若為空則為true docType:需要創建的單據類型 docState:需要創建的單據狀態 docName:目標單據名稱 preDocId:目標單據的前序單據ID 可配 data:目標的單據的默認卡片數據
在參數列中填入json參數
{
"_condition": "${docState == 'ACTI'}",
"_update": true,
"_businessKey": "${docId}",
"_validateSpEL": true,
"_validateMessage": "",
"_refSpEL": "data.overdue.urgeQuest",
"_calculate": true,
"_optSource": "",
"preDocId": "${docId}",
"docType": "RBM1",
"docState": "NEW",
"data": {
"overdue": "${data?.overdue}"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# NkDocStateChangedLoopCreateDocInterceptor 創建單據[批量]
提示
該處理程序可以將某個表格數據批量生成單據
_loop:需要循環處理的數據
其他跟NkDocStateChangedCreateDocInterceptor 創建單據一致
在參數列中填入json參數
{
"_loop":"${data?.certificate}",
"_condition": "${docState == 'ACTI'}",
"_update": true,
"_businessKey": "${docId}",
"_validateSpEL": true,
"_validateMessage": "",
"_refSpEL": "data.overdue.urgeQuest",
"_calculate": true,
"_optSource": "",
"preDocId": "${docId}",
"docType": "RBM1",
"docState": "NEW",
"data": {
"overdue": "${data?.overdue}"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# NkDocBalanceProcessInterceptor 創建或更新結余明細記錄
提示
在金額變動單據配置該生命周期程序,注意targetDocId必須要存在
在結余明細展示單據配置NkCardFinBalance | 結余 卡片
{
"condition":"${}", //激活條件
"targetDocId": "${}",//結余目標單據ID 使用示例:${@doc.getTargetDocId('單據類型')}
"targetCardKey": "${}",//結余目標單據的結余卡片KEY
"amount": "${}", //明細金額
"remark":"${}",//描述說明,非必填
"state": 2 //狀態,可選默認為2
}
2
3
4
5
6
7
8
提示
事件配合處理程序使用,可滿足個性化設計需求
目前系統中有通用的處理程序,也可根據需要自定義處理程序
參數一項可以向處理程序傳參
TODO 這一塊要刪除吧