金蝶云单据下推,转换规则-创新互联

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

为平江等地区用户提供了全套网页设计制作服务,及平江网站建设行业解决方案。主营业务为做网站、网站设计、平江网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

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

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

问题如下: 一、原单据中子单据体要满足某些条件

只下推采纳的数据。

有两种方法:

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

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) {
            // 获取到具体的单据的值
            ListsrcRows = (List) 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.子单据体标识.属性)。。。。这个子单据体只能是表单形式的,并且要存在表名。以为是通过数据库进行查询的。如果子单据体是列表的话,好像是只能获取第一行,具体的没整明白。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


标题名称:金蝶云单据下推,转换规则-创新互联
新闻来源:http://scyanting.com/article/cogejd.html