背景说明:
K/3 Cloud 不支持在下推时,同时携带两个单据体的数据;
因此,需要在转换规则上,配置好携带主单据体;
而辅助单据体的数据,需要在插件中自行携带;

案例说明:
本案例,设计了两张单据A和B,都有两个单据体,主单据体为FEntity,第二单据体为FEntity2;
主单据体的字段,已经配置的单据转换规则 - 字段映射关系;
而第二单据体,需要通过插件携带;
第二单据体仅有一个文本字段F_JD_Text;

特别说明:
本案例不适用于同一张源单同时下推为多张目标单的情况:
这样情况是分单了,而第二单据体,无法对应拆分;

示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.ConvertElement;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.FormElement;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.App;namespace JDSample.ServicePlugIn.BillConvert
{/// <summary>/// 携带其他单据体/// </summary>[Description("携带其他单据体")]public class S151105TakeOtherEntryConvPlug : AbstractConvertPlugIn{/// <summary>/// 主单据体的字段携带完毕,与源单的关联关系创建好之后,触发此事件/// </summary>/// <param name="e"></param>public override void OnAfterCreateLink(CreateLinkEventArgs e){// 预先获取一些必要的元数据,后续代码要用到:// 源单第二单据体Entity srcSecondEntity = e.SourceBusinessInfo.GetEntity("FEntity2");// 目标单第一单据体Entity mainEntity = e.TargetBusinessInfo.GetEntity("FEntity");// 目标单第二单据体Entity secondEntity = e.TargetBusinessInfo.GetEntity("FEntity2");// 目标单关联子单据体Entity linkEntity = null;Form form = e.TargetBusinessInfo.GetForm();if (form.LinkSet != null && form.LinkSet.LinkEntitys != null&& form.LinkSet.LinkEntitys.Count != 0){linkEntity = e.TargetBusinessInfo.GetEntity(form.LinkSet.LinkEntitys[0].Key);}if (linkEntity == null){return;}// 获取生成的全部下游单据ExtendedDataEntity[] billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead");// 对下游单据,逐张单据进行处理foreach (var item in billDataEntitys){DynamicObject dataObject = item.DataEntity;// 定义一个集合,用于收集本单对应的源单内码HashSet<long> srcBillIds = new HashSet<long>();// 开始到主单据体中,读取关联的源单内码DynamicObjectCollection mainEntryRows = mainEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;foreach (var mainEntityRow in mainEntryRows){DynamicObjectCollection linkRows = linkEntity.DynamicProperty.GetValue(mainEntityRow) as DynamicObjectCollection;foreach (var linkRow in linkRows){long srcBillId = Convert.ToInt64(linkRow["SBillId"]);if (srcBillId != 0&& srcBillIds.Contains(srcBillId) == false){srcBillIds.Add(srcBillId);}}}if (srcBillIds.Count == 0){continue;}// 开始加载源单第二单据体上的字段// 确定需要加载的源单字段(仅加载需要携带的字段)List<SelectorItemInfo> selector = new List<SelectorItemInfo>();selector.Add(new SelectorItemInfo("F_JD_Text"));// TODO: 继续添加其他需要携带的字段,示例代码略// 设置过滤条件string filter = string.Format(" {0} IN ({1}) ",e.SourceBusinessInfo.GetForm().PkFieldName,string.Join(",", srcBillIds));OQLFilter filterObj = OQLFilter.CreateHeadEntityFilter(filter);// 读取源单IViewService viewService = ServiceHelper.GetService<IViewService>();var srcBillObjs = viewService.Load(this.Context,e.SourceBusinessInfo.GetForm().Id,selector,filterObj);// 开始把源单单据体数据,填写到目标单上DynamicObjectCollection secondEntryRows = secondEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;secondEntryRows.Clear();    // 删除空行foreach (var srcBillObj in srcBillObjs){DynamicObjectCollection srcEntryRows = srcSecondEntity.DynamicProperty.GetValue(srcBillObj) as DynamicObjectCollection;foreach (var srcEntryRow in srcEntryRows){// 目标单添加新行,并接受源单字段值DynamicObject newRow = new DynamicObject(secondEntity.DynamicObjectType);secondEntryRows.Add(newRow);// 填写字段值newRow["F_JD_Text"] = srcEntryRow["F_JD_Text"];// TODO: 逐个填写其他字段值,示例代码略}}}}}
}

转载于:https://www.cnblogs.com/fyq891014/p/8698053.html

如何通过插件携带第二个单据体到下游单据相关推荐

  1. EAS判断单据是否存在下游单据

    /** 单据是否存在下游单据*/@Overrideprotected boolean _isExistDownstreamBill(Context ctx, String id) throws BOS ...

  2. NC65【单据转换规则】新增下游单据类型,下游单据生成仅支持后台(以【到货单 23】to【其他入库单 4A】为例)

    1.新增到货单下游单据类型 UPDATE BD_BILLTYPE SET FORWARDBILLTYPE = FORWARDBILLTYPE || ',4A' WHERE PK_BILLTYPECOD ...

  3. BOS金蝶云星空:表单插件设置单据体背景色

    一.效果图: 备注:只适用于只读列 二.代码案例: 自定义单据提附加背景色方法: /// /// 设置单据体背景颜色 /// /// 实体 /// 行 /// 字段 /// 颜色代码 private ...

  4. 在金蝶云星空中获取单据体信息的两种方法

    近日在学习星空产品的时候发现了两种获取单据体数据包方法,然后调试了一下,发现两种方法获取的信息都是一样的,特此记录一下. 第一种: Entity entity = this.View.BillBusi ...

  5. 单据体新增界面,单价与金额字段自动进行合计

    打开bos设计器相应的单据,选中单据体,找到"分组列信息"属性,在"分组合计列"页签加入相应的合计自动,并设置为求和,保存即可! 转载于:https://blo ...

  6. 金蝶k3单据编码规则_金蝶K3 Wise 用SQL生成单号(单据编号)及单据内码(单据ID) -...

    一生成各种单据的编号 详细实现过程参见存储过程p_BM_GetBillNo ICBillNo表存放所有单据的编码信息,其中FBillID用于p_BM_GetBillNo的第一个参数 以采购申请单为例, ...

  7. 金蝶K3 Wise 用SQL生成单号(单据编号)及单据内码(单据ID)

    很多开发会自己用数据库跟踪去分析实现原理或步进脚本其实大可不必这么麻烦, 因金蝶K3Wise后台数据库本身有自就有已写好的存储过程,我们可以直接调用的. 1.生成单据编号 --存储过程 p_BM_Ge ...

  8. 金蝶K3销售订单与下游单据后台解耦

    需求:用户已经将销售订单审核并下推生成生产任务单,目前要求删单.系统提示已存在关联的单据数据,不允许删除.原本想从生产任务单环节进行逐一删单处理,发现生产任务单已经下推生产投料变更单,已经无法删除. ...

  9. 金蝶云星空与金蝶云星空对接集成逐个单据查询打通审核单据

    金蝶云星空与金蝶云星空对接集成逐个单据查询打通审核单据 对接系统金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践,面向事业部制.多地点.多工厂等运营协同与管控型企业及 ...

最新文章

  1. mac怎么用python3.0_怎么在mac中使用python
  2. 缓存Cookie、session、localStorage的区别
  3. Python基础教程:使用dict和set
  4. phpnow mysql_使用PHPnow搭建本地PHP环境+创建MySQL数据库 | 倡萌的自留地
  5. php round half even,PHP round( )用法及代碼示例
  6. 燕山大学计算机专业研究生怎么样,求助大家!重庆邮电大学计算机专业的研究生值得一读吗?...
  7. Kinect开发笔记之八C#实现Kinect声音的追踪
  8. 80岁COBOL码农:扶我起来,这个bug我会修!
  9. 使用Spring Boot和Logback登录到Redis
  10. 【nodejs原理源码杂记(8)】Timer模块与基于二叉堆的定时器
  11. spring security免登录动态配置方案2
  12. Atitit 知识的来源于生产方式大总结与机器学习分类 目录 1.1. 知识来源四个渠道 dna,经验,文化交流聚会,pc互联网等 1 1.2. 未来世界上大多数知识都将被机器提取,且将留存在机器
  13. 如何使新浪播放器自动播放_七夕小子_新浪博客
  14. 【渝粤题库】陕西师范大学202013 民法专论 作业
  15. 【AlexNet】ImageNet Classification with Deep Convolutional Neural Networks
  16. Deployer-6-部署流-Flow
  17. 020.验证二叉搜索树
  18. CSS 文本字体颜色设置方法。
  19. BOM系列之Navigator对象
  20. 如何在前端完美控制浏览器兼容性问题

热门文章

  1. java jsonobject转List_java – 将JSONObject转换为List或JSONArray的简单代码?
  2. winform界面嵌入dwg图纸_c# cad中插入另一个dwg的图块
  3. kafka 启动_深入理解Kafka服务端之Acceptor线程是如何启动和工作的
  4. tensorlfow.saved_model的使用
  5. html文件已传入服务器,把html文件上传到云服务器
  6. 【部署】Nginx长连接配置
  7. 笔记-信息化与系统集成技术-商业智能-数据仓库系统
  8. 笔记-高项案例题-2013年下-计算题
  9. Vue+Leaflet-side-by-side插件实现拉帘对比效果
  10. 50本.NTE、C#相关技术书籍免费下载