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

二开案例.列表插件.流程管理中心查看单据时取消验权

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

二开案例.列表插件.流程管理中心查看单据时取消验权

【应用场景】

流程管理中心查看单据时,默认会验证当前登录用户的查看权限,可通过插件取消验权。



【案例演示】

流程管理中心查看单据时取消验权。

上传图片



【实现步骤】

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

using Kingdee.BOS;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Core.Metadata.FormElement;
using Kingdee.BOS.Core.Permission;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.Msg;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.BOS.Workflow.PlugIns;
using Kingdee.BOS.Workflow.ServiceHelper;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
    /// <summary>
    /// 【列表插件】流程管理中心查看单据时取消验权
    /// 使用说明:
    /// 1.扩展流程管理_流程实例[WF_ProcInstBill]
    /// 2.注册二开的列表插件:Jac.XkDemo.BOS.Business.PlugIn.ProcManageCenterOpenBillCancelCheckRightListPlugIn, Jac.XkDemo.BOS.Business.PlugIn
    /// 3.禁用标准产品的列表插件:Kingdee.BOS.Workflow.PlugIns.ProcManageProcInst, Kingdee.BOS.Workflow.PlugIns
    /// </summary>
    [Description("【列表插件】流程管理中心查看单据时取消验权"), HotUpdate]
    public class ProcManageCenterOpenBillCancelCheckRightListPlugIn : ProcManageProcInst
    {
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            if (e.BarItemKey.EqualsIgnoreCase("TBBILLVIEW"))
            {
                e.Cancel = true;
                if (this.ListView.CurrentSelectedRowInfo == null) return;
                string formId, keyValue;
                ProcManageServiceHelper.GetFormIdAndKeyValue(this.View.Context, this.ListView.CurrentSelectedRowInfo.PrimaryKeyValue,
                    out formId, out keyValue);
                WorkflowPlugInHelper.OpenBillWindow(this.View, formId, keyValue, MsgType.WorkflowMessage);
                return;
            }
            base.BarItemClick(e);
        }
        #region WorkflowPlugInHelper
        public class WorkflowPlugInHelper
        {
            public static void OpenBillWindow(IDynamicFormView view, string formId, string keyValue,
                MsgType msgType = MsgType.CommonMessage, ShowType showType = ShowType.MainNewTabPage)
            {
                try
                {
                    if (string.IsNullOrWhiteSpace(formId)
                        || string.IsNullOrWhiteSpace(keyValue))
                    {
                        view.ShowNotificationMessage(Kingdee.BOS.Resource.ResManager.LoadKDString("未关联单据,或者关联的单据已经被删除!", "002406030017566", Kingdee.BOS.Resource.SubSystemType.BOS));
                        return;
                    }
                    // 验查看权
                    //if (!CheckReadRight(view.Context, formId, keyValue))
                    //{
                    //    view.ShowNotificationMessage(Kingdee.BOS.Resource.ResManager.LoadKDString("对不起,您没有所选单据查看权限!", "002406030017569", Kingdee.BOS.Resource.SubSystemType.BOS));
                    //    return;
                    //}
                    BillShowParameter showParam = new BillShowParameter();
                    showParam.AllowNavigation = false;
                    showParam.PageId = Guid.NewGuid().ToString();
                    showParam.FormId = formId;
                    showParam.PKey = keyValue;
                    showParam.Status = OperationStatus.VIEW;
                    //工作流消息查看
                    if (msgType == MsgType.WorkflowMessage)
                    {
                        // 加载单据类型视图
                        FormMetadata meta = Kingdee.BOS.ServiceHelper.MetaDataServiceHelper.Load(
                            view.Context, formId) as FormMetadata;
                        string layoutId = GetLayoutByBillType(view.Context, meta, keyValue);
                        if (!string.IsNullOrEmpty(layoutId))
                        {
                            showParam.LayoutId = layoutId;
                        }
                    }
                    //showParam.OpenStyle.TagetKey = "FMainTab";
                    if (view.ParentFormView == null || view.ParentFormView.ParentFormView == null)
                    {
                        showParam.OpenStyle.ShowType = ShowType.Modal;
                    }
                    else
                    {
                        showParam.OpenStyle.ShowType = showType;
                    }
                    //if (msgType != MsgType.BusinessFlowMessage)
                    //{
                    //    showParam.CustomParams.Add("workflowHandled", "1");
                    //}
                    // 工作流消息,查看单据,无需关闭菜单,放开
                    // 前面代码已经检验过查看权、数据权,用户完全能够正常打开单据
                    // 放开单据的菜单后,用户可以从消息入口,进行下推、查看附件等与流程密切相关的操作
                    // Johnny Ding 2014.4.17
                    //if (msgType == MsgType.WorkflowMessage)
                    //{
                    //    showParam.CustomParams.Add("workflowHandled", "1");
                    //}
                    if (view.ParentFormView == null || view.ParentFormView.ParentFormView == null)
                    {
                        view.ShowForm(showParam);
                    }
                    else
                    {
                        IDynamicFormView showView = view.GetView(view.ParentFormView.ParentFormView.PageId);
                        showView.ShowForm(showParam);
                        view.SendDynamicFormAction(showView);
                    }
                }
                catch (Kingdee.BOS.KDExceptionLicense ex)
                {
                    view.ShowErrMessage(ex.Message);
                }
                catch
                {
                    view.ShowErrMessage(Kingdee.BOS.Resource.ResManager.LoadKDString("单据与单据编码配置错误,请联系管理员!", "002406030017572", Kingdee.BOS.Resource.SubSystemType.BOS), Kingdee.BOS.Resource.ResManager.LoadKDString("单据查看失败", "002406030017575", Kingdee.BOS.Resource.SubSystemType.BOS));
                }
            }
            /// <summary>
            /// 校验查看权限:登陆组织查看权 + 数据权
            /// </summary>
            private static bool CheckReadRight(Context ctx, string formId, object pkValue)
            {
                // 验证功能权限
                BusinessObject businessObject = new BusinessObject();
                businessObject.Id = formId;
                FormMetadata meta = Kingdee.BOS.ServiceHelper.MetaDataServiceHelper.Load(ctx, formId) as FormMetadata;
                BusinessInfo info = meta.BusinessInfo;
                Form form = info.GetForm();
                //不需要验权直接返回
                if (form.SupportPermissionControl == 0)
                {
                    return true;
                }
                PermissionAuthResult authResul

二开案例.列表插件.流程管理中心查看单据时取消验权

【应用场景】流程管理中心查看单据时,默认会验证当前登录用户的查看权限,可通过插件取消验权。【案例演示】流程管理中心查看单据时取消验...
点击下载文档文档为doc格式

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

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