金蝶云星空创建自动下推并保存公共服务

文章目录

金蝶云星空创建自动下推并保存公共服务

创建公共方法

按单下推数据

csharp 复制代码
         /// <summary>
        /// 获取单据转换数据包
        /// </summary>
        public DynamicObject[] GetBillObjDoPush(Context ctx, string sourceFormId, string targetFormId, List<object> sourceBillIds, string convertId = null, string billTypeId = null)
        {
            IConvertService convertService = Kingdee.BOS.App.ServiceHelper.GetService<IConvertService>();
            var rules = convertService.GetConvertRules(ctx, sourceFormId, targetFormId);
            if (rules == null || rules.Count == 0)
            {
                throw new KDBusinessException("", string.Format("未找到{0}到{1}之间,启用的转换规则,无法自动下推!", sourceFormId, targetFormId));
            }
            ConvertRuleElement rule = null;
            if (convertId.IsNullOrEmptyOrWhiteSpace())
            {
                rule = rules.FirstOrDefault(t => t.IsDefault);
            }
            else
            {
                rule = rules.FirstOrDefault(s => s.Id.Equals(convertId));
            }
            if (rule == null)
            {
                rule = rules[0];
            }
            List<ListSelectedRow> srcSelectedRows = new List<ListSelectedRow>();
            foreach (var billId in sourceBillIds)
            {
                srcSelectedRows.Add(new ListSelectedRow(billId.ToString(), string.Empty, 0, sourceFormId));
            }
            string targetBillTypeId = billTypeId == null ? string.Empty : billTypeId;
            long targetOrgId = 0;
            Dictionary<string, object> custParams = new Dictionary<string, object>();
            PushArgs pushArgs = new PushArgs(rule, srcSelectedRows.ToArray())
            {
                TargetBillTypeId = targetBillTypeId,
                TargetOrgId = targetOrgId,
                CustomParams = custParams
            };
            ConvertOperationResult operationResult = convertService.Push(ctx, pushArgs, OperateOption.Create());
            DynamicObject[] targetBillObjs = (from p in operationResult.TargetDataEntities select p.DataEntity).ToArray();
            if (targetBillObjs.Length == 0)
            {
                throw new KDBusinessException("", string.Format("由{0}自动下推{1},没有成功生成数据包,自动下推失败!", sourceFormId, targetFormId));
            }
            return targetBillObjs;
        }

按明细行下推数据

csharp 复制代码
         /// <summary>
        /// 获取单据转换数据包 按明细行下推
        /// </summary>
        public DynamicObject[] GetBillObjDoPushByEntryId(Context ctx, string sourceFormId, string targetFormId, IEnumerable<ListSelectedRow> srcSelectedRows, string convertId = null, string billTypeId = null)
        {
            IConvertService convertService = Kingdee.BOS.App.ServiceHelper.GetService<IConvertService>();
            var rules = convertService.GetConvertRules(ctx, sourceFormId, targetFormId);
            if (rules == null || rules.Count == 0)
            {
                throw new KDBusinessException("", string.Format("未找到{0}到{1}之间,启用的转换规则,无法自动下推!", sourceFormId, targetFormId));
            }
            ConvertRuleElement rule = null;
            if (convertId.IsNullOrEmptyOrWhiteSpace())
            {
                rule = rules.FirstOrDefault(t => t.IsDefault);
            }
            else
            {
                rule = rules.FirstOrDefault(s => s.Id.Equals(convertId));
            }
            if (rule == null)
            {
                rule = rules[0];
            }

            string targetBillTypeId = billTypeId == null ? string.Empty : billTypeId;
            long targetOrgId = 0;
            Dictionary<string, object> custParams = new Dictionary<string, object>();
            PushArgs pushArgs = new PushArgs(rule, srcSelectedRows.ToArray())
            {
                TargetBillTypeId = targetBillTypeId,
                TargetOrgId = targetOrgId,
                CustomParams = custParams
            };
            ConvertOperationResult operationResult = convertService.Push(ctx, pushArgs, OperateOption.Create());
            DynamicObject[] targetBillObjs = (from p in operationResult.TargetDataEntities select p.DataEntity).ToArray();
            if (targetBillObjs.Length == 0)
            {
                throw new KDBusinessException("", string.Format("由{0}自动下推{1},没有成功生成数据包,自动下推失败!", sourceFormId, targetFormId));
            }
            return targetBillObjs;
        }

调用下推操作

csharp 复制代码
 /// <summary>
        /// 下推操作处理
        /// </summary>
        public IOperationResult DoPushOper(Context ctx, DynamicObject[] targetBillObjs, string targetFormId, OperateOption option, IOperationResult billOperationResult, bool isSubmit = false, bool isAudit = false)
        {
            IMetaDataService metaService = Kingdee.BOS.App.ServiceHelper.GetService<IMetaDataService>();
            var targetBillMeta = metaService.Load(ctx, targetFormId) as FormMetadata;
            OperateOption saveOption = OperateOption.Create();
            saveOption.SetIgnoreWarning(true);
            saveOption.SetInteractionFlag(option.GetInteractionFlag());
            saveOption.SetIgnoreInteractionFlag(option.GetIgnoreInteractionFlag());
            try
            {
                var saveResult = Kingdee.K3.MFG.App.AppServiceContext.SaveService.Save(ctx, targetBillMeta.BusinessInfo, targetBillObjs, saveOption, "Save");
                this.CheckOpResult(saveResult, billOperationResult, saveOption);
                if (isSubmit && saveResult.IsSuccess)
                {
                    saveResult = Kingdee.K3.MFG.App.AppServiceContext.SubmitService.Submit(ctx, targetBillMeta.BusinessInfo, targetBillObjs.Select(s => s["Id"]).ToArray(), "Submit", saveOption);
                    this.CheckOpResult(saveResult, billOperationResult, saveOption);
                }
                if (isAudit && saveResult.IsSuccess)
                {
                    List<KeyValuePair<object, object>> keyValuePairs = new List<KeyValuePair<object, object>>();
                    targetBillObjs.ToList().ForEach(item => keyValuePairs.Add(new KeyValuePair<object, object>(item.GetPrimaryKeyValue(), item)));
                    List<object> auditObjs = new List<object>();
                    auditObjs.Add("1");
                    auditObjs.Add("");
                    saveResult = Kingdee.K3.MFG.App.AppServiceContext.SetStatusService.SetBillStatus(ctx, targetBillMeta.BusinessInfo, keyValuePairs, auditObjs, "Audit", saveOption);
                    if (this.CheckOpResult(saveResult, billOperationResult, saveOption)) return saveResult;
                }
                return saveResult;
            }
            catch (Exception ex)
            {
                //string aa = ex.Message;
                throw new KDBusinessException("", ex.Message);
                return null;
            }
        }

        /// <summary>
        /// 判断操作结果是否成功,如果不成功,则直接抛错中断进程
        /// </summary>
        /// <param name="opResult"></param>
        /// <returns></returns>
        private bool CheckOpResult(IOperationResult opResult, IOperationResult operationResult, OperateOption opOption = null, bool isShowError = false)
        {
            bool isSuccess = false;
            if (opResult.IsSuccess)
            {
                // 操作成功
                isSuccess = true;
            }
            else
            {
                if (opResult.InteractionContext != null
                    && opResult.InteractionContext.Option.GetInteractionFlag().Count > 0)
                {// 有交互性提示

                    // 传出交互提示完整信息对象
                    operationResult.InteractionContext = opResult.InteractionContext;
                    // 传出本次交互的标识,
                    // 用户在确认继续后,会重新进入操作;
                    // 将以此标识取本交互是否已经确认过,避免重复交互
                    operationResult.Sponsor = opResult.Sponsor;
                    if (opOption != null)
                    {
                        if (isShowError)
                            throw new KDException("", opResult.InteractionContext.SimpleMessage);
                        else
                        {

                            //throw new KDInteractionException(opOption, opResult.Sponsor);

                            throw new KDException("", ((AbstractInteractionResult)opResult).InteractionContext.SimpleMessage);
                        }

                    }
                    else
                    {
                        // 抛出错误,终止本次操作
                        throw new KDBusinessException("", "本次操作需要用户确认是否继续,暂时中断");
                    }
                }
                else
                {
                    // 操作失败,拼接失败原因,然后抛出中断
                    opResult.MergeValidateErrors();
                    if (opResult.OperateResult == null)
                    {// 未知原因导致提交失败
                        throw new KDBusinessException("", "未知原因导致自动提交、审核失败!");
                    }
                    else
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.AppendLine("自动提交、审核失败,失败原因:");
                        foreach (var operateResult in opResult.OperateResult)
                        {
                            sb.AppendLine(operateResult.Message);
                        }
                        throw new KDBusinessException("", sb.ToString());
                    }
                }
            }
            return isSuccess;
        }

调用公共方法

列表插件完整代码

csharp 复制代码
using Kingdee.BOS;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Util;
using mm.K3.App.Service.Common;
using mm.K3.Core.Const;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace mm.K3.SCM.Business.PlugIn.SC
{
    [Description("售后单-列表界面"), HotUpdate]
    public class AfterOrderList : AbstractListPlugIn
    {
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            switch (e.BarItemKey.ToUpperInvariant())
            {
                case "XXXX_TBPUSHREPLACE":
                    #region 下推对照 XXXX_tbPushReplace
                    #region v3.0
                    Context ctx = this.View.Context;
                    string sourceFormId = FormIdConst.AS_AfterOrder;//售后单
                    string targetFormId = FormIdConst.AS_Replace;//对照表
                    string convertRuleKey = "AS_AfterOrderToReplace";//转换规则
                    // 获取在列表上当前选择需下推的行
                    ListSelectedRow[] selectedRows = ((IListView)this.View).SelectedRowsInfo.ToArray();
                    var action = new ActionCommon();
                    try
                    {
                        var targetBills = action.GetBillObjDoPushByEntryId(ctx, sourceFormId, targetFormId, selectedRows, convertRuleKey);
                        var result=action.DoPushOper(ctx, targetBills, targetFormId, null, null, false, false);//不提交 不审核
                        //var result = action.DoPushOper(ctx, targetBills, targetFormId, null, null, true, true); //自动提交 ,审核
                        if (result.IsSuccess)
                        {
                            string _msg = string.Empty;
                            if (result.OperateResult.Count() > 0)
                            {
                                _msg += string.Join(",", result.OperateResult.Select(s => s.Message));
                            }
                            if (!_msg.IsNullOrEmptyOrWhiteSpace())
                            {
                                this.View.ShowMessage(_msg);
                            }

                        }
                        else
                        {
                            string _msg = string.Empty;
                            if (result.ValidationErrors.Count > 0)
                            {
                                _msg += string.Join(",", result.ValidationErrors.Select(s => s.Message));
                            }
                            if (!_msg.IsNullOrEmptyOrWhiteSpace())
                            {
                                this.View.ShowErrMessage("", _msg, MessageBoxType.Error);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        this.View.ShowErrMessage("", "下推对照时存在异常:" + ex.Message, MessageBoxType.Error);
                        e.Cancel = true;
                        return;

                    }

                    #endregion

                    #endregion
                    break;
            }
        }
    }
}
相关推荐
冷眼看人间恩怨3 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
向宇it4 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
向宇it6 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
星河梦瑾7 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
Hejjon8 小时前
SpringBoot 整合 SQLite 数据库
笔记
长潇若雪9 小时前
《类和对象:基础原理全解析(上篇)》
开发语言·c++·经验分享·类和对象
志-AOX10 小时前
C语言入门指南:从零开始的编程之路
经验分享
WANGWUSAN6610 小时前
Python高频写法总结!
java·linux·开发语言·数据库·经验分享·python·编程
坐井观老天10 小时前
在C#中使用资源保存图像和文本和其他数据并在运行时加载
开发语言·c#
西洼工作室10 小时前
【java 正则表达式 笔记】
java·笔记·正则表达式