概念:

创建一个业务单据转换插件,在单据转换的各个时点干预单据转换的相关逻辑控制。

示例:

新建一个类,继承自单据转换插件基类Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.AbstractConvertPlugIn。

using Kingdee.BOS;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using System;
namespace Kingdee.K3.Example.App.ServicePlugIn
{/// <summary>/// 销售出库单到外购入库单的单据转换插件/// </summary>public class OutStockToInStockConvertPlugIn : Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.AbstractConvertPlugIn{// Summary://     最后触发:单据转换后事件//// Parameters://   e:public override void AfterConvert(AfterConvertEventArgs e){ }//// Summary://     创建关联关系后事件//// Parameters://   e://     事件参数包public override void OnAfterCreateLink(CreateLinkEventArgs e){ }//// Summary://     下推/选单,自动填充目标字段值完毕//// Parameters://   e:public override void OnAfterFieldMapping(AfterFieldMappingEventArgs e) { }//// Summary://     下推/选单时,根据字段映射,向目标字段填充值之前//// Parameters://   e:public override void OnBeforeFieldMapping(BeforeFieldMappingEventArgs e){ }//// Summary://     取源单数据前事件。//// Parameters://   e:public override void OnBeforeGetSourceData(BeforeGetSourceDataEventArgs e){ }//// Summary://     源数据分组:把全部分录合并到一个目标单据//// Parameters://   e://     事件参数包public override void OnBeforeGroupBy(BeforeGroupByEventArgs e){ }//// Summary://     选单时,初始化创建目标单据数据包(输出一个数据对象)//// Parameters://   e://     事件参数包public override void OnCreateDrawTarget(CreateDrawTargetEventArgs e){ }//// Summary://     创建关联关系//// Parameters://   e://     事件参数包public override void OnCreateLink(CreateLinkEventArgs e){ }//// Summary://     下推时,根据源数据分组结果,初始化创建目标单据数据包//// Parameters://   e://     事件参数包public override void OnCreateTarget(CreateTargetEventArgs e){ }//// Summary://     下推/选单时,根据字段映射,向目标字段填充值//// Parameters://   e:public override void OnFieldMapping(FieldMappingEventArgs e){ }//// Summary://     获取单据转换中自定义表单服务//// Parameters://   e:public override void OnGetConvertBusinessService(ConvertBusinessServiceEventArgs e){ }//// Summary://     选单时,执行SQL,读取源单数据//// Parameters://   e://     事件参数包public override void OnGetDrawSourceData(GetDrawSourceDataEventArgs e){ }//// Summary://     下推时,执行SQL,读取源单数据//// Parameters://   e://     事件参数包public override void OnGetSourceData(GetSourceDataEventArgs e){ }//// Summary://     初始化变量,这个事件可以得到转换规则,源单和目标单的BussinessInfo//// Parameters://   e://     事件参数包public override void OnInitVariable(InitVariableEventArgs e){ }//// Summary://     根据选择行生成取数SQL的条件子句 ID in ()语句。//// Parameters://   e://     事件参数包public override void OnInSelectedRow(InSelectedRowEventArgs e){ }//// Summary://     选单前事件:解析过滤策略中配置的条件;//// Parameters://   e://     事件参数包public override void OnParseFilter(ParseFilterEventArgs e){ }//// Summary://     选单前事件;解析字段映射关系中配置的过滤选项;//// Parameters://   e://     事件参数包public override void OnParseFilterOptions(ParseFilterOptionsEventArgs e){ }//// Summary://     解析字段映射关系,并构建查询参数。 这里可以加入你想要的字段//// Parameters://   e://     事件参数包public override void OnQueryBuilderParemeter(QueryBuilderParemeterEventArgs e){ }//// Summary://     设置钩稽数量//// Parameters://   e://     事件参数包public override void OnSetLinkAmount(SetLinkAmountEventArgs e){ }}
}

K3Cloud案例

采购申请单到采购订单的单据转换插件。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Orm.Metadata;
using Kingdee.BOS.Orm.Metadata.DataEntity;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
using Kingdee.BOS.BusinessEntity.Organizations;
using Kingdee.BOS.Resource;
using Kingdee.K3.SCM.Contracts;
using Kingdee.K3.SCM.App.Utils;
namespace Kingdee.K3.SCM.App.Pur.ServicePlugIn
{/// <summary>/// 采购申请单到采购订单的单据转换插件/// </summary>public class PurReqToOrderService : AbstractConvertPlugIn{public override void OnAfterFieldMapping(BOS.Core.Metadata.ConvertElement.PlugIn.Args.AfterFieldMappingEventArgs e){long assignSupplierId = 0;ExtendedDataEntity[] heads = e.TargetExtendDataEntitySet.FindByEntityKey("FBillHead");if (heads == null){return;}foreach (ExtendedDataEntity head in heads){//映射过来表头指定供应商有值的更改供应商字段值为指定供应商的值assignSupplierId = Convert.ToInt64(head.DataEntity["AssignSupplierId_Id"]);if (assignSupplierId != 0){SetSupplierId(e, assignSupplierId, head);}DynamicObject supplierObj = head.DataEntity["SupplierId"] as DynamicObject;if (supplierObj != null){DynamicObjectCollection porderFinance = head.DataEntity["POOrderFinance"] as DynamicObjectCollection;DynamicObjectCollection supplierBusiness = supplierObj["SupplierFinance"] as DynamicObjectCollection;if (supplierBusiness != null && supplierBusiness.Count > 0){long payConditionId = Convert.ToInt64(supplierBusiness[0]["PayCondition_Id"]);BaseDataField payConditionIdOjb = e.TargetBusinessInfo.GetField("FPayConditionId") as BaseDataField;FieldUtils.SetBaseDataFieldValue(this.Context, payConditionIdOjb, porderFinance[0], payConditionId);}}}}public override void OnFieldMapping(BOS.Core.Metadata.ConvertElement.PlugIn.Args.FieldMappingEventArgs e){if (e.TargetField.Key.ToUpperInvariant() == "FSUPPLIERID"){if (this.OperationNumber.EqualsIgnoreCase("Draw")){if (Convert.ToInt64(e.ExtendedDataEntity.DataEntity["SupplierId_Id"]) > 0){e.Cancel = true;}}else{List<DynamicObject> sourceDatas = e.ExtendedDataEntity["ConvertSource"] as List<DynamicObject>;long suggestSupplierId = sourceDatas.Where(p => p != null && Convert.ToInt64(p["FSuggestSupplierId"]) > 0).Select(p => Convert.ToInt64(p["FSuggestSupplierId"])).FirstOrDefault();e.MapValue = suggestSupplierId;}}base.OnFieldMapping(e);}private void SetSupplierId(BOS.Core.Metadata.ConvertElement.PlugIn.Args.AfterFieldMappingEventArgs e, long supplierId, ExtendedDataEntity head){head.DataEntity["SupplierId_Id"] = supplierId;BaseDataField supplier = e.TargetBusinessInfo.GetField("FSupplierId") as BaseDataField;FieldUtils.SetBaseDataFieldValue(this.Context, supplier, head.DataEntity, supplierId);}}
}

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

[K/3Cloud] 创建一个单据转换插件相关推荐

  1. 如何创建一个基础jQuery插件

    如何创建一个基础插件 How to Create a Basic Plugin 有时你想使一块功能性的代码在你代码的任何地方有效.比如,也许你想调用jQuery对象的一个方法,对该对象进行一系列的操作 ...

  2. Elasticsearch:创建一个 Elasticsearch Ingest 插件

    在前面的一篇文章 "Elasticsearch:创建属于自己的 Ingest processor" 中,我相信地介绍了如何使用一个模板来创建 Ingest 插件.在今天的文章中,我 ...

  3. 如何创建一个基本JQuery的插件

    如何创建一个基本的插件 有时您希望在整个代码中提供一些功能.例如,也许你想要一个单一的方法,你可以调用一个jQuery选择,对选择执行一系列的操作.在这种情况下,您可能需要编写一个插件. 链接jQue ...

  4. [翻译]怎样创建一个Xcode插件(part 1)

    原文链接 : http://www.cocoachina.com/ios/20160308/15587.html 原文:How To Create an Xcode Plugin: Part 1/3 ...

  5. 多库共存 包装集的问题 点击按钮创建一个p 几个属性介绍 jQuery的插件

    多库共存 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...

  6. 如何为您的插件创建一个很棒的WordPress.org页面

    You've just developed an awesome plugin for WordPress and you want to share it with as many people a ...

  7. [K/3Cloud]关于选单操作

    之前有些人对这块有些疑问,比如: 1.选单操作是否和下推基本一样,都是公用同一套单据转换规则,只不过下推是源单推目标单,选单是目标单去选择源单,最终操作结果一样? 2,我想实现选单的时候,选单列表先通 ...

  8. Elasticsearch:从零开始创建一个 ingest pipeline 处理器

    实际上在我之前的文章: Elasticsearch:创建属于自己的 Ingest processor Elasticsearch:创建一个 Elasticsearch Ingest 插件 我已经详述了 ...

  9. VB6上创建金蝶K/3或KIS旗舰版插件

    金蝶K/3 KIS旗舰版在VB6上创建新增插件教程 1.首先,必须的前提是先安装好金蝶K/3产品 (V11.0以上的版本),然后再安装VB6,不懂安装就自己百度解决了. 2.打开VB6,新建工程 选择 ...

最新文章

  1. 【c语言】蓝桥杯算法提高 征税程序
  2. Pandas简明教程-适用于竞赛、研究以及办公自动化
  3. unittest所有断言方法
  4. 【软件】OBS无法捕捉显示屏
  5. mysql in 有序_mysql中的in排序 mysql按in中顺序来排序
  6. 一个堆排我竟弄了 4 个动画
  7. 【转】CCScale9Sprite和CCControlButton
  8. C#之获取系统cpu
  9. 在xml publisher中嵌入二维码(支持中文)
  10. fudannlp的maven可编译版本
  11. 数学建模国赛论文latex代码汇总
  12. 测试网速_使用Speedtest CLI测试你的网速
  13. 基于Esp8266的远程开机棒设计和实现
  14. 服务器执行MySQL耗时问题解决全过程
  15. 深入理解Plasma(四)Plasma Cash
  16. Chrome浏览器输入不安全站点,没有继续前往链接--解决方案thisisunsafe
  17. 元代家谱上的名字是以数字命名的?这里面蕴含了哪些历史特色?
  18. 天猫30个店铺签到领喵币代码 亲测可用
  19. 中国大学MOOC课程《程序设计入门——C语言》 第8周编程练习
  20. 中国SCR脱硝催化剂行业竞争现状分析与未来需求预测报告2022-2028年

热门文章

  1. 【Linux 内核 内存管理】优化内存屏障 ① ( barrier 优化屏障 | 编译器优化 | CPU 执行优化 | 优化屏障源码 barrier 宏 )
  2. 【Linux 内核】编译 Linux 内核 ⑥ ( 安装 OpenSSL | 安装其它依赖库 | 内核编译完成 )
  3. 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )
  4. 【错误记录】Android 应用安装报错 ( The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER )
  5. 【数据挖掘】数据挖掘简介 ( 6 个常用功能 | 数据挖掘结果判断 | 数据挖掘学习框架 | 数据挖掘分类 )
  6. 【Flutter】Flutter 应用创建运行 ( Android Studio 创建 / 运行 Flutter 应用 | 命令行创建 / 运行 Flutter 应用 )
  7. USACO SEC.1.2 No.4 Palindromic Squares
  8. OpenGL之glMatrixMode函数的用法
  9. CCF-CSP 201703-2 试题名称: 学生排队(满分代码)
  10. Java 集合中的方法性能分析