取消业务流重新发起

/**
 * @author 王亚新
 * @codeName 【深瑞&ERP销售合同&逾期】取消业务流重新发起
 * @description 取消错误的业务流,重新发起
 * @createTime 2025-09-12
 * @函数需求编号
 */
//符合条件的数据id
List ids = context.objectIds as List
log.info("context:" + context.data)
//需要查询的字段  
/*****************************************
* id                 |      任务id
* name               |     任务主题
* taskName           |     任务名称
* workflowInstanceId |  业务流程实例ID
* objectApiName      | 所属业务对象APIName
* objectDataId       | 所属业务记录,数据ID
* sourceWorkflowId   |  流程srcId,流程ID
* state              |     任务状态
*******************************************/
List needFields = ["_id", "name", "taskName", "objectApiName", "objectDataId", "sourceWorkflowId","workflowInstanceId","state"] as List
def (boolean error, List dataList, String errorMessage) = Fx.object.findByIds("BpmTask", ids, FQLAttribute.builder().columns(needFields).build())
dataList.each { item ->
    Map map = item as Map
    String taskState = map["state"] as String
    log.info("taskState: " + taskState)
    String bpmId = map["workflowInstanceId"] as String
    def ret = Fx.bpm.cancel(bpmId, "错误流程,重新发起。")
    log.info("取消流程ret:" + ret)
    String srcId = map["sourceWorkflowId"] as String
    String dataId = map["objectDataId"] as String
    String entityId = map["objectApiName"] as String
    def result = Fx.bpm.startInstance( srcId, dataId,entityId)
    log.info("重新发起流程result:" + result)
}

调用对象按钮

String str_id = ""; //数据id
 Map param = [
    "objectApiName": "object_o0ie1__c",//对象apiname
    "buttonApiName": "button_ELHfV__c"//按钮APIName
]
Map header = [:]
Map data = [
    "objectDataId": str_id, //数据id
    "args": [:]  //按钮入参 格式:Map ,Map中key格式:form_ + 字段apiName
]
def ret = Fx.proxy.callAPI("obj.button.call", param, header, data)
Fx.log.info(ret)

触发集成流更新

//符合条件的数据id
List ids = context.objectIds as List
def (boolean error, List dataList, String errorMessage) = Fx.object.findByIds("SaleContractObj", ids, FQLAttribute.builder().columns(["_id", "name","field_1m2Bv__c"]).build())
dataList.each { item ->
    Map map = item as Map
    //处理业务逻辑
    String erpid = map["field_1m2Bv__c"] as String//ERPID
    
    //触发ERP->CRM的集成流同步 
    //必填,CRM对象apiName 
    def crmObjApiName = "SaleContractObj";
    String type = "";//
    
    //必填,CRM数据Id 
    def crmDataId = map["_id"] as String;// 
    
    //必填,ERP中间对象apiName 
    //深瑞 CRM_Contract.BillHead   能源 CRM_Contract.BillHead_2    电力 CRM_Contract.BillHead_3
    def erpObjApiName = "" 
    erpObjApiName = "CRM_Contract.BillHead_3"
 
    //根据ERP的ID触发数据同步到CRM 
    Map header=[:] 
    Map params=[:] 
    params.put("erpObjectApiName",crmObjApiName);     //目标对象apiName,参数名称有点奇怪,因为一开始只支持crm->erp的 
    params.put("crmDataId",erpid);                    //源数据Id,参数名称有点奇怪,因为一开始只支持crm->erp的 
    params.put("crmObjectApiName",erpObjApiName);     //源对象apiName,参数名称有点奇怪,因为一开始只支持crm->erp的 
    Map commonParam=["type":"manualSyncCrm2Erp","params":Fx.json.toJson(params)]; 
    def result1=Fx.proxy.callAPI("erp.syncData.executeCustomFunction",header,commonParam); 
    log.info("集成触发结果:"+result1)
        
    def (Boolean error1, Map data1, String errorMessage1) =  Fx.object.update("SaleContractObj", crmDataId, ["is_sync_success_fee__c":"1"], UpdateAttribute.builder().triggerWorkflow(true).build())
    if (error1) {
      log.info("error:" + errorMessage1 )
    }
    log.info(data1)
}