[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一起推出 ...
随机推荐
- 员工管理系统(集合与IO流的结合使用 beta4.0 ObjectInputStream/ ObjectOutputStream)
package cn.employee_io; import java.io.Serializable; public class Employee implements Serializable{ ...
- sed附加命令
追加命令(命令a) sed '[address] a the-line-to-append' input-file 在第二行后面追加一行(原文这里可能有问题,没有写名行号) [root@sishen ...
- vue项目中安装cnpm和node_modules
1.安装cnpm的nodejs包管理工具,命令行: npm install -g cnpm --registry=https://registry.npm.taobao.org 2. 每个vue项 ...
- Wamp搭建的服务器登录的时候出现Access denied for user 'hello'@'localhost' (using password: YES)
想用自己电脑做一个服务器,然后就选择了Wamp,本来一切顺利,可是到登录的时候却出现了问题,出现了 Access denied for user 'hello'@'localhost' (using ...
- mysql执行语句汇总
插入select的数据 INSERT INTO `test1`( order_id, goods_id, goods_name, goods_sn, product_id, goods_number, ...
- js基础盲点
var myarray= new Array(8); //创建数组,存储8个数据. 注意:1.创建的新数组是空数组,没有值,如输出,则显示undefined.2.虽然创建数组时,指定了长度,但实际上数 ...
- leetcode_378. Kth Smallest Element in a Sorted Matrix_堆的应用
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- WPF知识点--渐变色(LinearGradientBrush、GradientStop)
[LinearGradientBrush-- 使用线性渐变绘制区域](https://msdn.microsoft.com/zh-cn/library/system.windows.media.lin ...
- 网络爬虫之框架(Scrapy)
Scrapy爬虫框架 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合. 爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫. Scrapy爬虫框架结构:
- Linux C下变量和常量的存储的本质
源代码 #cat main.c #include <stdio.h> int i = 100; int main(void) { func(); return 0; } #cat func ...