表单上按子单据体选中行下推

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

表单上按子单据体选中行下推

关键词:子单据体、下推

一、需求

采购申请单上按子单据体(物料详情)选中行下推生成采购订单的数据,并且下推后自动打开生成的采购订单的数据。

二、思路与方案

  • 目前列表支持选中分录行数据即可按选中行下推。

  •  如果采购申请单表单上要按子单据体的选中行下推,只能通过代码实现。

三、实现过程

1、配置转换规则的关联实体为子单据体

错误的关联实体配置:如果源单关联实体配置成单据体-子单据体,固定只能下推一行子单据体的数据到目标单

2、代码实现按子单据体选中行数据下推

public class ReqBillPlugin extends AbstractBillPlugIn implements Plugin, RowClickEventListener, EntryGridSetRowDataListener {
    @Override
    public void registerListener(EventObject e) {
        super.registerListener(e);
    }
@Override
public void itemClick(ItemClickEvent evt) {
    if (evt.getItemKey().equals("kdec_pushselect")){
        //获取当前单据数据(包含单据体)
        DynamicObject dataEntity = this.getModel().getDataEntity(true);
        Long pkValue = (Long) dataEntity.getPkValue();
        if (pkValue!=0){
            EntryGrid grid = this.getControl("kdec_reqentryentity");
            int focusRow = grid.getEntryState().getFocusRow();
            if (focusRow>0) {
                DynamicObjectCollection cols = dataEntity.getDynamicObjectCollection("kdec_reqentryentity");
                DynamicObject entry = cols.get(focusRow);
                DynamicObjectCollection subCols = entry.getDynamicObjectCollection("kdec_matersubentryentity");
                EntryGrid subGrid = this.getControl("kdec_matersubentryentity");
                int[] subSelectedRows = subGrid.getEntryState().getSelectedRows();
                List<ListSelectedRow> selectedRows = new ArrayList<>(subSelectedRows.length);
                for(int index:subSelectedRows){
                    ListSelectedRow selectedRow = new ListSelectedRow(pkValue);
                    // 设置需要下推的单据体(子单据体)名:按分录下推时必须设置
                    selectedRow.setEntryEntityKey("kdec_reqentryentity");
                    selectedRow.setSubEntryEntityKey("kdec_matersubentryentity");
                    selectedRow.setEntryPrimaryKeyValue(entry.getPkValue());
                    selectedRow.setSubEntryPrimaryKeyValue(subCols.get(index).getPkValue());
                    selectedRows.add(selectedRow);
                }

                // 生成下推参数PushArgs
                PushArgs pushArgs = new PushArgs();
                // 必选,源单标识
                pushArgs.setSourceEntityNumber("kdec_reqbill");
                // 必选,目标单标识
                pushArgs.setTargetEntityNumber("kdec_ordbill");
                // 可选,传入true,不检查目标单新增权
                pushArgs.setHasRight(true);
                // 可选,传入目标单验权使用的应用编码
                pushArgs.setAppId("");
                // 可选,传入目标单主组织默认值
                pushArgs.setDefOrgId(0L);
                // 可选,传入本次下推使用的转换规则id;传入空值,由系统自动寻找合适的转换规则
                pushArgs.setRuleId("");
                // 是否输出详细错误报告
                pushArgs.setBuildConvReport(true);
                // 必选,设置需要下推的源单及分录内码
                pushArgs.setSelectedRows(selectedRows);

                // 调用下推引擎,下推目标单
                ConvertOperationResult pushResult = ConvertServiceHelper.pushAndSave(pushArgs);
                Set<Object> targetBillIds = pushResult.getTargetBillIds();
                if (targetBillIds.isEmpty()){
                    String message = pushResult.getMessage();
                    if (StringUtils.isEmpty(message)){
                        if (pushResult.getBillReports()!=null&&!pushResult.getBillReports().isEmpty()){
                            message=pushResult.getBillReports().get(0).getFailMessage();
                        }
                    }
                    getView().showErrorNotification(message);
                }else {
                    BillShowParameter billShowParameter = new BillShowParameter();
                    billShowParameter.setPkId(targetBillIds.stream().iterator().next());
                    billShowParameter.setFormId("kdec_ordbill");
                    billShowParameter.getOpenStyle().setShowType(ShowType.Modal);
                    getView().showForm(billShowParameter);

                }
            }

        }else{
            getView().showTipNotification("请先保存单据");
        }

    }
    super.itemClick(evt);
}
}

四、效果图

采购申请单选择子单据体(物料详情)第二行和第四行下推生成采购订单数据,如下图。

五、开发环境版本

V6.0.6

六、参考资料

开发平台

学习成长中心


表单上按子单据体选中行下推

关键词:子单据体、下推一、需求采购申请单上按子单据体(物料详情)选中行下推生成采购订单的数据,并且下推后自动打开生成的采购订单的数...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息