在数据包里添加子单据体行数原创
金蝶云社区-山抹微云
山抹微云
4人赞赏了该文章 1,967次浏览 未经作者许可,禁止转载编辑于2021年10月20日 16:26:47

  在一次开发中,需要操控子单据体,社区里搜查了,发现了好帖子 https://club.kdcloud.com/article/157444044577031936。感谢该老师哈。

  然后,该帖子我看了后,现在是页面插件里为子单据体添加新行,页面插件是有IDataView、IDataModel层的。而我的需求,是要在调度作业里为某个单据的子单据体添加新行并且保存,与之不同,发现相关资料不多,所以我分享下。

在我的元数据里,formId是"kdps_reconcilia_fetch",单据体标识为"kdps_entryentity",子单据体标识为"kdps_detaildetail"。

 大家都知道,获取整个单据数据为 DynamicObject data = BusinessDataServiceHelper.loadSingle(this.id, Meta.fetch."kdps_reconcilia_fetch"),获取整个单据体为 DynamicObjectCollection entryrows = data.getDynamicObjectCollection("kdps_reconcilia_fetch"),获取下表为k的单据体特定一行为DynamicObject entryrow = entryrows.get(k);获取K行单据体下的子单据体为 DynamicObjectCollection detailrows = entryrows.getDynamicObjectCollection("kdps_detaildetail"), 获取下表为p的子单据体特定一行为DynamicObject detailrow = detailrows.get(p)。

 那我是怎么增加子单据体的呢?

 我先创造子单据体DynamicObjectCollection,代码如下

  DynamicObject data =  BusinessDataServiceHelper.newDynamicObject("kdps_reconcilia_fetch");

  SubEntryProp detaildetail = (SubEntryProp) data.getDynamicObjectCollection("kdps_entryentity").getDynamicObjectType().getProperty("kdps_detaildetail") ;

  DynamicObjectType dyType = detaildetail.getDynamicCollectionItemPropertyType();

  DynamicObjectCollection col = new DynamicObjectCollection( dyType  ,detaildetail   );

  col 就是新增的整个单据体了,然后给col增加一行,则代码如下

            DynamicObject detail = col.addNew();

            detail.set("kdps_detailstate" , 值 );

            detail.set("kdps_entryinstid" ,  );

  当然多行的话就多次使用,或者for循环使用也行。

  假设entryrow是目标子单据体需挂上的那行单据体,则可以直接使用语句

entryrow.set("kdps_detaildetail",   this.model.getDynamicObjectCollection());

 以上代码我是在生产环境使用过,如有什么疑问可以留言哈。谢谢大家。

赞 4