Groovy代码示例
class ERPIntTestVariable implements IntegrationStreamSyncPlugin {
/**
* 同步前函数,支持数据过滤
*/
@Override
IntegrationStreamSync.BeforeSyncResult executeBeforeSync(FunctionContext context, IntegrationStreamSync.BeforeSyncArg arg) {
Integer sourceEventType = arg.getSourceEventType() //源系统触发事件-已废弃,请勿使用
String tenantId = arg.getSourceTenantId() // 企业id
String sourceObjectApiName = arg.getSourceObjectApiName() // 源系统对象apiName
String destObjectApiName = arg.getDestObjectApiName() // 目标系统对象apiName
ErpObjectData objectData = arg.getObjectData() // 来源系统主对象字段信息
Map<String, List<ErpObjectData>> details = arg.getDetails() // 来源系统从对象信息 key:从对象apiName value:从对象字段信息列表
String sourceDataId = arg.getSourceDataId() // 源系统数据id,只有crm->erp方向有这个字段
String name = objectData.getName() // 来源系统对象数据主属性
def value = objectData["属性"] // 获取对应属性值
// 返回null表示什么都不修改
// return null
def data = new IntegrationStreamSync.BeforeSyncData();
data.setIsExec(true) // 为false 数据过滤,不做同步
data.setIsCover(true) // 不给值或为false 不修改源数据
data.setObjectData(null) // 替换源数据,为null主从对象都不做替换 如果只需要替换从对象,可以设置 data.setObjectData(objectData)
data.setDetails(null) // 替换从对象信息,为null不做替换 key:从对象apiName value:从对象信息列表
def result = new IntegrationStreamSync.BeforeSyncResult()
result.setCode("0") // 返回结果状态 0为正常,其他都是失败
result.setMessage("success") // 返回的错误信息
result.setData(data)
return result
}
/**
* 同步中函数:写入目标系统之前
* 函数执行后,在函数中编写的映射值修改,企业id和对象apiName不会更改。
*/
@Override
IntegrationStreamSync.DuringSyncResult executeDuringSync(FunctionContext context, IntegrationStreamSync.DuringSyncArg arg) {
String tenantId = arg.getSourceTenantId() // 企业id
String sourceObjectApiName = arg.getSourceObjectApiName() // 源系统对象apiName
String destObjectApiName = arg.getDestObjectApiName() // 目标系统对象apiName
ErpObjectData objectData = arg.getObjectData() // 目标系统主对象字段信息
Map<String, List<ErpObjectData>> details = arg.getDetails()
// 目标系统从对象信息,只有新增动作这个字段才有值 key:从对象apiName value:从对象字段信息列表
Integer destEventType = arg.getDestEventType() // 目标系统执行动作 1、新增 2、修改 3、作废
// 返回null表示什么都不修改
// return null
String name = objectData.getName() // 目标系统对象数据主属性
def value = objectData.get("属性") // 获取对应属性值
ErpObjectData.ErpExtendData masterExtendData = objectData.getOrCretaErpExtendData(); //添加扩展值
masterExtendData.setRemoveFields(["field1","field2"]) //设置删除的字段名
masterExtendData.setAddData(["field3": "value3", "field4": "value4"]) //设置新增的数据
def data = new IntegrationStreamSync.DuringSyncData()
data.setObjectData(arg.getObjectData()) // 替换主对象字段信息,为null主从对象都不做替换 如果只需要替换从对象,可以设置 data.setObjectData(objectData)
data.setDetails(arg.getDetails()) // 替换从对象字段信息,为null不做替换 key:从对象apiName value:从对象字段信息列表
data.setDetailCover(true); // 为true时,以返回的details为准,覆盖从对象数据
def result = new IntegrationStreamSync.DuringSyncResult()
result.setCode("0") // 返回结果状态 0为正常,其他都是失败
result.setMessage("success") // 返回的错误信息
result.setData(data)
return result
}
/**
* 同步后函数,数据同步不会受到影响
*/
@Override
IntegrationStreamSync.AfterSyncResult executeAfterSync(FunctionContext context, IntegrationStreamSync.AfterSyncArg arg) {
Integer sourceEventType = arg.getSourceEventType() //源系统触发事件-已废弃,请勿使用
String tenantId = arg.getSourceTenantId() // 企业id
String sourceObjectApiName = arg.getSourceObjectApiName() // 源系统对象apiName
String destObjectApiName = arg.getDestObjectApiName() // 目标系统对象apiName
String sourceDataId = arg.getSourceDataId() // 源系统数据id,只有crm->erp方向有这个字段
ErpObjectData objectData = arg.getObjectData() // 目标系统主对象字段信息
Map<String, List<ErpObjectData>> details = arg.getDetails()
// 目标系统从对象信息,只有新增动作这个字段才有值 key:从对象apiName value:从对象字段信息列表
Integer destEventType = arg.getDestEventType() // 目标系统执行动作 1、新增 2、修改 3、作废
CompleteDataWriteMqData writeData = arg.getCompleteDataWriteResult() // 同步目标数据结果
int code = writeData.getErrCode() // 0为正常,其他为失败接口返回的错误码
String msg = writeData.getErrMsg() // 失败接口返回的错误信息
Integer destTenantType = writeData.getDestTenantType() // 目标系统 1.纷享CRM 2.ERP
CompleteDataWriteMqData.WriteResult writeResult = writeData.getWriteResult() // 同步主数据结果
int errCode = writeResult.getErrCode() //主数据结果,0为正常,其他为失败接口返回的错误码
String errMsg = writeResult.getErrMsg() // 主数据失败返回的错误信息
SimpleSyncData simpleSyncData = writeResult.getSimpleSyncData() // 同步数据简略信息
String destDataId = simpleSyncData.getDestDataId() // 目标系统数据id
String destDataName = simpleSyncData.getDestDataName() // 目标系统数据主属性
Map<String, ErpObjectData> destDetailSyncDataIdAndDestDataMap = writeResult.getDestDetailSyncDataIdAndDestDataMap()
// 目标对象明细
List<CompleteDataWriteMqData.WriteResult> results = writeData.getDetailWriteResults() // 同步明细数据结果
String name = objectData.getName() // 目标系统对象数据主属性
def value = objectData["属性"] // 获取对应属性值
def result = new IntegrationStreamSync.AfterSyncResult()
result.setCode("0") // 返回结果状态 0为正常,其他都是失败
result.setMessage("success") // 返回的错误信息
return result
}
//debug 时候的入口方法
Object debug(FunctionContext context, Map arg) {
return executeBeforeSync(context, json.parseObject("{}", IntegrationStreamSync.BeforeSyncArg))
}
}