二开插件 - 辅助属性值校验

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

二开插件 - 辅助属性值校验

客户需求: 当用户=A时 单据体明细行的每个物料的其中一个辅助属性不能存在B。例如;用户A时,单据明细行物料【等级】这个辅助属性不等于B

实现方案: 保存时,如果当前用户是A,则当明细中有物料【等级】等于B的给出提示,不保存。

1.  查看辅助属性[等级]的编码。打开主菜单 - 基础管理 - 基础资料 - 辅助属性列表菜单。


2.  查看辅助属性[等级]的值列表,查看B的编码。


3.  表单插件代码如下:

public override void BeforeSave(BeforeSaveEventArgs e)
{
    base.BeforeSave(e);
    //用户A内码100088,等级编码为001,等级值不能为B
    long User_Id = 100088;
    string Level_Number = "001";
    string Level_Value = "B";
    //取采购申请单明细
    Entity entity = this.View.BillBusinessInfo.GetEntity("FEntity");
    DynamicObjectCollection lstEntityObjs = this.Model.GetEntityDataObject(entity);
    if (lstEntityObjs.IsEmpty()) return;
    foreach (DynamicObject dynItem in lstEntityObjs)
    {
        //取当前分录录入的辅助属性值
        DynamicObject dynAuxValue = dynItem["AuxPropId"] as DynamicObject;
        if (dynAuxValue == null) continue;
        //取当前分录录入的物料
        DynamicObject dynMaterial = dynItem["MaterialId"] as DynamicObject;
        //取当前分录物料的辅助属性
        DynamicObjectCollection lstMaterialAuxProps = dynMaterial["MaterialAuxPty"] as DynamicObjectCollection;
        if (lstMaterialAuxProps.IsEmpty()) continue;
        //循环校验各个辅助属性
        foreach (DynamicObject auxPropItem in lstMaterialAuxProps)
        {
            //判断物料启用该辅助属性
            var isEnable1 = ObjectUtils.Object2Bool(auxPropItem["IsEnable1"]);
            if (!isEnable1) continue;
            //组合辅助属性字段,例如:F100001
            var auxPropId = "F" + ObjectUtils.Object2String(auxPropItem["AuxPropertyId_Id"]);
            var auxValue = dynAuxValue[auxPropId] as DynamicObject;
            if (auxValue == null) continue;
            var auxValueNumber = ObjectUtils.Object2String(auxValue["FNumber"]);
            //取辅助属性编码和名称
            DynamicObject dynAuxProp = auxPropItem["AuxPropertyId"] as DynamicObject;
            var auxNumber = ObjectUtils.Object2String(dynAuxProp["Number"]);
            var auxName = ObjectUtils.Object2String(dynAuxProp["Name"]);
            if (this.Context.UserId == User_Id && auxNumber == Level_Number && auxValueNumber.EqualsIgnoreCase(Level_Value))
            {
                //如果校验失败就取消保存,并弹出提示
                e.Cancel = true;
                this.View.ShowErrMessage("辅助属性【" + auxName + "】不能选择B");
                return; 
            }
        }
    }
}

备注: 本文详细说明了取辅助属性值的方法,可以用于判断值是否为空等其它校验。


二开插件 - 辅助属性值校验

客户需求: 当用户=A时 单据体明细行的每个物料的其中一个辅助属性不能存在B。例如;用户A时,单据明细行物料【等级】这个辅助属性不等于B...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息