[K/3Cloud] 创建一个单据转换插件
生活随笔
收集整理的這篇文章主要介紹了
[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){ }} }
采購申請單到采購訂單的單據轉換插件。
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] 创建一个单据转换插件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: phpwind自定义推送模块
- 下一篇: pongo - 字符串消除