二开案例.工作流插件.参与人插件.自定义参与人

【应用场景】
工作流,流程设计器,参与人配置,当系统内置的参与人类型无法满足需求时,可增加自定义参与人类型。

【案例演示】
新增两个自定义参与人:销售员,操作员。
【实现步骤】
<1>编写参与人插件,代码如下。
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Util;
using Kingdee.BOS.Workflow.App.Core.Participant.MemberWrapper;
using Kingdee.BOS.Workflow.Models.Member;
using Kingdee.BOS.WorkflowMember;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Jac.XkDemo.BOS.App.PlugIn
{
/// <summary>
/// 销售员
/// </summary>
public class SalerCustomizeMemberPlugIn : CustomizeMemberPlugIn
{
/// <summary>
/// 用户在流程节点上设置自定义参与人时,可选的基础资料FormId
/// </summary>
public override List<string> ParticipantFormIds
{
get
{
// TODO 按需求设置可选的基础资料FormID,比如允许用户选择“销售员”类型的基础资料
return new List<string>() { "BD_Saler" }; // 销售员
}
}
/// <summary>
/// 把参与人基础资料解析成具体用户ID
/// </summary>
/// <param name="ctx">BOS上下文</param>
/// <param name="members">已经解析好的基础资料常量</param>
/// <returns>作为参与人的具体用户ID</returns>
public override List<long> GetCustomUser(Context ctx, List<IMember> members)
{
// 获取销售员内码
var operatorIds = members.Where(member => ((CustomPartiMember)member).ParticipantFormId.EqualsIgnoreCase("BD_Saler")).Select(member => int.Parse(member.Id)).ToList();
// 通过销售员内码,获取其绑定的用户的内码
var userIds = new List<long>();
if (operatorIds.Count > 0)
{
string sql = @"SELECT U.FUSERID
FROM T_BD_OPERATORENTRY OPERA
INNER JOIN T_BD_STAFF STAFF ON OPERA.FSTAFFID = STAFF.FSTAFFID
AND STAFF.FDOCUMENTSTATUS = 'C'
AND STAFF.FFORBIDSTATUS = 'A'
INNER JOIN V_BD_CONTACTOBJECT CONTACT ON STAFF.FPERSONID = CONTACT.fid
AND CONTACT.FDOCUMENTSTATUS = 'C'
AND CONTACT.FFORBIDSTATUS = 'A'
INNER JOIN T_SEC_USER U ON U.FLINKOBJECT = CONTACT.fid
AND U.FFORBIDSTATUS = 'A'
WHERE OPERA.FISUSE = '1'
AND OPERA.FENTRYID IN (SELECT FID FROM TABLE(fn_StrSplit(@OperatorIds,',',1)))";
var parameters = new SqlParam[]
{
new SqlParam("@OperatorIds", KDDbType.udt_inttable, operatorIds.ToArray())
};
var userObjs = DBUtils.ExecuteDynamicObject(ctx, sql, paramList: parameters);
userIds.AddRange(userObjs.Select(i => Convert.ToInt64(i["FUSERID"])));
}
return userIds;
}
}
/// <summary>
/// 操作员
/// </summary>
public class OperatorCustomizeMemberPlugIn : CustomizeMemberPlugIn
{
/// <summary>
/// 用户在流程节点上设置自定义参与人时,可选的基础资料FormId
/// </summary>
public override List<string> ParticipantFormIds
{
get
{
return new List<string>() { "BD_Saler", "BD_BUYER", "BD_Inspector" }; // 销售员、采购员、质检员
}
}
/// <summary>
/// 把参与人基础资料解析成具体用户ID
/// </summary>
/// <param name="ctx">BOS上下文</param>
/// <param name="members">已经解析好的基础资料常量</param>
/// <returns>作为参与人的具体用户ID</returns>
public override List<long> GetCustomUser(Context ctx, List<IMember> members)
{
// 基础资料类型是业务员,先获取业务员内码集合,再获取其对应的用户的内码集合
var operatorIds = members.Select(member => int.Parse(member.Id)).ToList();
// 通过销售员内码,获取其绑定的用户的内码
var userIds = new List<long>();
if (operatorIds.Count > 0)
{
string sql = @"SELECT U.FUSERID
FROM T_BD_OPERATORENTRY OPERA
INNER JOIN T_BD_STAFF STAFF ON OPERA.FSTAFFID = STAFF.FSTAFFID
AND STAFF.FDOCUMENTSTATUS = 'C'
AND STAFF.FFORBIDSTATUS = 'A'
INNER JOIN V_BD_CONTACTOBJECT CONTACT ON STAFF.FPERSONID = CONTACT.fid
AND CONTACT.FDOCUMENTSTATUS = 'C'
A二开案例.工作流插件.参与人插件.自定义参与人
【应用场景】工作流,流程设计器,参与人配置,当系统内置的参与人类型无法满足需求时,可增加自定义参与人类型。【案例演示】新增两个自定...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



