单据转换--通过插件控制附件携带
一、说明
单据转换附件携带,默认是携带上游来源单据所有附件,没法通过配置进行筛选,只能通过转换插件进行控制,这里提供一个插件代码供参考。
二、示例
单据A下推单据B,单据A有两个附件,只允许携带一个附件到单据B
1、单据A,附件情况,有两个附件
2、通过代码控制“文件1.txt”不允许携带到单据B,单据B附件情况。
三、插件代码
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> /// 单据转换插件最后一个事件 /// </summary> /// <param name="e"></param> public override void AfterConvert(AfterConvertEventArgs e) { base.AfterConvert(e); //转换得到的目标单扩展数据包集合 var tgtExDatas = e.Result.FindByEntityKey("FBillHead"); //有附件的目标单集合 var tgtExDatasWithAttachs = tgtExDatas.Where(x => x.DataEntity[ConvertTakeDataInfo.ProperyKey] != null && x.DataEntity[ConvertTakeDataInfo.ProperyKey] is ConvertTakeDataInfo && (x.DataEntity[ConvertTakeDataInfo.ProperyKey] as ConvertTakeDataInfo).Attchments.IsEmpty() == false).ToList(); if (tgtExDatasWithAttachs.Count() > 0) { List<ConvertAttachmentResultInfo> convertAttachInfos = new List<ConvertAttachmentResultInfo>(); tgtExDatasWithAttachs.Select(x => { convertAttachInfos.AddRange((x.DataEntity[ConvertTakeDataInfo.ProperyKey] as ConvertTakeDataInfo).Attchments); return x; }).ToList(); //得到所有附件内码 var attachPks = convertAttachInfos.Select(x => x.AttachmentId).Distinct().Select(x => ObjectUtils.Object2String(x)).ToArray(); //得到附件元数据 var attachFormId = "BOS_Attachment"; //附件表单Id var mdService = Kingdee.BOS.App.ServiceHelper.GetService<IMetaDataService>(); var formMetaData = mdService.Load(this.Context, attachFormId) as FormMetadata; //得到附件详细信息 var viewService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>(); var attachDatas = viewService.Load(this.Context, attachPks, formMetaData.BusinessInfo.GetDynamicObjectType()); //不需要携带的附件内码集合,比如:来源的单据编码为:0301001, 来源的文件名为:文件1.txt var notTakeAttachPks = attachDatas.Where(x => ObjectUtils.Object2String(x["BillNo"]) == "0301001" && ObjectUtils.Object2String(x["AttachmentName"]) == "文件1.txt").ToDictionary(x => ObjectUtils.Object2Int(x[0]), null); if (notTakeAttachPks.Count == 0) return; //对所有有附件的目标单据进行循环处理 foreach (var exData in tgtExDatasWithAttachs) { //需要移除 var takeInfo = exData.DataEntity[ConvertTakeDataInfo.ProperyKey] as ConvertTakeDataInfo; takeInfo.Attchments.RemoveAll(x => notTakeAttachPks.ContainsKey(x.AttachmentId)); } } } } }
单据转换--通过插件控制附件携带
一、说明单据转换附件携带,默认是携带上游来源单据所有附件,没法通过配置进行筛选,只能通过转换插件进行控制,这里提供一个插件代码供参...
点击下载文档
本文2024-09-16 18:10:55发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-20475.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章