37、动态表单插件,CreateNewData事件,构造数据包原创
金蝶云社区-林荫大道cc
林荫大道cc
9人赞赏了该文章 6418次浏览 未经作者许可,禁止转载编辑于2020年07月11日 16:52:44
封面



使用上一节36代码




1、前面32.4使用OnLoad构造数据包,本节使用CreateNewData构造数据包


image.png

        public override void CreateNewData(BOS.Core.DynamicForm.PlugIn.Args.BizDataEventArgs e)
        {
            base.CreateNewData(e);
            
            FBillNo = this.View.OpenParameter.GetCustomParameter("FBillNo").ToString();
 string sql = string.Format(@"/*dialect*/select t1.FID,t2.FBILLNO,t3.FNUMBER,t4.FNAME,t1.FREALQTY,FSOORDERNO from T_SAL_OUTSTOCKENTRY t1 inner join T_SAL_OUTSTOCK t2 on t1.FID=t2.FID
                                        inner join T_SAL_OUTSTOCKENTRY_R t5 on t1.FENTRYID=t5.FENTRYID
                                        left join T_BD_MATERIAL t3 on t1.FMATERIALID=t3.FMATERIALID
                                        left join T_BD_MATERIAL_L t4 on t1.FMATERIALID=t4.FMATERIALID and t4.FLOCALEID=2052
                                        where FSOORDERNO='{0}'"
                                        , FBillNo);
            dt = DBUtils.ExecuteDataSet(this.Context, sql).Tables[0];
            
            if (dt.Rows.Count > 0)
            {
                //创建界面需要的数据对象
                e.BizDataObject = new DynamicObject(this.View.OpenParameter.FormMetaData.BusinessInfo.GetDynamicObjectType());
                
                //获取该业务对象的数据包
                BusinessInfo info = this.View.OpenParameter.FormMetaData.BusinessInfo;
                
                //获取整个单据体信息
                Entity entity = info.GetEntity("F_YDIE_Entity");
                Field FOutBillNo = info.GetField("FOutBillNo");
                Field FMaterailNo = info.GetField("FMaterailNo");
                Field FMaterailName = info.GetField("FMaterailName");
                Field FQty = info.GetField("FQty");
                Field FID = info.GetField("FID");
                
                //定义单据集合
                DynamicObjectCollection rows = (DynamicObjectCollection)entity.DynamicProperty.GetValue(e.BizDataObject);
                
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    DynamicObject row = new DynamicObject(entity.DynamicObjectType);
                    
                    //赋值方法2 DynamicProperty.SetValue
                    entity.SeqDynamicProperty.SetValue(row, i + 1);
                    info.GetField("FOutBillNo").DynamicProperty.SetValue(row, dt.Rows[i]["FBILLNO"].ToString());
                    FMaterailNo.DynamicProperty.SetValue(row, dt.Rows[i]["FNUMBER"].ToString());
                    FMaterailName.DynamicProperty.SetValue(row, dt.Rows[i]["FNAME"].ToString());
                    FQty.DynamicProperty.SetValue(row, dt.Rows[i]["FREALQTY"].ToString());
                    FID.DynamicProperty.SetValue(row, dt.Rows[i]["FID"].ToString());
                    rows.Add(row);
                }
            }
        }


2、注释上一节 OnLoad方法


image.png


CreateNewData事件


触发时机

View已完成初始化,开始进入Model数据对象(Model.DataObject)初始化

 

应用场景

插件自定义Model.DataObject数据包,插件如构建此数据包,即忽略平台构建默认数据包

 

关键字

新增 默认值 动态

 

备注

本事件只有在新增表单情况下才会触发,如加载已存在的单据,不触发此事件





3、最终效果,打开销售订单,点按钮,查看销售出库单,和前面32.4一样的效果



总目录链接

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



赞 9