二开案例.表单插件.工作流任务处理界面的提交事件

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.表单插件.工作流任务处理界面的提交事件

【应用场景】

工作流任务处理界面,希望能通过插件捕获到提交事件。

注意:此案例仅适应于工作流,审批流实现有差异,请勿生搬硬套。



【案例演示】

采购订单工作流任务处理界面,通过插件捕获提交事件。


【实现步骤】

<1>编写表单插件,代码如下。

using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
    /// <summary>
    /// 【表单插件】工作流任务处理界面的提交事件
    /// </summary>
    [Description("【表单插件】工作流任务处理界面的提交事件"), HotUpdate]
    public class WfApprovalHandleFormPlugIn : AbstractDynamicFormPlugIn
    {
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            if (e.BarItemKey.EqualsIgnoreCase("tbWFSubmit"))
            {
                // 提交事件
                // 获取提交状态
                object successObj;
                if (!this.View.Session.TryGetValue("SubmitSuccess", out successObj) || successObj == null || !Convert.ToBoolean(successObj))
                {
                    // 提交失败,不处理
                    return;
                }
                var childPageIds = this.View.GetChildenPageIds();
                if (childPageIds == null || childPageIds.Count == 0)
                {
                    return;
                }
                var billView = this.View.GetView(childPageIds[0]) as IBillView;
                if (billView == null)
                {
                    return;
                }
                if (!billView.BillBusinessInfo.GetForm().Id.EqualsIgnoreCase("PUR_PurchaseOrder"))
                {
                    // TODO
                }
                // 通过工作流任务处理视图,获取工作流相关的数据
                // 获取审核状态
                #region 工作流
                // TODO:此处判断终止流程的逻辑,可根据实际情况进行调整
                var dissentValue = new[] {"Dissent", "03"}; // Consent审核通过 Reject驳回发起人 Dissent终止流程 或者是 01审核通过 02驳回发起人 03终止流程
                var approvalTypeField = this.View.BillBusinessInfo.GetField("FRadioGroup");
                if (approvalTypeField != null)
                {
                    var approvalType = this.Model.GetValue(approvalTypeField.Key);
                    if (approvalType == null || !dissentValue.Contains(approvalType.ToString()))
                    {
                        return;
                    }
                }
                #endregion
                #region 审批流
                else
                {
                    approvalTypeField = this.View.BillBusinessInfo.GetField("FRApprovalGroup");
                    if (approvalTypeField != null)
                    {
                        var approvalType = this.Model.GetValue(approvalTypeField.Key);
                        if (approvalType == null || !dissentValue.Contains(approvalType.ToString()))
                        {
                            return;
                        }
                    }
                }
                #endregion
                // 通过单据视图,获取单据相关的数据
                var pkId = billView.Model.GetPKValue();
                var billNo = billView.Model.GetValue(billView.BillBusinessInfo.GetBillNoField().Key);
                // TODO
            }
        }
    }
}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE扩展工作流任务处理表单,注册表单插件,保存元数据,开发完毕。

工作流任务处理表单有很多个,需要每个都扩展挂插件。

下面仅以【信息中心_任务处理[WF_AssignmentApproval]】为例进行介绍:

可通过http数据监控,来判断当前任务处理界面是用的哪一个(任务处理界面是个多层嵌套结构,注意第二个GetFormMetaData请求才是我们要扩展的那个表单),如下图:

目前已知的任务处理界面有:

AF_ApprovalAssignBatchDeal
AF_BillAssignment
WF_BillAssignApproval
WF_AssignmentApprovalH5
AP_ApprovalAssignHandleH5
AP_ApprovalAssignHandle
INFO_IndexApproval
WF_AssignmentApproval

历史设计的原因,导致工作流任务处理界面的二开非常复杂繁琐,请谨慎参考。

---------------------------------------------------------------------------------------------------------













【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.表单插件.工作流任务处理界面的提交事件

【应用场景】工作流任务处理界面,希望能通过插件捕获到提交事件。注意:此案例仅适应于工作流,审批流实现有差异,请勿生搬硬套。【案例演...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息