电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

源单在审核通过后自动生成目标单

来源:金蝶云社区作者:金蝶2024-09-237

源单在审核通过后自动生成目标单

需求背景

源单需要在审核通过后自动生成下游单据。

这个需求,正常情况下,可以通过配置实现,无需开发代码,配置方法: 修改源单的审核操作,配置操作服务,添加自动下推服务。

某些特殊情况,无法通过配置实现自动下推,那么就得自行开发代码,调用单据转换服务,实现下推。

本章介绍如何调用下推服务,下推并保存目标单,然后获取下推生成的目标单,执行提交、审核操作;

案例设计

假设有源单,标识为demo_bill1;有两条数据,内码为10001、10002;

需要自动生成目标单,标识demo_bill2;

源单和目标单之间,已经建立并启用了转换规则,关联主实体设为单据体1(entryentity),并配置好了字段映射关系。

相关知识点

实现上述需求,需要用到如下类:

  • PushArg:下推参数,允许指定好源单、目标单标识,源单需要下推的数据行,以及下推时采用的转换规则等;

  • ConvertServiceHelper:单据转换帮助类,提供push,pushAndSave方法实现下推;

  • ConvertOperateResult:下推服务返回的结果,包含生成的目标单数据包,或目标单内码,以及下推失败的错误信息;

  • OperateionServiceHelper:操作服务帮助类,可以完成目标单的提交、审核等操作;

示例代码

示例代码逻辑思路:

  • 包装下推参数PushArgs

  • 调用下推引擎,下推并保存目标单,获取下推结果

  • 判断下推结果

  • 调用提交操作服务,提交目标单;获取提交结果

  • 判断提交结果

示例代码(仅用于演示如何调用下推、保存、提交等服务,未实际跑通):

package kd.bos.plugin.sample.bill.billconvert.bizcase;

import java.util.ArrayList;
import java.util.List;

import kd.bos.data.BusinessDataReader;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.metadata.IDataEntityType;
import kd.bos.entity.EntityMetadataCache;
import kd.bos.entity.MainEntityType;
import kd.bos.entity.botp.runtime.ConvertOperationResult;
import kd.bos.entity.botp.runtime.PushArgs;
import kd.bos.entity.botp.runtime.SourceBillReport;
import kd.bos.entity.datamodel.IRefrencedataProvider;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.operate.OperateOptionConst;
import kd.bos.entity.operate.result.IOperateInfo;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.exception.KDBizException;
import kd.bos.servicehelper.botp.ConvertServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;

/**
 * 示例代码:自动生成目标单
 * 
 * @author rd_johnnyding
 *
 */
public class AutoPushSample {

    private final static String DEMO_BILL1 = "demo_bill1";
    private final static String DEMO_BILL2 = "demo_bill2";

    /**
     * 演示自动生成并提交目标单
     */
    @SuppressWarnings("unused")
    public void autoPushAndSubmit() {

        // 创建下推参数,把源单demo_bill1的两张单据10001, 10002,下推生成目标单demo_bill2
        PushArgs pushArgs = new PushArgs();
        pushArgs.setSourceEntityNumber(DEMO_BILL1);        // 必选,源单标识
        pushArgs.setTargetEntityNumber(DEMO_BILL2);        // 必选,目标单标识
        pushArgs.setHasRight(true);        // 可选,传入true,不检查目标单新增权
        pushArgs.setAppId("");                // 可选,传入目标单验权使用的应用编码
        pushArgs.setDefOrgId(0L);            // 可选,传入目标单主组织默认值
        pushArgs.setRuleId("");                // 可选,传入本次下推使用的转换规则id;传入空值,由系统自动寻找合适的转换规则
        pushArgs.setBuildConvReport(true);    // 是否输出详细错误报告

        // 设置需要下推的单据,或分录行
        List<ListSelectedRow> selectedRows = new ArrayList<>();
        ListSelectedRow srcBill1 = new ListSelectedRow(10001L);
        srcBill1.setEntryEntityKey("");            // 可选,如按分录行下推必填:填单据体标识如entryentity
        srcBill1.setEntryPrimaryKeyValue(0L);    // 可选,如按分录行下推必填:填分录行内码如10001
        selectedRows.add(srcBill1);

        ListSelectedRow srcBill2 = new ListSelectedRow(10002L);
        selectedRows.add(srcBill2);

        pushArgs.setSelectedRows(selectedRows);        // 必选,设置需要下推的源单及分录内码

        // 调用下推引擎,下推目标单
        ConvertOperationResult pushResult = ConvertServiceHelper.push(pushArgs);

        // 判断下推是否成功,如果失败,提炼失败消息输出
        if (!pushResult.isSuccess()) {
            String errMessage = pushResult.getMessage();    // 错误摘要
            for(SourceBillReport billReport : pushResult.getBillReports()) {
                // 演示如何提取各单错误报告
                if (!billReport.isSuccess()) {
                    String billMessage = billReport.getFailMessage();
                }
            }
            throw new KDBizException("下推失败:" + errMessage);
        }

        // 获取生成的目标单数据包
        Mai

源单在审核通过后自动生成目标单

需求背景源单需要在审核通过后自动生成下游单据。这个需求,正常情况下,可以通过配置实现,无需开发代码,配置方法: 修改源单的审核操作...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信