单据转换--一张单据拆成多张单据
一、说明
下面代码演示的是,根据单据某个数量值,每10拆成一张单据,最后不足10的也算一张单据,并且删除老的数据包。
二、转换插件代码
using System; using System.ComponentModel; using System.Text; using System.Linq; using System.Collections.Generic; using Kingdee.BOS.Core; using Kingdee.BOS.Util; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Core.Const; using Kingdee.BOS.Orm; using Kingdee.BOS.Core.Metadata.ConvertElement; using Kingdee.BOS.App.Core; using Kingdee.BOS.Contracts; using Kingdee.BOS.Core.Metadata; namespace Kingdee.BOS.TestPlugIn.BillABillB { [HotUpdate] [Description("单据转换插件")] public class BillConvertPlugIn : AbstractConvertPlugIn { /// <summary> /// 如果新创建的单据数据包要走服务策略,在此处理,如果不需要则可以在AfterConvert处理 /// 注意:这里没有对数据进行任何处理,仅是为了展示如何拆分为多张单据 /// </summary> /// <param name="e"></param> public override void OnAfterCreateLink(CreateLinkEventArgs e) { base.OnAfterCreateLink(e); //生成的新的目标单据扩展数据包集合 List<ExtendedDataEntity> newExBillDatas = new List<ExtendedDataEntity>(); //通过转换得到的扩展数据包集合 ExtendedDataEntity[] exBillDatas = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead");//FBillHead固定的 //如果值需要新创建的数据包,则索引从0开始,否则从已存在的数据包开始 bool onlyNeedNewBillData = true; var billDataIndex = onlyNeedNewBillData ? 0 : exBillDatas.Length; var entryEnttiy = e.TargetBusinessInfo.GetEntity("FEntity"); //FEntity为实体key //这里假设根据数量,每10拆成一个新单据。 var qtyField = e.TargetBusinessInfo.GetField("FQty1"); //FQty1字段key //对每张目标单据进行克隆,创建新的数据包 foreach (var currExbillData in exBillDatas) { var currBillData = currExbillData.DataEntity; /* * 这里可以增加业务规则,比如按按第一行分录数量值拆分,每10个数量拆分为一张单据 */ var entryDatas = entryEnttiy.DynamicProperty.GetValue(currBillData) as DynamicObjectCollection; if (entryDatas.IsEmpty() == false) { var qtyValue = ObjectUtils.Object2Int(qtyField.DynamicProperty.GetValue(entryDatas[0])); while (qtyValue > 0) { var newBillData = currBillData.Clone() as DynamicObject; ExtendedDataEntity newExBillData = new ExtendedDataEntity(newBillData, billDataIndex, 0); newExBillData[BOSConst.ConvSourceExtKey] = currExbillData[BOSConst.ConvSourceExtKey]; newExBillDatas.Add(newExBillData); qtyValue = qtyValue - 10; billDataIndex++; } } } //如果不需要转换得到的数据包,则可以删除老数据包 if (onlyNeedNewBillData) { for (int i = 0; i < exBillDatas.Length; i++) { e.TargetExtendedDataEntities.RemoveExtendedDataEntity("FBillHead", exBillDatas[i]); } } //最后把新创建的数据包加到平台变量中,并进行解析,这样后面的服务策略就能使用到 e.TargetExtendedDataEntities.AddExtendedDataEntities("FBillHead", newExBillDatas.ToArray()); e.TargetExtendedDataEntities.Parse(newExBillDatas.Select(x => x.DataEntity), e.TargetBusinessInfo); } } }
单据转换--一张单据拆成多张单据
一、说明下面代码演示的是,根据单据某个数量值,每10拆成一张单据,最后不足10的也算一张单据,并且删除老的数据包。二、转换插件代码usin...
点击下载文档
本文2024-09-16 18:26:59发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-22215.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章