通过ID动态获取单据对象,核心代码如下:
IDynamicObject instance = DynamicObjectFactory.getRemoteInstance(); //用于动态获取单据对象
IObjectValue objectValue = instance.getValue(emsUuid.getType(), new ObjectUuidPK(emsUuid), selector); //报账单对象
此方式获取的单据对象可以看做一个Map,可以通过键值对来获取对应属性值,键对应实体中是属性。
/**
* 从系统拆分单据时,根据单据ID动态获取对象,进而为拆分单赋值
* @param billModel 拆分单对象
* @param emsBillId 单据ID,可能来源于22种单据之一
*/
private void createNewObject(SplitBillInfo billModel, String emsBillId) {
SelectorItemCollection selector = new SelectorItemCollection();
selector.add(new SelectorItemInfo("*"));
selector.add(new SelectorItemInfo("applier.id")); //申请人
selector.add(new SelectorItemInfo("applier.number"));
selector.add(new SelectorItemInfo("applier.name"));
selector.add(new SelectorItemInfo("entrys.*"));
selector.add(new SelectorItemInfo("entrys.debitAccount.number")); //借方科目
selector.add(new SelectorItemInfo("entrys.debitAccount.name"));
selector.add(new SelectorItemInfo("entrys.creditAccount.number")); //贷方科目
selector.add(new SelectorItemInfo("entrys.creditAccount.name"));
selector.add(new SelectorItemInfo("entrys.costOrg.id")); //收入归属部门
selector.add(new SelectorItemInfo("entrys.costOrg.number"));
selector.add(new SelectorItemInfo("entrys.costOrg.name"));
selector.add(new SelectorItemInfo("entrys.costOrg.longNumber"));
try {
BOSUuid emsUuid = BOSUuid.read(emsBillId); //emsBillId可能来源于22种单据之一
IDynamicObject instance = DynamicObjectFactory.getRemoteInstance(); //用于动态获取单据对象
IObjectValue objectValue = instance.getValue(emsUuid.getType(), new ObjectUuidPK(emsUuid), selector); //单据对象
IObjectCollection entrys = (IObjectCollection) objectValue.get("entrys"); //获取分录
accounts = AccountFactory.getRemoteInstance().getCurrAccounts(); //获取当前启用的损益科目
setBillValue(billModel, objectValue, emsBillId); //单据头设置默认值
setBillEntry(billModel, entrys, emsBillId); //分录设置默认值
} catch (Exception e) {
e.printStackTrace();
}
}