在一次开发中,需要操控子单据体,社区里搜查了,发现了好帖子 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());
以上代码我是在生产环境使用过,如有什么疑问可以留言哈。谢谢大家。
推荐阅读