这个功能是将某一个单据中的数据下推到另一个单据中。
为平江等地区用户提供了全套网页设计制作服务,及平江网站建设行业解决方案。主营业务为做网站、网站设计、平江网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!如果是正常下推是没有问题的,但是在下推过程中会遇到原单据有子单据体,子单据体还要满足某些条件才能下推,下退后,还要获取子单据中基础数据里面的值,有时候基础数据还会有子单据。
这样就会出现很多各种各样的问题,我下面将我遇到的问题记录下来 ,欢迎各位友友,一起补充,毕竟在金蝶云社区确实查不到对应的问题。
问题如下: 一、原单据中子单据体要满足某些条件只下推采纳的数据。
有两种方法:
第一种是自己在转换流程中配置。
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元起,快前往官网查看详情吧
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款