1.需求
1)客户生产订单要求辅助属性必录
2)BOS配置必录存缺陷,物料启用了多个辅助属性,只要录一个就可以保存
3)物料辅助属性勾选“影响计划”可以控制每个辅助属性都必录,但是这也导致做物料清单时,每个辅助属性都必录,客户物料清单不需要每个辅助属性都必录
2.实现思路
1)在表单插件beforeSave中控制
3.代码
/// <summary>
/// 控制生产订单辅助属性必录
/// </summary>
/// <param name="e"></param>
public override void BeforeSave(Kingdee.BOS.Core.Bill.PlugIn.Args.BeforeSaveEventArgs e)
{
base.BeforeSave(e);
string auxPropId = "";
//取生产订单表体
Entity fentity = this.View.BillBusinessInfo.GetEntity("FTreeEntity");
DynamicObjectCollection entityObs = this.Model.GetEntityDataObject(fentity);
//循环表体分录
for (int i = 0; i < entityObs.Count; i++)
{
//取当前分录录入的辅助属性值
DynamicObject auxPropObs = entityObs[i]["AuxPropId"] as DynamicObject;
if (auxPropObs == null) continue;
//取当前分录录入的物料
DynamicObject materialId = entityObs[i]["MaterialId"] as DynamicObject;
//取当前分录物料的辅助属性启用状态
DynamicObjectCollection materialAuxptys = materialId["MaterialAuxPty"] as DynamicObjectCollection;
//循环判断各个辅助属性是否启用
for (int j = 0; j < materialAuxptys.Count; j++)
{
//判断物料启用该辅助属性
if (materialAuxptys[j]["IsEnable1"].ToString() == "True")
{
//组合辅助属性字段,例如:F100001_Id
auxPropId = "F" + materialAuxptys[j]["AuxPropertyId_Id"].ToString() + "_Id";
//判断辅助属性值是否为空
if (auxPropObs[auxPropId].ToString().Length == 0)
{
//如果为空就取消保存,并弹出提示
e.Cancel = true;
//取辅助属性名称
DynamicObject AuxPropertyId = materialAuxptys[j]["AuxPropertyId"] as DynamicObject;
this.View.ShowErrMessage("辅助属性" + AuxPropertyId["Name"].ToString()+ "不能为空");
}
}
}
}
}
推荐阅读