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

2023-10-31 14:20

本文主要是介绍金蝶云星空创建自动下推并保存公共服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 金蝶云星空创建自动下推并保存公共服务
    • 创建公共方法
      • 按单下推数据
      • 按明细行下推数据
      • 调用下推操作
    • 调用公共方法

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

创建公共方法

按单下推数据

         /// <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;}

按明细行下推数据

         /// <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;}

调用下推操作

 /// <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;}

调用公共方法

在这里插入图片描述
列表插件完整代码

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.0Context 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#endregionbreak;}}}
}

这篇关于金蝶云星空创建自动下推并保存公共服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/315943

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Python Excel实现自动添加编号

《PythonExcel实现自动添加编号》这篇文章主要为大家详细介绍了如何使用Python在Excel中实现自动添加编号效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍简单的说,就是在Excel中有一列h=会有重复

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c