电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

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

来源:金蝶云社区作者:金蝶2024-09-2317

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


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的Lis

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

1 问题描述在流程进入时、异常时、终止时,给用户发消息,通知用户。2 解决方法可以使用业务事件中心设置事件订阅。2.1流程进入时(1)新...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信