单据转换插件,无关联关联关系字段赋值,源单单据头字段到目标单单据体

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:31

单据转换插件,无关联关联关系字段赋值,源单单据头字段到目标单单据体

有一点点基础的开发 1. 创建单据转换插件 2. 编写代码 ``` public class supplierBillSwitch : AbstractConvertPlugIn { //源单的数据包(在OnAfterCreateLink方法李没有找到获取源单数据的方法, 只能从OnGetSourceData获取源单数据,赋给私有属性) private DynamicObject sourceBill = null; //源单的fid(看情况使用) private object fid; public override void OnGetSourceData(GetSourceDataEventArgs e) { base.OnGetSourceData(e); fid = e.SourceData[0]["FId"]; if (fid != null && !"".Equals(fid)) { // 确定需要加载的源单字段(仅加载需要携带的字段) List<SelectorItemInfo> selector = new List<SelectorItemInfo>(); selector.Add(new SelectorItemInfo("源单字段标识")); selector.Add(new SelectorItemInfo("源单字段标识")); selector.Add(new SelectorItemInfo("源单字段标识")); //。。。 //筛选条件 string sfilter = string.Format("FID = {0} ", fid.ToString()); OQLFilter filter = OQLFilter.CreateHeadEntityFilter(sfilter); if (null == sourceBill) { //获取源单的数据包,selector可以填写为null,这样是源单的所有数据 IViewService viewService = ServiceHelper.GetService<IViewService>(); sourceBill = viewService.Load(this.Context, e.SourceBusinessInfo.GetForm().Id, selector, filter).FirstOrDefault(); } } } /// <summary> /// 关联关系子表已经创建并填写完毕后触发, /// 此时,已经在关联子表中,记录了源单与目标单之间的关系 /// </summary> /// <param name="e"></param> /// <remarks> /// 可以在此事件中,对关联关系子表内容进行调整, /// </remarks> public override void OnAfterCreateLink(CreateLinkEventArgs e) { // 目标单信息(getfield是获取字段的) Entity targetContactEntry = e.TargetBusinessInfo.GetEntity("目标单单据体标识"); Entity targetBankEntry = e.TargetBusinessInfo.GetEntity("FBankInfo"); // 目标单单据体的数据包 DynamicObject dataObject = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead")[0].DataEntity; //下推单据体的信息(这里赋值的是单据体,单据头你们自己研究吧,应该差不离) DynamicObjectCollection tarContactEntryRows = targetContactEntry.DynamicProperty.GetValue(dataObject) as DynamicObjectCollection; tarContactEntryRows.Clear(); // 删除空行 DynamicObject newRowContact = new DynamicObject(targetContactEntry.DynamicObjectType); tarContactEntryRows.Add(newRowContact); newRowContact["字段标识(不带F)"] = sourceBill["字段标识"]; newRowContact["字段标识(不带F)"] = sourceBill["字段标识"]; //。。。 } } ``` 仅供参考 关联案例链接: [单据转换插件案例](https://wenku.my7c.com/article/229916094369502720?channel_level=%E9%87%91%E8%9D%B6%E4%BA%91%E7%A4%BE%E5%8C%BA%7C%E6%90%9C%E7%B4%A2%7C%E7%BB%BC%E5%90%88&productLineId=1)

using Kingdee.BOS.App;

using Kingdee.BOS.Contracts;

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.FieldElement;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.ServiceHelper;

using Kingdee.BOS.Util;

using System;

using System.ComponentModel;


namespace 我的模板

{

    [Description("【->】单据转换插件"), HotUpdate]

    public class 单据转换插件 : AbstractConvertPlugIn

    {

        private long srcBillId;//源单 内码

        private string srcFormId;//源单 表单唯一标识


        /// <summary>

        /// 获取 源单数据 时 调用

        /// </summary>

        public override void OnGetSourceData(GetSourceDataEventArgs e)

        {

            this.srcBillId = Convert.ToInt64(e.SourceData[0]["FID"]);

            this.srcFormId = e.SourceBusinessInfo.GetForm().Id;

        }


        /// <summary>

        /// 关联 数据实体类 创建完成 之后 调用

        /// </summary>

        public override void OnAfterCreateLink(CreateLinkEventArgs e)

        {

            DynamicObject 源单 = GetFullDataEntity(this.srcFormId, this.srcBillId);//第一张 源单

            DynamicObject 目标单 = e.TargetExtendedDataEntities.FindByEntityKey("FBillHead")[0].DataEntity;//第一张 目标单


            Set(源单, 目标单);

        }


        /// <summary>

        /// 设置 

        /// </summary>

        private void Set(DynamicObject 源单, DynamicObject 目标单)

        {

            if (源单 == null || 目标单 == null) return;



        }


        /// <summary>

        /// 获取 指定字段 的 动态对象

        /// </summary>

        /// <param name="fieldKey">基础资料 字段 唯一标识</param>

        /// <param name="baseDataId">基础资料 内码</param>

        /// <returns></returns>

        private DynamicObject GetDynamicObject(string formId, string baseDataFieldKey, long baseDataId)

        {

            if (baseDataFieldKey.IsNullOrEmptyOrWhiteSpace() || baseDataId == 0) return null;


            BaseDataField baseDataField = GetBusinessInfo(formId).GetField(baseDataFieldKey) as BaseDataField;

            return ServiceHelper.GetService<IViewService>().LoadSingle(Context, baseDataId, baseDataField.RefFormDynamicObjectType);

        }


        /// <summary>

        /// 获取 业务对象 信息

        /// </summary>

        /// <param name="formId">表单 唯一标识</param>

        private BusinessInfo GetBusinessInfo(string formId)

        {

            if (formId.IsNullOrEmptyOrWhiteSpace()) return null;


            return (MetaDataServiceHelper.Load(Context, formId) as FormMetadata).BusinessInfo;

        }


        /// <summary>

        /// 获取 全部属性 的 数据实体类 对象

        /// </summary>

        /// <param name="formId">业务对象</param>

        /// <param name="id">内码</param>

        private DynamicObject GetFullDataEntity(string formId, long id)

        {

            if (formId.IsNullOrEmptyOrWhiteSpace() || id == 0) return null;


            var metadata = MetaDataServiceHelper.Load(Context, formId) as FormMetadata;

            return BusinessDataServiceHelper.LoadSingle(Context, id, metadata.BusinessInfo, null);

        }

    }

}


单据转换通用模板,直接复制过去就能用

单据转换插件,无关联关联关系字段赋值,源单单据头字段到目标单单据体

有一点点基础的开发1. 创建单据转换插件2. 编写代码```public class supplierBillSwitch : AbstractConvertPlugIn{ //源单的数据包(...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息