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

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

相关文章

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计

贝壳面试:什么是回表?什么是索引下推?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL 索引下推 的认识? 2.在MySQL中,索引下推 是如何实现的?请简述其工作原理。 3、说说什么是 回表,什么是 索引下推 ? 最近有小伙伴在面试 贝壳、soul,又遇到了相关的