根据分录下推单据原创
金蝶云社区-小抩
小抩
16人赞赏了该文章 347次浏览 未经作者许可,禁止转载编辑于2024年01月17日 18:09:21

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);

    }

}


赞 16