电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

开发案例分享-单据转换之多单据体转换

来源:金蝶云社区作者:金蝶2024-09-163

开发案例分享-单据转换之多单据体转换

一、问题描述:


如下图,标准系统仅支持一个单据体的字段映射,配置多个单据体映射保存时报错

1.webp

2.webp


二、解决方法:可通过单据转换插件进行处理


2.1、插件代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using Kingdee.BOS.Core;

using Kingdee.BOS.Core.Metadata;

using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;

using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;

using Kingdee.BOS.Core.Metadata.EntityElement;

using Kingdee.BOS.Core.Metadata.FormElement;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Contracts;

using Kingdee.BOS.App;

namespace Dave.ConvertDemo.ServicePlugIn

{

    /// <summary>

    /// 按顺序输出单据转换-下推过程的插件事件

    /// </summary>

    [Kingdee.BOS.Util.HotUpdate]

    [Description("多单据体单据转换插件")]

    public class MulEntity : AbstractConvertPlugIn

    {

 

        //// <summary>

        /// 主单据体的字段携带完毕,与源单的关联关系创建好之后,触发此事件

        /// </summary>

        /// <param name="e"></param>

        public override void OnAfterCreateLink(CreateLinkEventArgs e)

        {

            // 预先获取一些必要的元数据,后续代码要用到:

            // 源单第二单据体

            Entity srcSecondEntity = e.SourceBusinessInfo.GetEntity("F_QYGN_Entity");

 

            // 目标单第一单据体

            Entity mainEntity = e.TargetBusinessInfo.GetEntity("FEntity");

 

            // 目标单第二单据体

            Entity secondEntity = e.TargetBusinessInfo.GetEntity("F_QYGN_Entity");

 

            // 目标单关联子单据体

            Entity linkEntity = null;

            Form form = e.TargetBusinessInfo.GetForm();

            if (form.LinkSet != null

                && form.LinkSet.LinkEntitys != null

                && form.LinkSet.LinkEntitys.Count != 0)

            {

                linkEntity = e.TargetBusinessInfo.GetEntity(

                    form.LinkSet.LinkEntitys[0].Key);

            }

 

            if (linkEntity == null)

            {

                return;

            }

 

            // 获取生成的全部下游单据

            ExtendedDataEntity[] billDataEntitys = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead");

 

 

            // 对下游单据,逐张单据进行处理

            foreach (var item in billDataEntitys)

            {

                DynamicObject dataObject = item.DataEntity;

 

                // 定义一个集合,用于收集本单对应的源单内码

                HashSet<long> srcBillIds = new HashSet<long>();

 

                // 开始到主单据体中,读取关联的源单内码

                DynamicObjectCollection mainEntryRows =

                    mainEntity.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection;

                foreach (var mainEntityRow in mainEntryRows)

                {

                    DynamicObjectCollection linkRows =

                        linkEntity.DynamicProperty.GetValue(mainEntityRow) as DynamicObjectCollection;

                    foreach (var linkRow in linkRows)

                    {

                        long srcBillId = Convert.ToInt64(linkRow["SBillId"]);

                        if (srcBillId != 0

                            && srcBillIds.Contains(srcBillId) == false)

                        {

                            srcBillIds.Add(srcBillId);

                        }

                    }

                }

                if (srcBillIds.Count == 0)

                {

                    continue;

                }

                // 开始加载源单第二单据体上的字段

 

                // 确定需要加载的源单字段(仅加载需要携带的字段)

                List<SelectorItemInfo> selector = new List<SelectorItemInfo>();

                selector.Add(new SelectorItemInfo("F_QYGN_TestText"));

                selector.Add(new SelectorItemInfo("F_QYGN_TestDecimal"));

                selector.Add(new SelectorItemInfo("F_QYGN_TestDepartment"));

               

 

                // TODO: 继续添加其他需要携带的字段,示例代码略

                // 设置过滤条件

                string filter = string.Format(" {0} I

开发案例分享-单据转换之多单据体转换

一、问题描述:如下图,标准系统仅支持一个单据体的字段映射,配置多个单据体映射保存时报错二、解决方法:可通过单据转换插件进行处理2.1...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信