Groovy Code Example
class ERPIntTestVariable implements IntegrationStreamSyncPlugin {
/**
* Pre-sync function supporting data filtering
*/
@Override
IntegrationStreamSync.BeforeSyncResult executeBeforeSync(FunctionContext context, IntegrationStreamSync.BeforeSyncArg arg) {
Integer sourceEventType = arg.getSourceEventType() // Source system trigger event - deprecated, do not use
String tenantId = arg.getSourceTenantId() // Enterprise ID
String sourceObjectApiName = arg.getSourceObjectApiName() // Source system object apiName
String destObjectApiName = arg.getDestObjectApiName() // Target system object apiName
ErpObjectData objectData = arg.getObjectData() // Source system main object field information
Map<String, List<ErpObjectData>> details = arg.getDetails() // Source system sub-object information key: sub-object apiName value: sub-object field information list
String sourceDataId = arg.getSourceDataId() // Source system data ID, only available for crm->erp direction
String name = objectData.getName() // Source system object data primary attribute
def value = objectData["property"] // Get corresponding property value
// Return null means no modification
// return null
def data = new IntegrationStreamSync.BeforeSyncData();
data.setIsExec(true) // When false, data will be filtered and not synchronized
data.setIsCover(true) // When not set or false, source data won't be modified
data.setObjectData(null) // Replace source data, null means no replacement for main/sub objects. To only replace sub-objects, set data.setObjectData(objectData)
data.setDetails(null) // Replace sub-object information, null means no replacement key: sub-object apiName value: sub-object information list
def result = new IntegrationStreamSync.BeforeSyncResult()
result.setCode("0") // Return status code (0 means success, others mean failure)
result.setMessage("success") // Error message
result.setData(data)
return result
}
/**
* Mid-sync function: before writing to target system
* After execution, only mapped values modified in the function will change; enterprise ID and object apiName remain unchanged.
*/
@Override
IntegrationStreamSync.DuringSyncResult executeDuringSync(FunctionContext context, IntegrationStreamSync.DuringSyncArg arg) {
String tenantId = arg.getSourceTenantId() // Enterprise ID
String sourceObjectApiName = arg.getSourceObjectApiName() // Source system object apiName
String destObjectApiName = arg.getDestObjectApiName() // Target system object apiName
ErpObjectData objectData = arg.getObjectData() // Target system main object field information
Map<String, List<ErpObjectData>> details = arg.getDetails()
// Target system sub-object information, only available for create action key: sub-object apiName value: sub-object field information list
Integer destEventType = arg.getDestEventType() // Target system action 1: create 2: update 3: invalidate
// Return null means no modification
// return null
String name = objectData.getName() // Target system object data primary attribute
def value = objectData.get("property") // Get corresponding property value
ErpObjectData.ErpExtendData masterExtendData = objectData.getOrCretaErpExtendData(); // Add extended values
masterExtendData.setRemoveFields(["field1","field2"]) // Set fields to be removed
masterExtendData.setAddData(["field3": "value3", "field4": "value4"]) // Set new data to be added
def data = new IntegrationStreamSync.DuringSyncData()
data.setObjectData(arg.getObjectData()) // Replace main object field information, null means no replacement for main/sub objects. To only replace sub-objects, set data.setObjectData(objectData)
data.setDetails(arg.getDetails()) // Replace sub-object field information, null means no replacement key: sub-object apiName value: sub-object field information list
data.setDetailCover(true); // When true, returned details will override sub-object data
def result = new IntegrationStreamSync.DuringSyncResult()
result.setCode("0") // Return status code (0 means success, others mean failure)
result.setMessage("success") // Error message
result.setData(data)
return result
}
/**
* Post-sync function, data synchronization won't be affected
*/
@Override
IntegrationStreamSync.AfterSyncResult executeAfterSync(FunctionContext context, IntegrationStreamSync.AfterSyncArg arg) {
Integer sourceEventType = arg.getSourceEventType() // Source system trigger event - deprecated, do not use
String tenantId = arg.getSourceTenantId() // Enterprise ID
String sourceObjectApiName = arg.getSourceObjectApiName() // Source system object apiName
String destObjectApiName = arg.getDestObjectApiName() // Target system object apiName
String sourceDataId = arg.getSourceDataId() // Source system data ID, only available for crm->erp direction
ErpObjectData objectData = arg.getObjectData() // Target system main object field information
Map<String, List<ErpObjectData>> details = arg.getDetails()
// Target system sub-object information, only available for create action key: sub-object apiName value: sub-object field information list
Integer destEventType = arg.getDestEventType() // Target system action 1: create 2: update 3: invalidate
CompleteDataWriteMqData writeData = arg.getCompleteDataWriteResult() // Target data synchronization result
int code = writeData.getErrCode() // 0 means success, others are error codes returned by failed APIs
String msg = writeData.getErrMsg() // Error message returned by failed APIs
Integer destTenantType = writeData.getDestTenantType() // Target system 1: Fxiaoke CRM 2: ERP
CompleteDataWriteMqData.WriteResult writeResult = writeData.getWriteResult() // Main data synchronization result
int errCode = writeResult.getErrCode() // Main data result (0 means success, others are error codes returned by failed APIs)
String errMsg = writeResult.getErrMsg() // Error message returned by failed main data operations
SimpleSyncData simpleSyncData = writeResult.getSimpleSyncData() // Brief synchronization data information
String destDataId = simpleSyncData.getDestDataId() // Target system data ID
String destDataName = simpleSyncData.getDestDataName() // Target system data primary attribute
Map<String, ErpObjectData> destDetailSyncDataIdAndDestDataMap = writeResult.getDestDetailSyncDataIdAndDestDataMap()
// Target object details
List<CompleteDataWriteMqData.WriteResult> results = writeData.getDetailWriteResults() // Detail data synchronization results
String name = objectData.getName() // Target system object data primary attribute
def value = objectData["property"] // Get corresponding property value
def result = new IntegrationStreamSync.AfterSyncResult()
result.setCode("0") // Return status code (0 means success, others mean failure)
result.setMessage("success") // Error message
return result
}
// Debug entry method
Object debug(FunctionContext context, Map arg) {
return executeBeforeSync(context, json.parseObject("{}", IntegrationStreamSync.BeforeSyncArg))
}
}