流程进入时、异常时、终止时,给用户发消息,通知用户

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

流程进入时、异常时、终止时,给用户发消息,通知用户


1 问题描述

在流程进入时、异常时、终止时,给用户发消息,通知用户。


2 解决方法

可以使用业务事件中心设置事件订阅。

2.1流程进入时

(1)新增事件订阅

(2)选择事件定义,搜索“流程实例启动”,选择事件编码为 wf.AfterProcessStartEvent的事件。

(3)编写插件代码,由于我的场景是需要发消息给流程发起人,因此我这里需要用插件实现,如果有其他业务场景,也可以选择固定的人员,

参考插件代码:

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import kd.bos.bec.api.IEventServicePlugin;
import kd.bos.bec.model.KDBizEvent;
import kd.bos.servicehelper.workflow.WorkflowServiceHelper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


// 业务事件中心,发消息,消息接收人插件
public class SendWfMsgEventPlugin implements IEventServicePlugin {
    
    @Override
    public Map<String, List<Long>> calculateUserIds(KDBizEvent evt) {
        Map<String, List<Long>> listMap = new HashMap<>();
    
    
        // 流程启动
        if (evt.getEventNumber().contains("AfterProcessStartEvent")) {
            JSONArray jsonArray = JSONArray.parseArray(evt.getSource());
            JSONObject jsonObject = jsonArray.getJSONObject(0);
            // 获取发起人id,返回流程发起人id
            String startUserId = jsonObject.getString("startUserId");
            String businessKey = jsonObject.getString("businKey");
            List<Long> list = new ArrayList();
            // 构造用户id的List对象
            list.add(Long.parseLong(startUserId));
    
            // 固定写法
            listMap.put("businesskey", list);
        }
    
        return listMap;
    
    }
}

(4)自定义消息内容、编辑标题、正文。


(5)效果如下


2.2流程异常

(1)新增事件订阅,绑定事件定义(编码:wf.AfterProcessErrorSuspendEvent

(2)注册插件,编写插件代码,发消息给流程发起人

代码如下

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import kd.bos.bec.api.IEventServicePlugin;
import kd.bos.bec.model.KDBizEvent;
import kd.bos.servicehelper.workflow.WorkflowServiceHelper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

// 业务事件中心,发消息,消息接收人插件
public class SendWfMsgEventPlugin implements IEventServicePlugin {

    @Override
    public Map<String, List<Long>> calculateUserIds(KDBizEvent evt) {
        Map<String, List<Long>> listMap = new HashMap<>();


        // 流程挂起
        if (evt.getEventNumber().contains("AfterProcessErrorSuspendEvent")) {
            JSONArray jsonArray = JSONArray.parseArray(evt.getSource());
            JSONObject jsonObject = jsonArray.getJSONObject(0);

            // 单据的pkid
            String businessKey = jsonObject.getString("businKey");
            // 流程实例id
            String processInstanceId = jsonObject.getString("processInstanceId");


            Map<String, Object> proInMap = WorkflowServiceHelper.getProcessInstancePropertiesByBusinesskey(businessKey);
            Object startUserId = proInMap.get("startUserId");

            //用流程实例id,查询流程实例表,也可以获取发起人
            //DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(processInstanceId, "wf_execution");
            //Object startUserId = dynamicObject.get("startuserid");

            List<Long> list = new ArrayList();
            // 构造用户id的List对象
            list.add( (startUserId instanceof Long) ? (long) startUserId :  Long.valueOf(startUserId.toString()) );
            // 固定写法
            listMap.put("businesskey", list);

        }

        return listMap;

    }
}



2.3流程终止时

(1)新增事件订阅,绑定事件定义(编码:wf.AfterProcessAbortEvent)

(2)注册插件,编写插件代码,发消息给流程发起人


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import kd.bos.bec.api.IEventServicePlugin;
import kd.bos.bec.model.KDBizEvent;
import kd.bos.servicehelper.workflow.WorkflowServiceHelper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

// 业务事件中心,发消息,消息接收人插件
public class SendWfMsgEventPlugin implements IEventServicePlugin {

    @Override
    public Map<String, List<Long>> calculateUserIds(KDBizEvent evt) {
        Map<String, List<Long>> listMap = new HashMap<>();


        // 流程终止
        if (evt.getEventNumber().contains("AfterProcessAbortEvent")) {
            JSONArray jsonArray = JSONArray.parseArray(evt.getSource());
            JSONObject jsonObject = jsonArray.getJSONObject(0);

            // 单据的pkid
            String businessKey = jsonObject.getString("businKey");
            // 流程实例id
            String processInstanceId = jsonObject.getString("processInstanceId");

            Map<String, Object> proInMap = WorkflowServiceHelper.getProcessInstancePropertiesByBusinesskey(businessKey);
            Object startUserId = proInMap.get("startUserId");

            //用流程实例id,查询流程实例表,也可以获取发起人
            //DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(processInstanceId, "wf_execution");
            //Object startUserId = dynamicObject.get("startuserid");

            List<Long> list = new ArrayList();
            // 构造用户id的List对象
            list.add( (startUserId instanceof Long) ? (long) startUserId :  Long.valueOf(startUserId.toString()) );
            // 固定写法
            listMap.put("businesskey", list);

        }

        return listMap;

    }
}






流程进入时、异常时、终止时,给用户发消息,通知用户

1 问题描述在流程进入时、异常时、终止时,给用户发消息,通知用户。2 解决方法可以使用业务事件中心设置事件订阅。2.1流程进入时(1)新...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息