启动方案支持事件处理(回调通知)

新特性:启动方案支持事件处理
说明:启动方案,任务编排页签新增事件处理功能


启动方案可以配置单据同步成功时、单据同步失败时、集成任务成功时、集成任务失败时等事件处理。
单据同步成功时,参数提供:源单ID(可能为空),源单候选键值,目标单ID(可能为空),目标单候选键值,目标单操作,集成任务ID,启动方案ID,启动方案编码
单据同步失败时,参数提供:源单ID(可能为空),源单候选键值,目标单ID(可能为空),目标单候选键值(可能为空),集成任务ID,启动方案ID,启动方案编码
集成任务成功时,参数提供:集成任务ID,启动方案ID,启动方案编码,总行数,成功行数,失败行数,忽略行数
集成任务失败时(在重试次数用完后触发),参数提供:集成任务ID,启动方案ID,启动方案编码,总行数,成功行数,失败行数,忽略行数
KEY | 类型 | 说明 |
event | String | 单据集成成功时 OnRowSuccess 单据集成失败时 OnRowFailed 集成任务成功时 OnTaskSuccess 集成任务失败时 OnTaskFailed |
error | String | 错误信息 |
action | String | 目标单操作 /** * 保存,连接器端应尽可能区分是INSERT还是UPDATE,实在无法区分时才使用SAVE */ SAVE, /** * 新增 */ INSERT, /** * 修改 */ UPDATE, /** * 删除,一个单据或一行数据被删除后,接下来不能做其他任何操作。 */ DELETE, /** * 什么也没做,此单据行为被忽略,接下来也不应做其他操作。 */ NOP, /** * 输出失败 */ FAILED, /** * 未知,在某些情况下不能确定目标系统的实际行为时,使用此选项。 */ UNKNOWN |
source_id | String | 源单id |
source_selector | Map | 源单候选键 |
target_id | String | 目标单id |
target_selector | Map | 目标单候选键 |
trigger_id | String | 启动方案id |
trigger_number | String | 启动方案编码 |
task_id | String | 集成任务id |
total_count | int | 总行数 |
success_count | int | 成功行数 |
failed_count | int | 失败行数 |
ignored_count | int | 忽略行数 |
| src_data | Map | 源单数据(不包括分录字段) |
| tar_data | Map | 目标单数据(不包括分录字段) |
1. EAS事件处理
事件处理方所对应系统为eas的配置说明:
配置的事件处理器为业务所编写的eas后台事务类(可参考样例类kd.isc.connector.eas.e.HandlerDemo),实现eas后台事务接口类com.kingdee.bos.service.job.core.IJobHandler,在execute方法中编写业务逻辑,通过job.getParameters()获取集成云回调的参数值。Demo类详见下文“HandlerDemo.java”,代码片段如下图所示:

如需要根据回调数据中的某些参数值创建上下文,可以通过调用核心引擎工具类进行创建 com.kingdee.bos.service.job.util.Ctx
调用示例:

Map<String, Object> tarData = (Map<String, Object>)data.get("tar_data");//获取目标单数据 String userId = (String)tarData.get("creator");//从目标单数据中取出创建人id值
Context newCtx = com.kingdee.bos.service.job.util.Ctx.newShadowContext(job.getContext().getAIS(),userId);
//根据创建人id构造上下文
代码HandlerDemo.java
package kd.isc.connector.eas.e;
import java.util.Map;
import com.kingdee.bos.service.job.core.IJobHandler;
import com.kingdee.bos.service.job.core.Job;
/**
* 处理集成事件后台事务样例
* @author rd_huazhong_yang
*
*/
public class HandlerDemo implements IJobHandler{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public Object execute(Job job) throws Exception {
@SuppressWarnings("unchecked")
Map<String,Object>data = (Map<String,Object>)job.getParameters();//获取回调参数map;
/*参数map中包含key:
* // 事件
event
// 错误信息
error
// 目标单操作
action
// 源单关键信息
source_id
source_selector
// 目标单关键信息
target_id
target_selector
// 启动方案
trigger_id
trigger_number
// 集成任务信息
task_id
// 任务统计计数
total_count
success_count
failed_count
ignored_count
单据同步成功时,提供:源单ID(可能为空),源单候选键值,目标单ID(可能为空),目标单候选键值,目标单操作,集成任务ID,启动方案ID,启动方案编码
单据同步失败时,提供:源单ID(可能为空),源单候选键值,目标单ID(可能为空),目标单候选键值(可能为空),集成任务ID,启动方案ID,启动方案编码
集成任务成功时,提供:集成任务ID,启动方案ID,启动方案编码,总行数,成功行数,失败行数,忽略行数
集成任务失败时(在重试次数用完后触发),提供:集成任务ID,启动方案ID,启动方案编码,总行数,成功行数,失败行数,忽略行数
*/
System.out.println(data);
return null;
}
}
EAS端apusic日志测试样例:
启动方案分别配置事件处理 - kd.isc.connector.eas.e.HandlerDemo,事件处理方 - 源系统
1.单据集成成功时 OnRowSuccess
(EAS日志:{event=OnRowSuccess, action=UPDATE, source_id=MegAAAAR8cretY/c, source_selector={number=AM121701}, target_id=7217352157011820009, target_selector={number=AM121701}, trigger_id=696133736244306944, trigger_number=KD_CurrencyAddUpdate(EAS-IERP), task_id=844100011242719232})
2.单据集成失败时 OnRowFailed
(EAS日志:{event=OnRowFailed, action=FAILED, source_id=IikQ/aTNRTCKYd/Vdtkn/t61j9w=, source_selector={number=EIP90}, trigger_id=696133736244306944, trigger_number=KD_CurrencyAddUpdate(EAS-IERP), task_id=844102878888365056, error={#message=保存 EIP90: “名称”已存在,请修改, #stack_trace=保存 EIP90: “名称”已存在,请修改)
3.集成任务成功时 OnTaskSuccess
(EAS日志:{event=OnTaskSuccess, trigger_id=844066524682947584, trigger_number=KD_Currency(EAS-IERP)_3, task_id=844066706128538624, total_count=298, success_count=189, failed_count=109, ignored_count=0})
4.集成任务失败时 OnTaskFailed
(EAS日志:{event=OnTaskFailed, trigger_id=824567361246865408, trigger_number=BC122A7F(EAS-EAS), task_id=843925356791678976, total_count=1, success_count=0, failed_count=1, ignored_count=0, error={#message=赋值字段[id]时异常:
kd.isc.connector.eas.meta.AssignValueException: 赋值字段[id]时异常:)
2. 苍穹及连接器
目前苍穹及连接器端的事件处理,可以通过发送MQ或者调用微服务的方式,将数据发送到相应苍穹系统进行处理。具体如下:
方式一: 发送MQ消息
通过MQ将执行结果等信息发送到指定的应用和队列,业务方根据需要进行消费。具体配置如下:
(1) 配置事件处理类
在启动方案的【任务编排】-【事件处理】根据不同的事件配置相应的
启动方案支持事件处理(回调通知)
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



