# 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 这一块要删除吧