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

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

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

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

一、问题描述:


如下图,配置子单据体转换时会报错(目前7.6、7.7版本已经修复了这个,老版本会存在),如果出现这个报错,可以通过插件的形式进行处理

3.webp

4.webp


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

2.1、插件代码如下:

using Kingdee.BOS.App;

using Kingdee.BOS.Contracts;

using Kingdee.BOS.Core.Metadata.EntityElement;

using Kingdee.BOS.Orm.DataEntity;

using System;

using System.Linq;

using Kingdee.BOS.Core.Metadata;

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

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

using System.ComponentModel;

 

 

namespace Dave.ConvertDemo.ServicePlugIn

{

    /// <summary>

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

    /// </summary>

    [Kingdee.BOS.Util.HotUpdate]

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

    public class SubEntity : AbstractConvertPlugIn

    {

        private DynamicObject sourceBill = null;

        object fid;

        //获取源单数据

        public override void OnGetSourceData(GetSourceDataEventArgs e)

        {

            base.OnGetSourceData(e);

            fid = e.SourceData[0]["FId"];

            if (fid != null && !"".Equals(fid))

            {

                string sfilter = string.Format("FID = {0} ", fid.ToString());

                OQLFilter filter = OQLFilter.CreateHeadEntityFilter(sfilter);

                if (null == sourceBill)

                {

                    IViewService viewService = ServiceHelper.GetService<IViewService>();

                    sourceBill = viewService.Load(this.Context, e.SourceBusinessInfo.GetForm().Id, null, filter).FirstOrDefault();

                }

            }

        }

 

        // 下推携带

        public override void AfterConvert(Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args.AfterConvertEventArgs e)

        {

            base.AfterConvert(e);

            var headEntity = e.Result.FindByEntityKey("FBillHead");

            foreach (var extendedDataEntity in headEntity)

            {

                // 声明选中单据体集合数据

                DynamicObjectCollection entryCollection = null;

 

                // 目标的父单据体实体(标识)

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

 

                //目标父单据体的数据包(orm)

                entryCollection = extendedDataEntity.DataEntity["Entity"] as DynamicObjectCollection;

 

                // 源单父单据体数据包(orm)

                DynamicObjectCollection sourceObjCollection = sourceBill["TreeEntity"] as DynamicObjectCollection;

 

                //父单据体行数差值,计算此差值是针对:目标单上已录入几行父单据体之后再去选单。

                int difCount = entryCollection.Count;

 

                if (sourceBill != null)

                {

                    difCount -= sourceObjCollection.Count;

                }

 

                //从源单上获取每一条父单据体的子单据体集合,并赋值到目标单上对应的父单据体中。

                for (int i = 0; i < entryCollection.Count; i++)

                {

                    // 销售订单明细====父单据体实体

                    var entityData = entryCollection[i];

                    // 对应的订单明细索引

                    int index = entryCollection.IndexOf(entityData);

 

                    // 目标子单据体的实体(标识)

                    Entity FSubEntity = e.TargetBusinessInfo.GetEntity("F_QYGN_SubEntity");

                    // 目标子单据体的数据包(orm)

                    DynamicObjectCollection subCollection = entityData["F_QYGN_SubEntity"] as DynamicObjectCollection;

 

                    String[] SourceFeild = { "F_QYGN_SubText", "F_QYGN_SubDecimal", "F_QYGN_SubBase"  };

                    String[] GoalFeild = { "F_QYGN_SubText", "F_QYGN_SubDecimal", "F_QYGN_SubBase" };

                    // 调用公共方法

                    // 参数1:目标子单据体标识           参数2:目标父单据体的当前行的实体     参数3:源单父单据体的实体名 

                    // 参数4:源单子单据体实体名     参数5:要转换的字段名             参数6:当前行号

                    DynamicObjectCollection newRows = getSourceSubEntity(FSubEntity, entityData, "TreeEntity", "F_QYGN_SubEntity",

                        SourceFeild, GoalFeild, index - difCount);

                    if (subCollection == null)

                    {

                        subCollection = new DynamicObjectCollection(FSubEntity.DynamicObjectType, entityData);

                    }

                    else

  

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

一、问题描述:如下图,配置子单据体转换时会报错(目前7.6、7.7版本已经修复了这个,老版本会存在),如果出现这个报错,可以通过插件的形...
点击下载文档文档为doc格式

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

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