【星空-开发】二开插件代码调用下推方法原创
金蝶云社区-雪地上的名字
雪地上的名字
74人赞赏了该文章 703次浏览 未经作者许可,禁止转载编辑于2024年04月23日 09:45:24

业务场景:BOS中可以在单据的操作列表中配置自动下推服务来实现自动下推单据,但局限于源单只能基于本单,无法实现其他源单下推,此时就需要二开插件来实现,自定义推单


using Kingdee.BOS.App;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core.DynamicForm.Operation;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs;
using Kingdee.BOS.Core.Metadata.ConvertElement;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Util;
using Kingdee.BOS;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common.KingDee.Utils.Bill;
using Kingdee.BOS.Orm.DataEntity;

namespace Demo
{
    public  class Demo
    {
        //调用示例
        public void main()
        {
            //销售订单下推发货通知单示例
            ConvertOperationResult inspecResult = BillProcess.DoPush(this.Context, "SAL_SaleOrder", "SAL_DELIVERYNOTICE", "销售订单内码", "发货通知单单据类型(可以为空,会取默认)");
            DynamicObject[] inspecDataObjects = (from p in inspecResult.TargetDataEntities select p.DataEntity).ToArray();//linq拿到下推的数据包

            //循环自定义处理下推数据包
            foreach (var inspecData in inspecDataObjects)
            {
                xxxxx
            }
        }
        /// <summary>
        /// 下推方法
        /// </summary>
        /// <param name="ctx">上下文</param>
        /// <param name="sourceFormId">源单元数据标识</param>
        /// <param name="targetFormId">目标单元数据标识</param>
        /// <param name="sourceBillIds">源单fid</param>
        /// <param name="targetBillTypeId">目标单单据类型</param>
        /// <returns>返回下推结果</returns>        
        public  ConvertOperationResult DoPush(Context ctx, string sourceFormId, string targetFormId, List<long> sourceBillIds, string targetBillTypeId = "")
        {
            IConvertService service = ServiceHelper.GetService<IConvertService>();
            List<ConvertRuleElement> convertRules = service.GetConvertRules(ctx, sourceFormId, targetFormId);
            if (convertRules == null || convertRules.Count == 0)
            {
                throw new KDBusinessException("", $"未找到{sourceFormId}到{targetFormId}之间,启用的转换规则,无法自动下推!");
            }

            ConvertRuleElement rule = convertRules[0];//默认取第一行
            foreach (ConvertRuleElement item in convertRules)//遍历判断是否默认规则,取默认单据转换规则
            {
                if (item.IsDefault)
                {
                    rule = item;
                    break;
                }
            }

            List<ListSelectedRow> list = new List<ListSelectedRow>();
            //取下推数据 默认整单下推
            foreach (long sourceBillId in sourceBillIds)
            {
                list.Add(new ListSelectedRow(sourceBillId.ToString(), string.Empty, 0, sourceFormId));
            }
            //此参数为自定义的下推参数
            Dictionary<string, object> customParams = new Dictionary<string, object>();
            PushArgs pushArgs = new PushArgs(rule, list.ToArray());
            pushArgs.TargetBillTypeId = targetBillTypeId;
            pushArgs.TargetOrgId = 0;
            pushArgs.CustomParams = customParams;
            PushArgs serviceArgs = pushArgs;
            ConvertOperationResult convertOperationResult = service.Push(ctx, serviceArgs, OperateOption.Create());
            if (ListUtils.IsEmpty(convertOperationResult.TargetDataEntities))
            {
                throw new KDBusinessException("", $"由{sourceFormId}自动下推{targetFormId},没有成功生成数据包,自动下推失败!");
            }

            return convertOperationResult;
        }
    }
}

更多精彩内容,请查阅如下地址,谢谢

https://vip.kingdee.com/article/518480895951406080?productLineId=1

赞 74