Skip to content
在此页面上

灰度说明:

页面能否出现配置代码的选项是根据灰度控制,灰度为TRIGGER_CODE 目前共有4处支持配置代码的地方,分别是 触发器:条件判断、参数转换、执行代码 系统集成:鉴权配置

触发器条件判断配置代码

如何编写代码

在 shb-application 项目中,cn/publink/shb/application/facade/controller/trigger/outside 包下 创建一个 cn.publink.shb.application.service.common.service.ShbMatchRuleService 接口的实现类。 image.png 重写 match� 方法,根据自己业务需要进行编写代码,返回 true 表示条件满足,返回 false 表示条件不满足。 之后将整个类(包括头部的import导包)复制,粘贴到页面中 条件 编码设置的的代码框中。 最后在项目中将创建的类删除 image.png 配置最后的示例: image.png

入参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 接口的实现类。image.png 重写 convertData�� 方法,编写参数转换逻辑,返回的 JSONObject 为触发器to节点调用接口的参数 之后将整个类(包括头部的 import 导包)复制,粘贴到页面执行应用的代码框中。 最后在项目中将创建的类删除 image.png

入参fromData说明:

入参说明

触发器执行代码配置代码

如何编写代码

在shb-application项目中,cn/publink/shb/application/facade/controller/trigger/outside包下 创建一个 cn.publink.shb.application.service.common.service.ShbExecuteCodeService 接口的实现类image.png 重写 execute 方法,编写需要的逻辑。可以返回Null,也可以返回JSONObject,里面返回的内容自己定义。结果会传递到下面的节点中 之后将整个类(包括头部的import导包)复制,粘贴到页面 执行代码的代码框中。 最后在项目中将创建的类删除 image.pngimage.png

入参 fromObject 说明

入参说明

系统集成鉴权代码配置

如何编写代码

在shb-application项目中,cn/publink/shb/application/facade/controller/trigger/outside包下 创建一个 cn.publink.shb.application.service.apicenter.ShbCodeAuth 接口的实现image.png 重写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"]
	}
}

[]中填写的参数具体参考对应业务列表高级搜索的条件传参,各个业务模块以自身业务传参为准(具体怎么传,看高级搜索怎么传) 例如工单列表,某工单类型根据创建时间搜索的传参如下 image.png 在定时触发中,创建时间查询的传参为

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"
    ]
}

此配置等同于编写如下代码 image.png