#使用技巧#如何利用二开插件实现“批改”操作的字段权限设定原创
金蝶云社区-张大星
张大星
100人赞赏了该文章 898次浏览 未经作者许可,禁止转载编辑于2023年06月24日 11:08:35

一、业务背景

基础资料权限设置的时候,只有批改的整体权限,同时批改的时候也不会去校验字段权限,所以这里需要插件来实现

二、关键步骤

1、找到批量修改的业务对象BD_BulkEdit

2、然后在这个动态表单上写个值更新校验的插件,去获取当前用户的字段权限(调用获取权限的接口),如果没权限就锁定下面的修改值

三、代码

using Kingdee.BOS.Core.Permission;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using System.ComponentModel;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

namespace XXXX.BusinessPlugIn.BD
{
    [Description("物料批改的时候校验权限")]
    [Kingdee.BOS.Util.HotUpdate]
    public class MaterialBulkEdit : AbstractDynamicFormPlugIn
    {
        public override void DataChanged(DataChangedEventArgs e)
        {
            base.DataChanged(e);
            string aa = e.Field.Key.ToString();
            if (aa == "FCombo")
            {
                this.View.GetControl("FOK").Enabled = true;
                string NewValue = e.NewValue.ToString();
                if (NewValue == "FWorkShopId")
                {
                    //字段权限校验接口
                    var allowFieldList = PermissionServiceHelper.GetAllowFieldList(this.Context, new BusinessObject()
                    {
                        Id = "BD_MATERIAL", //表单ID
                        UserId = this.Context.UserId,
                    }, Kingdee.BOS.Core.Permission.FieldInv.Edit);

                    var fieldName = "FWorkShopId"; //表单上字段ID
                    bool isAllow = true; //是否有权
                    foreach (var item in allowFieldList)
                    {
                        if (item.AllFieldList.Contains(fieldName)) //组织有权即有权
                        {
                            isAllow = true;
                        }
                        if (item.DenyFieldList.Contains(fieldName)) //任意组织禁止即无权 禁止优先
                        {
                            isAllow = false;
                            break;
                        }
                    }
                    if (isAllow == false)
                    {
                        this.View.ShowErrMessage("您没有修改'生产车间'字段的权限");
                        this.View.GetControl("FOK").Enabled = false;
                    }
                }

                else if (NewValue == "FUpStreamWorkShop")
                {
                    //字段权限校验接口
                    var allowFieldList = PermissionServiceHelper.GetAllowFieldList(this.Context, new BusinessObject()
                    {
                        Id = "BD_MATERIAL", //表单ID
                        UserId = this.Context.UserId,
                    }, Kingdee.BOS.Core.Permission.FieldInv.Edit);

                    var fieldName = "FUpStreamWorkShop"; //表单上字段ID
                    bool isAllow = true; //是否有权
                    foreach (var item in allowFieldList)
                    {
                        if (item.AllFieldList.Contains(fieldName)) //组织有权即有权
                        {
                            isAllow = true;
                        }
                        if (item.DenyFieldList.Contains(fieldName)) //任意组织禁止即无权 禁止优先
                        {
                            isAllow = false;
                            break;
                        }
                    }
                    if (isAllow == false)
                    {
                        this.View.ShowErrMessage("您没有修改'XXXXX'字段的权限");
                        this.View.GetControl("FOK").Enabled = false;
                    }
                }
            }
        }
    }
}

四、小结

分享一些原本应该有的小功能,感谢支持

赞 100