概念:

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

示例:

新建一个类,继承自单据转换插件基类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);
}
}
}

[K/3Cloud] 创建一个单据转换插件的更多相关文章

  1. [K/3Cloud] 创建一个业务单据表单插件

    概念 创建一个业务单据插件,处理单据的相关控制逻辑. 示例 新建一个类,继承自单据插件基类Kingdee.BOS.Core.Bill.PlugIn.AbstractBillPlugIn. using ...

  2. [K/3Cloud] 创建一个操作校验器

    概念: 定义了一个校验器对象,通常是添加到业务单据操作服务插件,用于对操作的合法性进行校验.继承自校验器抽象对象AbstractValidator. 示例: 新建一个类,继承自AbstractVali ...

  3. 如何创建一个自定义jQuery插件

    简介 jQuery 库是专为加快 JavaScript 开发速度而设计的.通过简化编写 JavaScript 的方式,减少代码量.使用 jQuery 库时,您可能会发现您经常为一些常用函数重写相同的代 ...

  4. [K/3Cloud] 单据转换插件执行顺序

    1.下推事件及顺序 //初始化变量 OnInitVariable(InitVariableEventArgs e) //解析字段映射关系,并构建查询参数.这里可以加入你想要的额外的字段 OnQuery ...

  5. 【转】怎样创建一个Xcode插件(Part 1)

      原文:How To Create an Xcode Plugin: Part 1/3 原作者:Derek Selander 译者:@yohunl 译者注:原文使用的是xcode6.3.2,我翻译的 ...

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

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

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

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

  8. 创建VS Code 扩展插件

    VS Code提供了强大的扩展功能,我们可以通过开发插件实现自己的业务模型编辑器.这里我们快速介绍一下插件的创建.开发和发布过程. 创建插件开发模板 首先需要确认系统中安装了node.js,并且可以使 ...

  9. 如何在Microsoft Edge浏览器中添加一个Hello World插件

    注:本文提到的代码示例下载地址> How to add a Hello World extension to Microsoft Edge Microsoft Edge 随着Win 10一起推出 ...

随机推荐

  1. poj2661Factstone Benchmark

    链接 利用log函数来求解 n!<=2^k k会达到400+W 暴力就不要想了,不过可以利用log函数来做 log2(n!) = log2(1)+log2(2)+..log2(n)<=k ...

  2. visual studio 2015 key vs2015密钥

    Visual Studio Professional 2015简体中文版(专业版)KEY:HMGNV-WCYXV-X7G9W-YCX63-B98R2Visual Studio Enterprise 2 ...

  3. 写给W小姐的一封信

    生活 琐碎 Hallo,Preaty.对于跟人说话,我很不擅长如何开头.我不知道什么样的开头是符合我在别人心目中我应有的形象.我不知道什么样的开头符合别人预想中与我相匹配的内容.或者说什么的开头才是一 ...

  4. 免费大数据搜索引擎 xunsearch 实践

    以前在IBM做后端开发时,也接触过关于缓存技术,当时给了n多文档来学习,后面由于其他紧急的项目,一直没有着手去仔细研究这个技术,即时后来做Commerce的时候,后台用了n多缓存技术,需要build ...

  5. 30款jQuery常用网页焦点图banner图片切换

    1.jquery 图片滚动特效制作 slide 图片类似窗帘式图片滚动 查看演示 2.jquery幻灯片插件带滚动条的圆形立体图片旋转滚动 查看演示 3.jQuery图片层叠旋转类似洗牌翻转图片幻灯片 ...

  6. Python 保留n位小数

    输出a, b 且保留三位小数 a = 2.3456 b = 2.0000 三种方法: round(a, 3)('%.3f' % a)Decimal(a).quantize(Decimal('0.000 ...

  7. CAD绘制标记(网页版)

    主要用到函数说明: MxDraw::GetCursorPickRect 返回拾取矩形框的宽度,默认值为6.详细说明如下: 参数 说明 IN MXDRAWOCXHANDLE hOcx 控件窗口句柄 OU ...

  8. 关于Maven项目的pom.xml中的依赖或插件失效的解决方法

    1.请将<dependency>标签包含的依赖从<dependencyManagement>中拿出来,单独放在<dependencies>标签里面.2.请将< ...

  9. Android ListView setEmptyView

    http://my.eoe.cn/yaming/archive/879.html 1 当我们使用ListView或GridView的时候,当列表为空的时候,我们需要一个特殊的View来提示用户操作,于 ...

  10. c++ 回调的实现

    什么是回调?通常发生在需要两个角色即调用者与实现者的情形上,即我们希望当产生某个事件时,调用实现者定义的某个函数.当然这个概念很大,不是说操作系统的信号量,条件变量什么的,是在语言级别实现,如一个Fr ...