【工作流二开】插件开发系列1:审批动作服务插件,可输出审批人到单据原创
金蝶云社区-云社区用户GdP10544
云社区用户GdP10544
5人赞赏了该文章 1,347次浏览 未经作者许可,禁止转载编辑于2020年11月26日 14:45:36

背景:
流程审批过程中,用户希望同时做一些其他的数据处理,比如将当前审批节点的审批人、审批意见等信息输出到单据上,就可以通过审批动作服务插件实现。
此前比较遗憾的是在服务插件中无法获取流程信息;很高兴地告诉各位伙伴们,在K/3 Cloud_V6.X补丁(2017-04-21)、以及预计V7.0,支持在服务插件获取流程任务信息。新版本的工作流将逐步开放插件体系,以增强个性化定制开发。

1.    如何开发审批动作服务插件
审批动作服务插件,开发过程和通用的服务插件一样,本文主要介绍如何在插件中与流程进行交互;在K/3 Cloud_V6.X补丁(2017-04-21)、新版本V7.0支持从服务插件获取流程任务信息。
服务插件开发请参考K3Cloud在线SDK文档,http://open.kingdee.com/K3Cloud/SDK/webframe.html:使用教程> 插件开发 > 单据插件开发 > 创建一个业务单据操作服务插件。

1.1.       示例插件代码
以下示例插件,举例说明在用户审批的时候,如何获取一级审批节点的审批人、审批意见信息,并输出到单据上,示例未经测试仅供参考思路。首先到K/3 Cloud安装目录的WebSite\Bin子目录,引用如下基本组件(其他组件按需引用):
Kingdee.BOS.dll
Kingdee.BOS.Contracts.dll
Kingdee.BOS.Core.dll
Kingdee.BOS.DataEntity.dll
Kingdee.BOS.ServiceHelper.dll
1.png

2017-06-21 14:51 上传

下载附件 (8.17 KB)



using Kingdee.BOS.Contracts;

using Kingdee.BOS.Core.Const;

using Kingdee.BOS.Core.DynamicForm.PlugIn;

using Kingdee.BOS.Core.Metadata;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Workflow.Interface;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace Demo.Workflow.ServicePlugIn

{

    /// <summary>

    /// 输出审批人、审批意见到单据上

    /// </summary>

    [Description("服务插件,输出审批人、审批意见到单据上")]

    public class ApprovalInfoServicePlugIn : AbstractOperationServicePlugIn

    {

        private const string KEY_User1 = "FUserId1_Id";

        private const string KEY_Opinion1 = "FRemarks1";

        private const string KEY_TaskTitle1 = "FTaskTitle1";

        private const int KEY_FirstNodeId = 5;


        public override void EndOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EndOperationTransactionArgs e)

        {

            base.EndOperationTransaction(e);


            // 获取流程任务信息

            var activityCollection = this.Option.GetVariableValue<ObjectActivityInstanceCollection>(BOSConst.CST_KEY_WfActivityInstance, null);

            if (activityCollection != null)

            {

                IMetaDataService metaService = ServiceFactory.GetMetaDataService(this.Context);

                IViewService viewService = ServiceFactory.GetViewService(this.Context);

                List<DynamicObject> rowList = new List<DynamicObject>();


                // 每个任务传入一个ObjectActivityInstance对象,批量审批任务时会传入多个对象

                foreach (ObjectActivityInstance actRow in activityCollection)

                {

                    // 本例演示获取当前处理人的信息(每个任务可能有多个处理人,所有处理人存储在ReceiverList属性中)

                    IActivityInstance actInstance = actRow.ActivityInstance;

                    var currentReceiver =actInstance.CurrentReceiver;


                    // 加载单据数据

                    FormMetadata rowMeta = metaService.Load(this.Context, actRow.ObjectFormId, true) as FormMetadata;

                    var rowData = viewService.LoadSingle(this.Context, actRow.ObjectKeyValue,rowMeta.BusinessInfo.GetDynamicObjectType());


                    // 根据节点ID把审批人等信息输出到相应字段上,比如一级审核节点(如何查询节点ID参见下文)的审批人输出到FUserId1字段上

                    if (actInstance.ActivityDefineId ==KEY_FirstNodeId && currentReceiver != null)

                    {

                        // 可以输出审批人、意见、所选审批项、审批时间、任务标题信息

                       rowData[KEY_User1] = currentReceiver.ReceiverUserId;

                       rowData[KEY_Opinion1] = currentReceiver.ActionOpinion;

                       rowData[KEY_TaskTitle1] = currentReceiver.TaskTitle;// 任务标题属性,预计在8月后的补丁支持

                    }


                   rowList.Add(rowData);

                }


                if (rowList.Count > 0)

                {

                    ISaveService saveService = ServiceFactory.GetSaveService(this.Context);

                    saveService.Save(this.Context, rowList.ToArray());

                }

            }

        }

    }

}


1.2.       如何查询节点ID

首先在流程设计页面双击空白处,在弹出的“流程设置”页面勾选“显示节点ID”:

2.png

2017-06-21 14:52 上传

下载附件 (39.71 KB)


然后双击目标节点打开“节点设置”页面,就可以看到节点ID:

3.png

2017-06-21 14:55 上传

下载附件 (32.96 KB)





2.    如何注册审批动作服务插件

熟悉的伙伴可以略过下文。
先在操作上配置服务插件,然后在节点的审批项上配置操作。


对于有审核操作的终审节点,可以在审核操作上配置服务插件。

打开BOS设计器中目标单据的操作列表,在审核操作上配置服务插件:

4.png

2017-06-21 14:56 上传

下载附件 (34.77 KB)


在终审节点审批项上配置审核操作:

5.png

2017-06-21 14:57 上传

下载附件 (20.13 KB)




对于没有审核操作的普通节点,可以在审批项上配置空操作,然后在空操作上配置服务插件。

打开BOS设计器中目标单据的操作列表,新增用于输出审批人的空操作,并配置服务插件:

6.png

2017-06-21 14:57 上传

下载附件 (31.41 KB)

在普通节点审批项上配置该空操作:

7.png

2017-06-21 14:58 上传

下载附件 (19.78 KB)


图标赞 5
5人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!