如何给辅助属性赋值、获取辅助属性值原创
金蝶云社区-云社区用户n7090215
云社区用户n7090215
23人赞赏了该文章 10312次浏览 未经作者许可,禁止转载编辑于2020年08月07日 07:47:38

辅助属性是一个特殊的数据,论坛中有一些说明,不够系统,近期一个客户的开发涉及到辅助属性的取值和赋值问题,折腾了好久,总算搞定,把经验分享给大家,供大家参考。


关于辅助属性取值问题,详见另一个帖子:

https://vip.kingdee.com/article/54526652264285184


先说下需求:

  1. 客户的物料启用了加工规格辅助属性,该辅助属性值来源为辅助资料

  2. 该物料设置了加工规格的默认值

  3. 业务流程为销售订单下推采购申请单,在采购申请单中为明细自动赋值为默认加工规格

实现思路:

在采购申请单中的AfterCreateNewData中处理


代码如下:

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

 public override void AfterCreateNewData(EventArgs e)
        {            
            //获取单据体
            Entity fentity = this.View.BillBusinessInfo.GetEntity("FEntity");
            DynamicObjectCollection entityObs = this.Model.GetEntityDataObject(fentity);
            //将辅助属性保存到auxObj数组中,应该也可以不用定义,有兴趣的小伙伴可以试下不要定义数组来保存
            //使用数组来保存每个明细的辅助属性,是因为开始的代码,所有的辅助属性总是明细的最后一条,所以用数组来区分,后来搞定后,就没改代码
            DynamicObject[] auxObj = new DynamicObject[entityObs.Count];
            //定义数组来保存查询结果,定义数组来保存的原因同上
            DynamicObjectCollection[] doc = new DynamicObjectCollection[entityObs.Count];

            //定义DynamicObject数据类型,这个是关键
            //每个辅助属性都有两个字段来保存,一个是F100001,就是F加上该辅助属性内码,另一个是F100001_Id,用于保存该辅助属性对应的辅助资料的Id
            DynamicObjectType auxType = new DynamicObjectType("myAuxType");
            DynamicProperty FNumber = auxType.RegisterSimpleProperty("FNumber", typeof(string), string.Empty);
            DynamicProperty FDataValue = auxType.RegisterSimpleProperty("FDataValue", typeof(string), string.Empty);
            DynamicProperty Id = auxType.RegisterSimpleProperty("Id", typeof(string), string.Empty);
            for (int i = 0; i < entityObs.Count; i++)
            {
                string spec = "";
                if (this.Model.GetValue("F_QHOQ_TEXT", i)!=null)
                {                    
                    //取物料的默认加工规格,其值等于物料的默认加工规格
                    spec = this.Model.GetValue("F_QHOQ_TEXT", i).ToString();
                    //搜索该辅助属性对应的FNumber,Id,FDatavalue
                    string sql = @"select a1.FNUMBER a1n,a1.FENTRYID a1f,a2.FNUMBER a2n,a3.FDATAVALUE a3n from T_BAS_ASSISTANTDATAENTRY a1
                            left join T_BAS_ASSISTANTDATA a2 on a1.FID=a2.FID
                            left join T_BAS_ASSISTANTDATAENTRY_L a3 on a1.FENTRYID=a3.FENTRYID
                            where  a2.FNUMBER like 'JGGG' AND a3.FLOCALEID=2052 AND a3.FDATAVALUE like '" + spec + "' ";
                    doc[i] = DBUtils.ExecuteDynamicObject(this.Context, sql, null, null, CommandType.Text, null);
                    DynamicObject material = this.Model.GetValue("FMATERIALID", i) as DynamicObject;
                    if (material != null && doc[i].Count != 0)
                    {                        
                        //获取明细的辅助属性
                        auxObj[i] = this.Model.GetValue("FAUXPROPID", i) as DynamicObject;                        
                        //给辅助属性赋默认值
                        t[i] = new DynamicObject(auxType);
                        t[i]["FNumber"] = doc[i][0]["a1n"].ToString();
                        t[i]["FDataValue"] = doc[i][0]["a3n"].ToString();
                        t[i]["Id"] = doc[i][0]["a1f"].ToString();
                        auxObj[i]["F100001"] = t[i];
                        auxObj[i]["F100001_Id"] = doc[i][0]["a1f"].ToString();                       
                         
                        //这个不要貌似也可以    
                        this.Model.SetValue("FAUXPROPID", auxObj[i], i);                        
                    }
                }

            }
        }

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



赞 23