上游新加字段携带到收付款单、退款单 二开处理实例
金蝶云社区-李海洲
李海洲
13人赞赏了该文章 4388次浏览 未经作者许可,禁止转载编辑于2018年05月14日 18:10:49

收付款单、退款单接收上游的信息 是源单明细单据体,如果要携带明细单据体中必须要插件处理才行;以付款申请单上增加合同编号(文本)、合同类型(基础资料)为例子写到到付款单明细中

1、付款申请单明细、付款单源单明细、付款单明细中分别添加合同编号、合同类型两个字段;

2、付款申请-付款单单据转换规则中,添加映射到付款单的源单明细字段(合同编号、合同类型)上

3、编写单据转换规则插件,继承标准产品的单据转换插件就行

4、单据转换规则中挂上二开的插件,取消启用标准产品插件

以下是二开的代码实例

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ComponentModel;

using Kingdee.BOS;

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

using Kingdee.BOS.Core.Metadata;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Util;

using Kingdee.K3.FIN.CN.App.Core;

using Kingdee.K3.FIN.Core;

using Kingdee.BOS.Core;

using Kingdee.BOS.Contracts;

using Kingdee.BOS.App;

using Kingdee.BOS.Resource;

using Kingdee.BOS.Core.Metadata.EntityElement;

using Kingdee.BOS.App.Core.PlugInProxy;

using Kingdee.BOS.Core.DynamicForm;

using Kingdee.BOS.App.Core.DefaultValueService;

namespace Kingdee.K3.FIN.CN.App.ServicePlugIn.BillConvertPlugIn

{

    /// <summary>

    /// 付款申请单到付款单单据转换规则插件:

    ///

    /// </summary>

    [Description("携带分录文本(合同编号 FHTBH)、基础资料(合同类型 FHTLX)到付款单")]

    public class ApplyToPaybillNew : PayApplyToPayBillConvert

    {

        public override void AfterConvert(AfterConvertEventArgs e)

        {

            base.AfterConvert(e);

            //付款单的信息

            ExtendedDataEntity[] headEntity = e.Result.FindByEntityKey("FBillHead");

            foreach (var extendedDataEntity in headEntity)

            {

                //付款单的明细(通过源单明细 汇总(结算方式、付款用途、费用项目)而成)

                DynamicObjectCollection entryCollection = null;

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

                //付款单的源单明细

                DynamicObjectCollection srcentryCollection = null;

                srcentryCollection = extendedDataEntity.DataEntity[this.SourceEntryKey] as DynamicObjectCollection;

               

                //为了获取基础资料整个对象

                IMetaDataService metaService = ServiceHelper.GetService<IMetaDataService>();

                FormMetadata mete = (FormMetadata)metaService.Load(this.Context, "合同类型的FORMID");

                IViewService viewService = ServiceFactory.GetViewService(this.Context);

                // 方案1、这是直接携带,但是有个问题:明细是源单明细的汇总,可能行对应的值不对(存在一行明细对应多行源单明细),如果确定业务没有这种问题,就可以这样写

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

                {

                    long fhtlxId = Convert.ToInt64(srcentryCollection["FHTLX_Id"]);

                    DynamicObject fhtlxobj = viewService.LoadSingle(this.Context, fhtlxId, mete.BusinessInfo.GetDynamicObjectType());

                    entryCollection["FHTLX"] = fhtlxId;

                    entryCollection["FHTLX_Id"] = fhtlxobj;

                    string fhtbh = Convert.ToString(srcentryCollection["FHTBH"]);

                    entryCollection["FHTBH"] = fhtbh;

                }

                //2、这是第二种方案:把明细的清理掉,然后再处理,这样明细和源单明细都是一一对应的

                //DynamicFormModelProxy modelProxy = GetModelProxy(e);

                //// 明细单据体

                //Entity entity = e.TargetBusinessInfo.Entrys.FirstOrDefault(

                //    c => c.EntryName.Equals(this.EntryKey

                //        , StringComparison.OrdinalIgnoreCase));

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

                //{

                //     modelProxy.CreateNewEntryRow(entity, i);

                //    long fhtlxId = Convert.ToInt64(srcentryCollection["FHTLX_Id"]);

                //    DynamicObject fhtlxobj = viewService.LoadSingle(this.Context, fhtlxId, mete.BusinessInfo.GetDynamicObjectType());

                //    entryCollection["FHTLX"] = fhtlxId;

                //    entryCollection["FHTLX_Id"] = fhtlxobj;

                //    string fhtbh = Convert.ToString(srcentryCollection["FHTBH"]);

                //    entryCollection["FHTBH"] = fhtbh;

                //    //下面还要处理应付金额等等其他必录字段,这里就不一一写了

                //}

            }

        }

        /// <summary>

        /// 获取动态模型

        /// </summary>

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

        /// <returns></returns>

        public DynamicFormModelProxy GetModelProxy(AfterConvertEventArgs e)

        {

            DynamicFormModelProxy modelProxy = new DynamicFormModelProxy();

            FormServiceProvider provider = new FormServiceProvider();

            provider.Add(typeof(IDefaultValueCalculator), new DefaultValueCalculator());

            modelProxy.SetContext(this.Context, e.TargetBusinessInfo, provider);

            modelProxy.BeginIniti();

            return modelProxy;

        }

    }

}


赞 13