[K/3Cloud] 创建一个单据转换插件
概念:
示例:
新建一个类,继承自单据转换插件基类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] 创建一个单据转换插件的更多相关文章
- [K/3Cloud] 创建一个业务单据表单插件
概念 创建一个业务单据插件,处理单据的相关控制逻辑. 示例 新建一个类,继承自单据插件基类Kingdee.BOS.Core.Bill.PlugIn.AbstractBillPlugIn. using ...
- [K/3Cloud] 创建一个操作校验器
概念: 定义了一个校验器对象,通常是添加到业务单据操作服务插件,用于对操作的合法性进行校验.继承自校验器抽象对象AbstractValidator. 示例: 新建一个类,继承自AbstractVali ...
- 如何创建一个自定义jQuery插件
简介 jQuery 库是专为加快 JavaScript 开发速度而设计的.通过简化编写 JavaScript 的方式,减少代码量.使用 jQuery 库时,您可能会发现您经常为一些常用函数重写相同的代 ...
- [K/3Cloud] 单据转换插件执行顺序
1.下推事件及顺序 //初始化变量 OnInitVariable(InitVariableEventArgs e) //解析字段映射关系,并构建查询参数.这里可以加入你想要的额外的字段 OnQuery ...
- 【转】怎样创建一个Xcode插件(Part 1)
原文:How To Create an Xcode Plugin: Part 1/3 原作者:Derek Selander 译者:@yohunl 译者注:原文使用的是xcode6.3.2,我翻译的 ...
- 如何创建一个基本JQuery的插件
如何创建一个基本的插件 有时您希望在整个代码中提供一些功能.例如,也许你想要一个单一的方法,你可以调用一个jQuery选择,对选择执行一系列的操作.在这种情况下,您可能需要编写一个插件. 链接jQue ...
- [K/3Cloud]关于"选单"操作
之前有些人对这块有些疑问,比如: 1.选单操作是否和下推基本一样,都是公用同一套单据转换规则,只不过下推是源单推目标单,选单是目标单去选择源单,最终操作结果一样? 2,我想实现选单的时候,选单列表先通 ...
- 创建VS Code 扩展插件
VS Code提供了强大的扩展功能,我们可以通过开发插件实现自己的业务模型编辑器.这里我们快速介绍一下插件的创建.开发和发布过程. 创建插件开发模板 首先需要确认系统中安装了node.js,并且可以使 ...
- 如何在Microsoft Edge浏览器中添加一个Hello World插件
注:本文提到的代码示例下载地址> How to add a Hello World extension to Microsoft Edge Microsoft Edge 随着Win 10一起推出 ...
随机推荐
- 转-Mac下Apache Tomcat安装配置
ava Web如果稍微知道一点,一般对Tomcat都不会陌生,Apache是普通服务器,本身只支持html即普通网页,可以通过插件支持PHP,还可以与Tomcat连通(单向Apache连接Tomcat ...
- RMAN-06564错误的原因及解决办法
今日在进行数据库恢复时,遭遇RMAN-06564错误,如下: RMAN> restore spfile from autobackup; Starting restore at 01-NOV-1 ...
- 208 Implement Trie (Prefix Tree) 字典树(前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个方法.注意:你可以假设所有的输入都是小写字母 a-z.详见:https://leetcode.co ...
- Activiti工作流和shiro权限管理关系图
- Miller-Rabin 素性测试 与 Pollard Rho 大整数分解
\(\\\) Miller-Rabin 素性测试 考虑如何检验一个数字是否为素数. 经典的试除法复杂度 \(O(\sqrt N)\) 适用于询问 \(N\le 10^{16}\) 的时候. 如果我们要 ...
- openmv第一次调试
2018-09-19 20:14:51 import sensor, image, time import car import json import time from pyb import U ...
- R in action读书笔记(3)-第六章:基本图形
第六章 基本图形 6.1条形图 条形图通过垂直的或水平的条形展示了类别型变量的分布(频数).函数:barplot(height) 6.1.1简单的条形图 6.1.2推砌条形图和分组条形图 如果hei ...
- 【C++】模板简述(三):类模板
上文简述了C++模板中的函数模板的格式.实例.形参.重载.特化及参数推演,本文主要介绍类模板. 一.类模板格式 类模板也是C++中模板的一种,其格式如下: template<class 形参名1 ...
- GA详解
转:http://blog.csdn.net/u010451580/article/details/51178225 本文是去年课题组周报中的一个专题讲解,详细讲了GA,由于是周报,所以十分详细.很适 ...
- mysql 修改表的字段
修改一个表的字段 ALTER TABLE `member` CHANGE `memberid` `memberid` bigint unsigned; 修改含有外键的字段 -- 执行 begin 到 ...