scmarine 发表于 2024-5-31 11:18:50

流程流转过程中,不能使用脚本进行请求后台API更新数据?


O2版本:V9.0.2,OS:WIN 2019
在流程图设计中,不能调用脚本,进行对其他流程的数据进行更新?
当前流程1,创建一个脚本:
x_processplatform_assemble_surface -》 updateWithJob


       data = {"参数1":"value1","参数2":"value2"};var action = this.Actions.load("x_processplatform_assemble_surface");       action.DataAction.updateWithJob(//平台封装好的方法      job,//uri的参数      data,//body请求参数      function( json ){ //服务调用成功的回调函数, json为服务传回的数据         data = json.data; //为变量data赋值      }.bind(this),   function( json ){ //服务调用失败的回调函数, json为服务传回的数据      data = json.data; //为变量data赋值   }.bind(this)    );


通过这个脚本,在执行流程时,更新流程2的状态数据;

1、执行到“同步更新状态”,造成应用卡死:为什么?

2、不能实现,在流程1 流程的时候,更新其他流程的数据?
根据流程1的执行情况 -》 更新流程2的状态,如何实现?



论坛管理员 发表于 2024-6-3 09:51:51

您的方案肯定是可行的,通过脚本活动去更新没问题,您脚本活动里写的脚本发出来看看,卡死时后台肯定是有报错的,错误日志截图看看

scmarine 发表于 2024-6-3 11:26:22


执行流程如下:

其中:执行更新的脚本:




scmarine 发表于 2024-6-3 11:26:38

this.define("updateSubjectFinalStatusByFlow",function(){

    // 获取当前工作的状态,运行中为work,流程结束:workCompletedList
    const lastTask = this.workContext.getTaskCompletedList().slice(-1)
    // console.log("【归档】最后一条已办,结束前的执行: ======> " ,JSON.stringify(lastTask))

    let subject_final_status = "STARTING"
    if(lastTask && lastTask.currentActivityName == "同步更新状态"){
      if(lastTask.routeName ==="同意"){
            subject_final_status = "COMPLETED"
      }else if(lastTask.routeName.contains("拒绝")){
            subject_final_status = "REJECTED"
      }
    }

    // 更新归档流程中的状态
    this.data.subject_final_status = subject_final_status


    // 2、同步更新【立项数据】记录
    const finalJobId = this.workContext.getWork().job
    const recordJobId = this.data.record_job_id

    let recordBody = {
      subject_final_status:subject_final_status,
      final_job_id: finalJobId
    };
    surfaceAction.DataAction.updateWithJob(//平台封装好的方法
      recordJobId,//uri的参数
      recordBody,//body请求参数
      function( json ){ //服务调用成功的回调函数, json为服务传回的数据
            console.log("更新 recordJobId ==> ",recordJobId,JSON.stringify(json.data))
      }.bind(this),
      function( json ){ //服务调用失败的回调函数, json为服务传回的数据
            console.error(JSON.stringify(json.data))
      }.bind(this)
    );

    console.log("更新计划项目归档状态完毕 =========== ",subject_final_status)
})

scmarine 发表于 2024-6-3 11:27:09

后台日志检查以及控制台的输出,未显示任何错误
问题出现于:
调用process,根据job更新业务数据:
根据当前流程2中存储的 recordJobId是流程1的job,然后根据这个job,执行更新流程1的业务数据时,出现页面一直loading,无法结束的问题

如果不执行 -> surfaceAction.DataAction.updateWithJob -> 可以顺利的往后执行并结束任务

论坛管理员 发表于 2024-6-5 10:04:41

surfaceAction在哪里定义了?

scmarine 发表于 2024-6-5 11:49:15

在最外层:
var surfaceAction = this.Actions.load("x_processplatform_assemble_surface");

用到的公共定义,我都写在了外层,通用

论坛管理员 发表于 2024-6-7 09:32:33

您跟踪一下,多加一些输出,看看jobid和jobbody是否正确,然后正确的回调和错误的回调里的输出是否有在控制台输出?

szhtest 发表于 2024-11-8 16:42:14

我也一样出现了这个问题,请问楼主怎么解决的?区别是我是直接在结束节点的活动执行后事件出现的这个问题,一样是工作流页面一直loading无法结束

szhtest 发表于 2024-11-30 15:04:27

szhtest 发表于 2024-11-8 16:42
我也一样出现了这个问题,请问楼主怎么解决的?区别是我是直接在结束节点的活动执行后事件出现的这个问题, ...

我最后更改到环节的活动流转完成环节事件里写脚本就可以了,我之前有遇到过这个问题:流程事件:活动执行后,响应速度非常慢,原理是什么   ,不知是否有关系,你可以参考一下
页: [1]
查看完整版本: 流程流转过程中,不能使用脚本进行请求后台API更新数据?