extends AbstractBillPlugIn implements Plugin {
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
addItemClickListeners("barcontract");//按钮
}
@Override
public void itemClick(ItemClickEvent evt) {
super.itemClick(evt);
String itemKey = evt.getItemKey();
if ("sxrq_barcontract".equals(itemKey)) {
EntryGrid entryGrid = getControl("entryentity");
int[] selectRowsIndex = entryGrid.getSelectRows();
Object id = this.getModel().getValue("id");
List<ListSelectedRow> selectedRows = new ArrayList<>(selectRowsIndex.length);
DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("entryentity");
for (int rowIndex : selectRowsIndex) {
DynamicObject selectEntry = entryEntity.get(rowIndex);
Object selectPkValue = selectEntry.getPkValue();
ListSelectedRow selectedRow = new ListSelectedRow(id);
// 设置需要下推的单据体名:按分录下推时必须设置
selectedRow.setEntryEntityKey("entryentity");
// 设置需要下推的单据体行内码:按分录下推时必须设置
selectedRow.setEntryPrimaryKeyValue(selectPkValue);
selectedRows.add(selectedRow);
}
// 生成下推参数PushArgs
PushArgs pushArgs = new PushArgs();
// 必选,源单标识
pushArgs.setSourceEntityNumber(getModel().getDataEntityType().getName());
// 必选,目标单标识
pushArgs.setTargetEntityNumber("。。。。");
// 可选,传入true,不检查目标单新增权
pushArgs.setHasRight(true);
// 可选,传入目标单主组织默认值
pushArgs.setDefOrgId(0L);
// 可选,传入本次下推使用的转换规则id;传入空值,由系统自动寻找合适的转换规则
pushArgs.setRuleId("");
// 是否输出详细错误报告
pushArgs.setBuildConvReport(true);
// 必选,设置需要下推的源单及分录内码
pushArgs.setSelectedRows(selectedRows);
// 调用下推引擎,下推目标单
ConvertOperationResult pushResult = ConvertServiceHelper.push(pushArgs);
// 判断下推是否成功,如果失败,提炼失败消息输出
if (!pushResult.isSuccess()) {
// 错误摘要
String errMessage = pushResult.getMessage();
String billMessage = "";
if (pushResult.getBillReports().size() > 0) {
for (SourceBillReport billReport : pushResult.getBillReports()) {
if (!billReport.isSuccess()) {
billMessage = billReport.getFailMessage();
}
}
throw new KDBizException("下推失败:" + billMessage);
}
throw new KDBizException("下推失败:" + errMessage);
}
// 获取生成的目标单数据包
MainEntityType targetMainType = EntityMetadataCache.getDataEntityType("。。。。");
List<DynamicObject> targetBillObjs = pushResult.loadTargetDataObjects(new IRefrencedataProvider() {
@Override
public void fillReferenceData(Object[] objs, IDataEntityType dType) {
BusinessDataReader.loadRefence(objs, dType);
}
}, targetMainType);
// 设置保存参数,调用目标单保存服务,保存目标单(保存时自动反写源单)
OperateOption saveOption = OperateOption.create();
// 不执行警告级别校验器
saveOption.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(true));
// 不显示交互提示,自动执行到底
saveOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, String.valueOf(true));
// 全部校验通过才保存
saveOption.setVariableValue(OperateOptionConst.STRICTVALIDATION, String.valueOf(true));
OperationResult saveResult = SaveServiceHelper.saveOperate("。。。。。",
targetBillObjs.toArray(new DynamicObject[0]),
saveOption);
// 判断保存结果
if (!saveResult.isSuccess()) {
// 错误摘要
String errMessage = saveResult.getMessage();
// 演示提取保存详细错误
String detailMessage = "";
if (saveResult.getMessage().isEmpty()) {
for (IOperateInfo errInfo : saveResult.getAllErrorOrValidateInfo()) {
detailMessage = errInfo.getMessage();
}
throw new KDBizException("保存失败:" + detailMessage);
}
throw new KDBizException("保存失败:" + errMessage);
}
// 跳转下推目标单
showTargetBillForm(targetBillObjs);
}
}
private void showTargetBillForm(List<DynamicObject> targetBillObjs) {
if (targetBillObjs.isEmpty()) {
return;
}
BillShowParameter billShowParameter = new BillShowParameter();
billShowParameter.setPkId(targetBillObjs.get(0).getPkValue());
billShowParameter.setFormId("。。。。。。");
billShowParameter.getOpenStyle().setShowType(ShowType.Modal);
this.getView().showForm(billShowParameter);
}
}
推荐阅读