Appearance
灰度说明:
页面能否出现配置代码的选项是根据灰度控制,灰度为TRIGGER_CODE 目前共有4处支持配置代码的地方,分别是 触发器:条件判断、参数转换、执行代码 系统集成:鉴权配置
触发器条件判断配置代码
如何编写代码
在 shb-application 项目中,cn/publink/shb/application/facade/controller/trigger/outside 包下 创建一个 cn.publink.shb.application.service.common.service.ShbMatchRuleService 接口的实现类。 重写 match� 方法,根据自己业务需要进行编写代码,返回 true 表示条件满足,返回 false 表示条件不满足。 之后将整个类(包括头部的import导包)复制,粘贴到页面中 条件 编码设置的的代码框中。 最后在项目中将创建的类删除 配置最后的示例:
入参fromData说明:
入参中的 fromData 中含有当前节点之前的业务表单数据,例如某工单表单数据,某客户表单数据 key 的结构为表单 { typeId: fieldName }。例如某工单的类型 typeId=bdf4d1c4-8d1f-458e-b4fc-24835499329e,fromData 数据如下
json
{
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:templateId": "bdf4d1c4-8d1f-458e-b4fc-24835499329e",
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:state": [
"已指派"
],
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:synergies": [
{
"name": "树叶",
"id": "48838535-1af6-11ee-8999-00163f00409a",
"staffId": "021640082128847365"
}
],
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:startTime": null,
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:createTime": "2024-03-28 14:47:01",
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:completeTime": null,
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:templateName": "微风工单勿动",
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:createUser": [
{
"name": "树叶",
"id": "48838535-1af6-11ee-8999-00163f00409a",
"staffId": "021640082128847365"
}
],
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:linkman": {
"name": "zmjjkk",
"id": "9eb9536e-eb22-11ee-8999-00163f00409a"
},
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:closeTime": null,
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:executorUser": [
{
"name": "树叶",
"id": "48838535-1af6-11ee-8999-00163f00409a",
"staffId": "021640082128847365"
}
],
"bizId": "fad7705d-ecce-11ee-8999-00163f00409a",
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:allotUser": [
{
"name": "树叶",
"id": "48838535-1af6-11ee-8999-00163f00409a",
"staffId": "021640082128847365"
}
],
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:taskNo": "TAQ125024030520",
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:customer": {
"serialNumber": "zmjjkk",
"name": "zmjjkk",
"id": "9ea625a6-eb22-11ee-8999-00163f00409a"
},
"bdf4d1c4-8d1f-458e-b4fc-24835499329e:bizId": "fad7705d-ecce-11ee-8999-00163f00409a"
}
触发器参数转换配置代码:
如何编写代码
在 shb-application 项目中,cn/publink/shb/application/facade/controller/trigger/outside 包下 创建一个 cn.publink.shb.application.service.common.service.ShbConvertDataService 接口的实现类。 重写 convertData�� 方法,编写参数转换逻辑,返回的 JSONObject 为触发器to节点调用接口的参数 之后将整个类(包括头部的 import 导包)复制,粘贴到页面执行应用的代码框中。 最后在项目中将创建的类删除
入参fromData说明:
触发器执行代码配置代码
如何编写代码
在shb-application项目中,cn/publink/shb/application/facade/controller/trigger/outside包下 创建一个 cn.publink.shb.application.service.common.service.ShbExecuteCodeService 接口的实现类 重写 execute 方法,编写需要的逻辑。可以返回Null,也可以返回JSONObject,里面返回的内容自己定义。结果会传递到下面的节点中 之后将整个类(包括头部的import导包)复制,粘贴到页面 执行代码的代码框中。 最后在项目中将创建的类删除
入参 fromObject 说明
系统集成鉴权代码配置
如何编写代码
在shb-application项目中,cn/publink/shb/application/facade/controller/trigger/outside包下 创建一个 cn.publink.shb.application.service.apicenter.ShbCodeAuth 接口的实现 重写initiateAuth�方法,自定义鉴权的逻辑,最终返回的String需要是一个JSONObject的字符串 返回的数据可以看做调用鉴权接口拿到的鉴权数据,其中包括需要鉴权数据
之后将整个类(包括头部的import导包)复制,粘贴到页面 执行代码的代码框中。 最后在项目中将创建的类删除
示例: 现需要调用某三方业务接口,调用接口需要携带token。编写的自定义代码中,最终返回需要的token
java
public class Template implements ShbCodeAuth {
@Override
public String initiateAuth(Map map) {
//这里执行获取token的逻辑
Sting token = "xxxx";
JSONObject obj = new JSONObject();
obj.put("token", token);
return JSON.toJSONString(obj);
}
}
定时触发条件配置说明
结构说明
json
{
"CONTAINS": {
"contractNo": [],
"contractName": [],
"field_dgRqDl6ZSTFzQxNX": [],
"linkman": [],
"field_5dfKJ80w0x3sfpOj": [],
"field_RhVc9V8vXLzFVMHt": [],
"field_y7wSy61v4AIjwxsh": [],
"field_pxT5FkdGEKXY0NSP": []
},
"EQ": {
"customer": [],
"field_ixjr07jdArg9pbmO": [],
"otherAmount": [],
"discountAmount": [],
"contractAmount": [],
"tags": [],
"managerPerson": [],
"field_jZpVtSKVXP3vzkxk": [],
"field_zwDN8SIvgipBXWx1": [],
"createUser": []
},
"BETWEEN": {
"effectiveTime": [],
"invalidTime": [],
"field_dP5qzoMlIZGAbiYG": [],
"createTime": [],
"updateTime": []
}
}
上述结构中,第一层级的key "CONTAINS","EQ","BETWEEN"表示 包含,等于,介于。
以BETWEEN举例说明: BETWEEN中的effectiveTime,invalidTime,field_dP5qzoMlIZGAbiYG,createTime,updateTime五个字段表明这个五个字段支持介于搜索。 假如目前需要搜索创建时间是24年1月1日到24年3月31日的数据,可以在createTime后填写搜索条件,然后将其他不需要的配置删除。最终结果如下
json
{
"BETWEEN": {
"createTime": ["2024-01-01 00:00:00", "2024-03-31 23:59:59"]
}
}
再比如需要的搜索条件为 1.创建时间是24年1月1日到24年3月31日 2.创建人为xxxx的
json
{
"EQ": {
"createUser": ["xxxx的userId"]
},
"BETWEEN": {
"createTime": ["2024-01-01 00:00:00", "2024-03-31 23:59:59"]
}
}
[]中填写的参数具体参考对应业务列表高级搜索的条件传参,各个业务模块以自身业务传参为准(具体怎么传,看高级搜索怎么传) 例如工单列表,某工单类型根据创建时间搜索的传参如下 在定时触发中,创建时间查询的传参为
json
{
"BETWEEN": {
"createTime": [1711900800000, 1712246399000]
}
}
复杂情况参数怎么办
实际使用中,会出现动态参数的情况。例如每次查询,希望查询当天往前推30天的数据。碰到这种情况,查询时开始时间和结束时间都不能固定,需要根据当天的日期来获取。 碰到这种情况,可以使用一个结构化的配置来解决(详情参考文档:[说明文档](https://publink.yuque.com/staff-ubm6dv/sufqv3/dswn17u4lx18lz21?singleDoc# 《触发器二期加密配置说明》)) 以当天往前推30天举例,可以使用如下配置
json
{
"BETWEEN": {
"createTime": [
"valueService:encryption:{\"class\":\"org.joda.time.base.AbstractDateTime\",\"method\":\"toString(java.lang.String)\",\"param\":[{\"class\":\"org.joda.time.DateTime\",\"method\":\"withTime(int, int, int, int)\",\"param\":[{\"class\":\"org.joda.time.DateTime\",\"method\":\"plusDays(int)\",\"param\":[{\"class\":\"org.joda.time.DateTime\",\"method\":\"now()\",\"param\":[\"{null}\"]},-30]},0,0,0,0]},\"yyyy-MM-dd HH:mm:ss\"]}",
"valueService:encryption:{\"class\":\"org.joda.time.base.AbstractDateTime\",\"method\":\"toString(java.lang.String)\",\"param\":[{\"class\":\"org.joda.time.DateTime\",\"method\":\"withTime(int, int, int, int)\",\"param\":[{\"class\":\"org.joda.time.DateTime\",\"method\":\"plusDays(int)\",\"param\":[{\"class\":\"org.joda.time.DateTime\",\"method\":\"now()\",\"param\":[\"{null}\"]},-30]},23,59,59,999]},\"yyyy-MM-dd HH:mm:ss\"]}"
]
}
}
json
"valueService:encryption:{\"class\":\"org.joda.time.base.AbstractDateTime\",\"method\":\"toString(java.lang.String)\",\"param\":[{\"class\":\"org.joda.time.DateTime\",\"method\":\"withTime(int, int, int, int)\",\"param\":[{\"class\":\"org.joda.time.DateTime\",\"method\":\"plusDays(int)\",\"param\":[{\"class\":\"org.joda.time.DateTime\",\"method\":\"now()\",\"param\":[\"{null}\"]},-30]},0,0,0,0]},\"yyyy-MM-dd HH:mm:ss\"]}"
结构说明 1."valueService:encryption:" 固定写法,必须以此开头 2.json配置说明
json
{
"class": "org.joda.time.base.AbstractDateTime",
"method": "toString(java.lang.String)",
"param": [
{
"class": "org.joda.time.DateTime",
"method": "withTime(int, int, int, int)",
"param": [
{
"class": "org.joda.time.DateTime",
"method": "plusDays(int)",
"param": [
{
"class": "org.joda.time.DateTime",
"method": "now()",
"param": [
"{null}"
]
},
-30
]
},
0,
0,
0,
0
]
},
"yyyy-MM-dd HH:mm:ss"
]
}
此配置等同于编写如下代码