工作流流程自定义发起人

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

工作流流程自定义发起人

1 业务背景

场景一:

采购申请单数据来源于第三方系统,第三方系统同步数据到苍穹时同步发起流程走审批;此业务场景是通过api实现,在api里获取到推送过来的批量数据然后调用实体的提交操作,触发流程;提交操作会以当前登录人为流程的发起人,需求是以单据的创建人或某一个单据人员字段作为发起人,而不是当前api登录人;

场景二:

采购申请单下推生成采购单据订单,并同步发起采购订单的审批流程;此时流程默认发起人是【下推】操作人,需求该业务场景下采购订单审批流程发起人为系统人员维护的”系统默认“用户,不是下推】操作人;

2 思路与方案

通过代码动态设置操作人,切换上下文的用户

OperateOption operateOption = OperateOption.create();

operateOption.setVariableValue("_initiator_", "人员id");

3 实现步骤

1、测试单据维护人员字段(流程发起人)

2、创建自定义API

2、编写自定义api插件

@ApiController(value = "bos", desc = "demo样例")
@ApiMapping(value = "demo")
public class CustomDemoController implements Serializable {
    @ApiPostMapping("/kdec_bill0514/saveAndSubmit")
    public CustomApiResult<Boolean> saveAndSubmit(@ApiParam("表单数据") Map<String, Object> map) {
        if(map == null) {
            throw new KDBizException(new ErrorCode("0002", "保存数据不能为空"));
        }
        Object idObj = map.get("billno");
        if(idObj == null) {
            throw new KDBizException(new ErrorCode("0001", "编码不能为空"));
        }
        Object kdec_userfield = map.get("kdec_userfield");
        if(kdec_userfield == null) {
            throw new KDBizException(new ErrorCode("0003", "流程发起人不能为空"));
        }
        DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject("kdec_bill0514");
        dynamicObject.set("billno",idObj);
        dynamicObject.set("kdec_userfield",kdec_userfield);
        dynamicObject.set("billstatus","A");
        //创建人
        dynamicObject.set("creator", RequestContext.get().getCurrUserId());
        OperateOption operateOption = OperateOption.create();
        OperationResult operationResult = SaveServiceHelper.saveOperate("kdec_bill0514", new DynamicObject[]{dynamicObject}, operateOption);
        if(operationResult.isSuccess()){
            List<Object> successPkIds = operationResult.getSuccessPkIds();
            //流程发起人
            operateOption.setVariableValue("_initiator_", kdec_userfield + "");
            OperationServiceHelper.executeOperate("submit", "kdec_bill0514", successPkIds.toArray(), operateOption);
            return CustomApiResult.success(operationResult.isSuccess());
        }else {
            return CustomApiResult.fail("301",operationResult.getMessage());
        }
    }
}

4 注意事项

a、此方案的重点是如何自定义实体操作人

通过代码设置实体操作人

OperateOption operateOption = OperateOption.create();

operateOption.setVariableValue("_initiator_", "人员id");

b、触发流程的操作不一定是提交操作,也可以配置其他操作,视情况调用具体的操作触发流程


5 效果图

自定义API参数传入了流程发起人id(张三)










工作流流程自定义发起人

1 业务背景场景一:采购申请单数据来源于第三方系统,第三方系统同步数据到苍穹时同步发起流程走审批;此业务场景是通过api实现,在api里...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息