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

流程插件开发系列3:自定义参与人插件

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

流程插件开发系列3:自定义参与人插件

背景:
现有流程参与人支持用户、角色、员工、岗位、部门、汇报关系、变量或他们的组合。如有其他特殊需求,希望通过自定义参与人插件实现,比如通过业务员中的销售员作为参与人。
很高兴告诉各位伙伴们,后续版本(预计在7.0),能很方便地开发自定义参与人插件,并在节点上进行配置。

1.    用户如何配置自定义参与人
本例以配置“销售员”作为参与人,用户就可以在基础资料类型中选择“销售员”(可选的基础资料类型由插件指定)。常量方式则选择具体的某个销售员;变量方式则选择单据上的销售员字段。作为参数传入参与人插件中解析出具体用户:
1.webp

2017-06-21 16:42 上传

下载附件 (34.02 KB)



2.    开发者如何实现自定义参与人插件
2.1.       参与人插件基类
Kingdee.BOS.Workflow.App.Core.Participant.MemberWrapper.CustomizeMemberPlugIn
引用组件Kingdee.BOS.Workflow.App.Core.dll,开发者编写的参与人解析类需要继承该基类。
2.2.       属性ParticipantFormIds
属性说明:用户在流程节点上配置自定义参与人时,可选的基础资料FormId集合
C#定义
public abstract List<string> ParticipantFormIds { get; }
备注:插件中覆写此属性,返回允许用户选择的基础资料类型集合。
2.3.       方法GetCustomUser
方法说明:解析参与人的核心方法,把用户配置的参与人基础资料解析成具体用户ID。
C#定义
public abstract List<long> GetCustomUser(Context ctx, List<IMember> members)
备注:插件中覆写此方法,自行实现参与人解析,并返回解析出的用户ID。

插件基类

CustomizeMemberPlugIn

所在组件

Kingdee.BOS.Workflow.App.Core.dll

参与人解析方法

List<long>  GetCustomUser(Context ctx, List<IMember> members)

  

方法参数说明:


ctx

BOS环境上下文

  

members

  

已经解析好的基础资料常量集合,插件以此解析参与人用户。

比如用户在销售员参与人中,配置了常量方式选择具体的某个销售员,以及变量方式选择单据上的销售员字段。流程引擎会将这些配置全部解析为具体的销售员常量,传入本参数。

方法返回值

插件根据参数members解析出参与人用户ID集合,返回流程引擎,系统将对这些用户分配待办任务。


2.4.       示例插件代码
以下示例插件,举例说明如何根据“销售员”解析出参与人用户,示例未经测试仅供参考思路。到K/3 Cloud安装目录的WebSite\Bin子目录,引用如下基本组件(其他组件按需引用):
Kingdee.BOS.dll
Kingdee.BOS.App.dll
Kingdee.BOS.Core.dll
Kingdee.BOS.DataEntity.dll
Kingdee.BOS.Workflow.App.Core.dll
Kingdee.BOS.Workflow.Models.dll
2.webp

2017-06-21 16:43 上传

下载附件 (9.01 KB)



using Kingdee.BOS;

using Kingdee.BOS.App.Data;

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.ComponentModel;

using System.Linq;

using System.Text;

namespace Demo.Workflow.ParticipantPlugIn.CustomParticipant

{

    [Description("自定义销售员类型参与人")]

    public class DemoCustomizeMemberPlugIn : 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>

        /// <paramname="members">已经解析好的基础资料常量</param>

        /// <returns>作为参与人的具体用户ID</returns>

        public override List<long> GetCustomUser(Context ctx, List<IMember> members)

        {

            // 获取“销售员”ID

            List<int> salerList = members

                .Where(i => string.Equals((i as CustomPartiMember).ParticipantFormId, "BD_Saler", StringComparison.OrdinalIgnoreCase))

                .Select(i => int.Parse(i.Id)).ToList();

            // TODO 按需求解析参与人,示例解析出“销售员”对应的用户作为参与人:

            List<long> result = new List<long>();

            if (salerList.Count > 0)

            {

                string sql = @"SELECT U.FUSERID,U.FNAME,STAFF.FPOSTID FROM T_BD_OPERATORENTRY OPERA

                INNER JOIN  T_BD_S

流程插件开发系列3:自定义参与人插件

背景:现有流程参与人支持用户、角色、员工、岗位、部门、汇报关系、变量或他们的组合。如有其他特殊需求,希望通过自定义参与人插件实现,...
点击下载文档文档为doc格式

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

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