因为项目中用到了动态创建子单据行,走了不少弯路,以此记录学习。如有不对欢迎指出,互相学习。
方式一:
/**
* 创建子单据体数据
* @param parentRow 父单据体指定行
* @param parentDyn 父单据体行数据
*/
private void createSubEntity(int parentRow, DynamicObject parentDyn) {
//获取子单据体要显示的数据
DynamicObject[] subEntityList = getSubEntityList(parentDyn);
//获取父单据体当前行数据
DynamicObject rsp_entryentity = this.getModel().getEntryRowEntity("rsp_entryentity", parentRow);
//获取父单据体数据包中子单据体集合
DynamicObjectCollection rsp_subentryentity = rsp_entryentity.getDynamicObjectCollection("rsp_subentryentity");
for (int i = 0; i < subEntityList.length; i++) {
DynamicObject resPoool = subEntityList[i];// 获取要赋值的数据
DynamicObject dynamicObject = rsp_subentryentity.addNew();//子单据体新增一行
//放弃下面这种方式,因为基础资料属性显示不正常,目前没有找到解决方式
//dynamicObject.set("rsp_person",resPoool.getDynamicObject("rsp_supperson"));
//采用setValue()赋值方式
this.getModel().setValue("rsp_person", resPoool.getDynamicObject("rsp_supperson"), rsp_subentryentity.size()-1,parentRow);
}
this.getView().updateView("rsp_subentryentity");//更新子单据体View
}
目前发现这种方式存在的问题:
当子单据体中有默认值时,不能自动带出,原因:通过后台创建数据方式,不会触发前端缺省值
方式二:
/**
* 创建子单据体数据
* @param parentRow 父单据体指定行
* @param parentDyn 父单据体行数据
*/
private void createSubEntity(int parentRow, DynamicObject parentDyn) {
//获取子单据体要显示的数据
DynamicObject[] subEntityList = getSubEntityList(parentDyn);
IEntryOperate entryOperate = this.getModel();
entryOperate.setEntryCurrentRowIndex("rsp_entryentity", parentRow);// 指定父单据体行号 (必须)
for (int i = 0; i < subEntityList.length; i++) {
int subRow = entryOperate.createNewEntryRow("rsp_subentryentity");//子单据体创建新一行数据
DynamicObject resPoool = subEntityList[i];// 获取要赋值的数据
//赋值
this.getModel().setValue("rsp_person", resPoool.getDynamicObject("rsp_supperson"), subRow,parentRow);
}
this.getView().updateView("rsp_subentryentity");//更新子单据体View
}
推荐阅读