处理人

处理人是活动节点的参与人,可以设置单人或者多人的方式,该属性只对用户参与类型活动有效。是流程设置过程中,使用最频繁的设置。

处理人设置对话框
如上图所示, 处理人是有处理人项构成的一个集合,可以添加多个处理人。系统初始默认提供了通过特定处理人自定义脚本获取处理人的两种方式。 在项目实施过程中,可以根据不同的组织架构,自行扩展。

项可以是包含或是排除关系,默认都是包含关系,排除指定当前处理人项内的人员将不参与任务,比如,选择了某个角色的成员作为 作为处理人,但又不想其中的某人参与,就可以通过排除设置(当然这种情况也可以使用脚本处理)。如果包含和排除都不勾选 则认为该项不生效。

特定处理人

特定处理人暂时提供了下面几种

  1. 发起人
  2. 某步骤处理人
  3. 特定角色
  4. 特定账号
  5. 特定机构
  6. 特定机构的角色

自定义脚本

通过自定义脚本几乎能满足所有的需求。脚本可以是一个简单的表达式,也可以是一段复杂的c#代码,亦可是一个完整的c#类。

表达式(表达式需要是一个能返回用户编码的字符串或字符串列表、或是一个BpmUserAccount对象或列表)
eg.

如下 表示处理人是用户编码为 "00001" 的用户

"00001"

表示多个处理人

"00001,00002,00003"
new List<string>() {"00001", "00001"}

获取某个角色下所有成员

RoleHelper.GetMembers("roleid")

c#片段 (片段需要注意的是,必须使用return 返回结果)

var sql = "select UserID Auth_User WHERE UnitID=@UnitID";
var userids = DB.Query<List<string>>(sql, new {UnitID=Form.Xxxxx}, Engine.Transaction);
return userids;

完整c#类

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using MySoft.HR.DataAccess.Bpm.Engine;
using MySoft.HR.Utils.Modal.Bpm;
using MySoft.HR.Utils.Modal.Bpm.Definition;
using MySoft.HR.DataAccess.Bpm.Scripts;
using MySoft.HR.DataAccess.Bpm.Utils;

// 处理人
public class Program : BpmExecutorScript {
    public override object Execute() {
        return WorkTask.GetPrevTask("Task_1"); // 获取Task_1 的处理人
        // return "P00001"; // 指定用户编码为P00001的用户为处理人
        // new string[] {"P00001", "P00002"};
    }
}