插件案例 —— 单据体的赋值技巧原创
金蝶云社区-MiLai
MiLai
16人赞赏了该文章 3,280次浏览 未经作者许可,禁止转载编辑于2020年08月17日 10:35:51


案例背景


根据某个查询结果,批填分录的情况时常存在,那么怎么快速批填,又标准呢?



代码示例


1.分录构建


界面填充,有视图的情况下,借助视图的相关功能,快速填写单据体,这种方法简单粗暴,对于有界面的情况下,快速填写实体有帮助,但是有的时候存在模型交互情况,需要添加 this.View.Mode.BeginInit()和this.View.Model.EndInit()语句进行初始化构造。

//清空分录包
this.View.Model.DeleteEntryData("分录Key");
//获取实体信息
var rEntity = this.View.Model.BusinessInfo.GetEntity("分录Key");
int index = 0;
foreach (var item in invStock)
{
      //新增行
    this.View.Model.CreateNewEntryRow(rEntity, index);
    //按分录填值
    this.View.Model.SetValue("行字段", Convert.ToInt64(item["FMATERIALID"]), index);
    this.View.Model.SetValue("行字段", Convert.ToInt64(item["FAUXPROPID"]), index);
    index++;
}
//刷新分录
this.View.UpdateView("F_QPOV_Entity");


2. 动态包属性构建

对于动态表单来说,数据源是完全不确定的情况下,初始化取数过后,在创建数据包的时候,构建业务数据包。缺点,对于基础资料类的数据,仍然需要使用SetValue,或者需要LoadReference,否则看到的基础资料是空值。


public override void CreateNewData(BizDataEventArgs e)
{
     base.CreateNewData(e);
     if (lstProxy == null || lstProxy.Count<= 0)
     {
          return;
     }
     //动态对象类型
     var billType = this.View.Model.BusinessInfo.GetDynamicObjectType();
     //实体包
     DynamicObject billObj = new DynamicObject(billType);
     //Entity
     var entryEntity = this.View.Model.BusinessInfo.GetEntryEntity("分录Key");
     foreach (var item in lstProxy)
     {
         var rowObj = new DynamicObject(entryEntity.DynamicObjectType);
         rowObj["行字段"] = item.Number;
         rowObj["行字段"] = item.Name;
         //对属性包填值
         entryEntity.DynamicProperty.GetValue<DynamicObjectCollection>(billObj).Add(rowObj);
     }
     给业务包赋值
     e.BizDataObject = billObj;
}


3. 数据包填充



图标赞 16
16人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!