34.2、动态表单插件,返回数据,代码原创
金蝶云社区-林荫大道cc身份
林荫大道cc
14人赞赏了该文章 10138次浏览 未经作者许可,禁止转载编辑于2020年07月11日 17:10:08
封面

使用上一节33代码


34.1 界面



1、修改ClassOpen.cs 类的代码,动态接收数据


                
                
                //打开的动态表单,加载进来
                //2种写法,一种直接弹窗,另外一种动态接收数据,返回的数据都放在 result上面
                //动态取值
                //收类DyFormOutBill,count ==1,把整个数据返回这里主表
                
                this.View.ShowForm(formPa, delegate(FormResult result)
                {
                    //定义接收值,转换成(DynamicObjectCollection)类型
                    DynamicObjectCollection returnData = (DynamicObjectCollection)result.ReturnData;
                    
                    //如果不为空,执行
                    if(returnData !=null)
                    {
                        //把整个单据,拆分成一行一行,0代表只返回一行
                        DynamicObject entryRow = returnData[0];
                        
                        //把接收回来的5个值,赋值
                        this.View.Model.SetValue("FMaterailNo", entryRow["FMaterailNo"]);
                        this.View.Model.SetValue("FMaName", entryRow["FMaterailName"]);
                        this.View.Model.SetValue("FQty1", entryRow["FQty"]);
                        this.View.Model.SetValue("FOutBillNo", entryRow["FOutBillNo"]);
                        this.View.Model.SetValue("FOutID", entryRow["FID"]);
                    }
                
                });

image.png


                this.View.ShowForm(formPa, delegate(FormResult result)
                { 
                
                });

image.png



2、修改 DyFormOutBill.cs的代码,判断是否选中1行数据,返回值给上面ClassOpen.cs 类

   
        //点击按钮事件
        //1. 获取整个查看销售出库列表
        //2. 循环判断,是否选中复选框,行
        //3. new一个新的方法 dymat
        //4. 如果值没有问题,赋值上去,做一个动态加载
        //5. 如果选中一行count ==1,把整个数据返回主表,类ClassOpen里this.View.ShowForm(formPa, delegate(FormResult result)
        
        public override void BarItemClick(BOS.Core.DynamicForm.PlugIn.Args.BarItemClickEventArgs e)
        {   //定义一个计数器
            int count = 0;
            
            base.BarItemClick(e);
            
            //当点击返回数据的按钮,如果值没有问题,赋值上去
            if(e.BarItemKey.Equals("tbReturnData"))
            {
                //获取动态表单的值
                //定义一个函数
                //获取动态表单的单据体 F_YDIE_Entity
                Entity entity = this.View.BillBusinessInfo.GetEntity("F_YDIE_Entity");
                //转换成单据体的列表集合,一行一行的
                DynamicObjectCollection entityDataObjoct = this.View.Model.GetEntityDataObject(entity);
                
                //定义一个接收dymat
                DynamicObjectCollection dymat = new DynamicObjectCollection(entity.DynamicObjectType, null);
                
                foreach(DynamicObject current in entityDataObjoct)
                {   //复选框FCheckBox,转换成大写
                    //true代表已勾选复选框
                    if(current["FCheckBox"].ToString().ToUpper() =="TRUE")
                    {
                        dymat.Add(current);
                        count++;
                    }
                }
                if(count == 0)
                {
                    this.View.ShowMessage("请选择数据行");
                    return;
                }
                if(count >1)
                {
                    this.View.ShowMessage("只能选择一行");
                    return;
                }
                if(count ==1)
                {//返回主表界面
                    this.View.ReturnToParentWindow(dymat);
                    this.View.Close();
                }
            }
        }

image.png



3、

总结:打开动态表单,有2种方法。

      一种是直接打开动态表单,另外一张是本节介绍,二重重载;
      
      this.View.ShowForm(formPa, delegate(FormResult result)
      
      然后是接收它的值 result;
      
      然后判断返回值 this.View.ReturnToParentWindow(dymat);




4、最终效果,重新打开销售订单,点按钮,查看出库信息,选择一行数据,点返回,返回数据到新增的字段上面;


image.png



总目录链接

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




赞 14