金蝶云星空单据转换下推时上游单据的主键和明细主键获取和保存

发布时间 2023-11-08 08:37:30作者: lanrenka
 

比如:售后单下推对照表,是一对一,明细也是一对一,现有需求需要把售后单的主键和明细主键存储到对照表的表头和明细上。

上游单据:售后单
下游单据:产品序列号对照表

一、产品序列号对照表增加字段
表头:售后单ID
表体:售后单明细ID
文本或者整数控件都可

 

 二、创建单据转换插件

using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace XHWT.K3.SCM.App.Service.PlugIn.BillConversion
{
    /// <summary>
    /// 功能描述    :售后单下推产品序列号对照表转换规则
    /// 创 建 者    :Administrator
    /// 创建日期    :2023/11/7 15:44:18 
    /// 最后修改者  :Krystal
    /// 最后修改日期:2023/11/7 15:44:18 
    /// </summary>
    [Description("售后单下推产品序列号对照表转换规则"), HotUpdate]
    public class AfterOrderToReplace: AbstractConvertPlugIn
    {

        #region <事件>
        public override void AfterConvert(AfterConvertEventArgs e)
        {
            base.AfterConvert(e);
            base.AfterConvert(e);
            var billHead = e.Result.FindByEntityKey("FBillHead");      //目标单
            foreach (var item in billHead)
            {
                ///明细信息 标识 FEntity
                var ItemsEntity = item.DataEntity["FEntity"] as DynamicObjectCollection;//实体标识
                if (ItemsEntity != null && ItemsEntity.Count > 0)
                {
                    long sbillId = 0;
                    foreach (var entry in ItemsEntity)
                    {
                        var link = entry["FEntity_Link"] as DynamicObjectCollection;//关联表
                        if (link != null && link.Count() > 0)
                        {
                            entry["FPKIDX_E"] = Convert.ToInt64(link[0]["SId"]);//售后单子表ID=上游单据明细ID
                            if (sbillId == 0)
                            {
                                sbillId = Convert.ToInt64(link[0]["SBillId"]);//上游单据主键ID
                            }
                        }
                    }
                    item.DataEntity["FPKIDX_H"] = sbillId; //售后单ID
                }

            }
        }
        #endregion <事件>
    }
}

 三、在单据转换注册插件

 

 

 

四、测试