金蝶云单据下推,转换规则

这个功能是将某一个单据中的数据下推到另一个单据中。

如果是正常下推是没有问题的,但是在下推过程中会遇到原单据有子单据体,子单据体还要满足某些条件才能下推,下退后,还要获取子单据中基础数据里面的值,有时候基础数据还会有子单据。

这样就会出现很多各种各样的问题,我下面将我遇到的问题记录下来 ,欢迎各位友友,一起补充,毕竟在金蝶云社区确实查不到对应的问题。

问题如下:

一、原单据中子单据体要满足某些条件

只下推采纳的数据。

 有两种方法:

第一种是自己在转换流程中配置。

1.在关联实体的源单关联实体中选择对应的子单据体

 2.然后在数据范围中新增一个条件,把自己的条件写上就行了。

 这个的意思就源单据只有满足这个条件的数据才会下推,前提是只能配置关联实体(步骤一)中的条件。

第二种方法就是自己硬写插件,获取数据然后推送了。

先说优点,就是很容易理解,毕竟对于开发者来说,写后台逻辑还是比较简单的,而且可以避开关联实体,以为如果源单据中有多个子单据体,这样在下推其他子单据体的时候就可能出现实体冲突(这个冲突问题,目前我只知道使用插件解决)。

再说缺点,很显而易见,这样写会很费时间,而且不知道怎么获取源单数据的新手来说根本就没法写。

新建一个java文件,然后写代码就好了,我下面会附上我写的代码并加上详细注解,希望可以有所理解吧。如果实在是理解不了,可以评论和私信我一起谈论哦。


//再插件的时候必须继承AbstractConvertPlugIn 

public class ContractPush extends AbstractConvertPlugIn {

//在这个方法中写上获取数据的路径

    @Override
    public void afterBuildQueryParemeter(AfterBuildQueryParemeterEventArgs e) {
        e.addSrcField("yfgt_customer_name.entry_linkman");
        e.addSrcField("yfgt_customer_name.entry_linkman.contactperson");
        e.addSrcField("yfgt_customer_name.entry_bank.bank");
        e.addSrcField("yfgt_customer_name.entry_bank.bankaccount");
        e.addSrcField("yfgt_adopt_not");
        e.addSrcField("yfgt_customer_name");
        e.addSrcField("yfgt_customer_name.name");
        e.addSrcField("yfgt_customer_name.tx_register_no");
        e.addSrcField("yfgt_customer_name.artificialperson");
        e.addSrcField("yfgt_customer_name.yfgt_contact");
        //e.addSrcField("yfgt_customer_name.entry_address.addfulladdress");
    }

//这里就是详细的取值逻辑了

    @Override
    public void afterCreateTarget(AfterCreateTargetEventArgs e) {

        // 取目标单
        String targetEntityNumber = this.getTgtMainType().getName();   
        
        //取源单数据
        ExtendedDataEntity[] billDataEntitys = e.getTargetExtDataEntitySet().FindByEntityKey(targetEntityNumber);

        for (ExtendedDataEntity billDataEntity : billDataEntitys) {
            // 获取到具体的单据的值
            List<DynamicObject> srcRows = (List<DynamicObject>) billDataEntity
                    .getValue((ConvertConst.ConvExtDataKey_SourceRows));
            
            //定义需要获取的值
            long yfgt_customer_name = 0;
            String contactperson = "";
            long bank = 0;
            String bankaccount = "";
            String yiname = "";
            String yfgt_legal_people = "";
            String yfgt_register_no = "";
            String yfgt_contact = "";
            long reclinkman = 0;
            String yfgt_address = "";

            //循环获取子单据中的数据
            for(DynamicObject dynamicObject : srcRows) {
                //判断是否是自己需要的数据
            	Boolean bool = e.getFldProperties().get("yfgt_adopt_not")
                        .getDTValue(dynamicObject);
            	if (bool) {
            		 // 取单数据
            		reclinkman = e.getFldProperties().get("yfgt_customer_name.entry_linkman")
                            .getDTValue(dynamicObject);
            		yfgt_contact = e.getFldProperties().get("yfgt_customer_name.yfgt_contact")
                            .getDTValue(dynamicObject);
            		yfgt_register_no =  e.getFldProperties().get("yfgt_customer_name.tx_register_no")
                            .getDTValue(dynamicObject);
            		yfgt_legal_people = e.getFldProperties().get("yfgt_customer_name.artificialperson")
                            .getDTValue(dynamicObject);
            		yfgt_customer_name = e.getFldProperties().get("yfgt_customer_name")
                            .getDTValue(dynamicObject);
            		yiname = e.getFldProperties().get("yfgt_customer_name.name")
                            .getDTValue(dynamicObject);
                    contactperson = (String) e.getFldProperties().get("yfgt_customer_name.entry_linkman.contactperson")
                            .getDTValue(dynamicObject);
                    bank = e.getFldProperties().get("yfgt_customer_name.entry_bank.bank").getDTValue(dynamicObject);
                    bankaccount = (String) e.getFldProperties().get("yfgt_customer_name.entry_bank.bankaccount")
                            .getDTValue(dynamicObject);
				}
            }

           

            // 赋值
            billDataEntity.setValue("reclinkman_id", reclinkman);
            billDataEntity.setValue("phone1st", yfgt_contact);
            billDataEntity.setValue("yfgt_contact", yfgt_contact);
            billDataEntity.setValue("yfgt_register_no", yfgt_register_no);
            billDataEntity.setValue("yfgt_legal_people", yfgt_legal_people);
            billDataEntity.setValue("customer_id", yfgt_customer_name);
            //billDataEntity.setValue("reclinkman", contactperson);
            billDataEntity.setValue("party1st", yiname);
            billDataEntity.setValue("yfgt_bank_id", bank);
            billDataEntity.setValue("yfgt_bankaccount", bankaccount);
            billDataEntity.setValue("contactperson1st", contactperson);
        }
    }

}

将写好的插件配置到此处就好。

二、需要获取原单据中的基础数据中的数据

第一种方法就是自己在转化规则中配置。

1.在源单据中配置,在引用属性中配置上自己需要的属性。

 

 2.转换规则----字段映射----源单字段中就能找到了

 第二种方法就是自己写插件

方法给上面的插件写法一样;

例如:要是使用基础资料用户(user)下面的性别(age),获取数据的路径就是(user.age)

注意:要是需要获取子单据体的话,就是(user.子单据体标识.属性)。。。。这个子单据体只能是表单形式的,并且要存在表名。以为是通过数据库进行查询的。如果子单据体是列表的话,好像是只能获取第一行,具体的没整明白。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
金蝶BOS(Kingdee Business Operation System)是一款企业管理软件,用于帮助企业实现业务流程自动化和信息化管理。在金蝶BOS中,单据审核是一项重要的功能,它用于确保企业业务流程的合规性和准确性。 金蝶BOS的单据审核代码是指在进行单据审核时所编写的相关程序代码。这些代码通常涉及以下几个方面: 1. 单据类型定义:首先需要定义各类单据的业务类型,如销售订单、采购订单、入库单等。每类单据需要定义相应的审核规则和审核流程。 2. 审核规则设置:根据企业的实际需求,设置适当的审核规则。例如,可以设置某些单据只需一级审核,而另一些单据需要多级审核。 3. 审核流程设计:为每种单据类型设计相应的审核流程。审核流程包括审核人员的设定、审核顺序的确定以及审核人员权限的控制等。这些流程需要根据企业内部的工作流程进行定制化设置。 4. 审核人员权限管理:根据企业的组织结构和职务权限,设定每个审核人员的审核权限。例如,销售部门的员工只能审核与销售相关的单据,而财务部门的员工可以审核与财务相关的单据。 5. 审核结果处理:在审核过程中,需要记录每个审核人员的审核结果,包括审核通过、审核未通过等。审核结果可用于后续单据操作和数据跟踪。 通过以上的步骤和相关代码的编写,金蝶BOS可以帮助企业实现单据审核的自动化和规范化。这将提高企业的运行效率和管理水平,减少出错率,确保企业的业务流程顺畅运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值