插件案例 —— 自动下推 自动审核原创
74人赞赏了该文章
1.3万次浏览
编辑于2020年08月03日 17:31:05
摘要由AI智能服务提供
本文讨论了一个案例背景,即在配置自动下推服务后,如何实现任意流程的自动下推及下游单据的自动审核。文中首先介绍了在审核操作上配置自动下推服务,并设定了默认的自动下推单据转换规则。接着,通过代码示例展示了在物料清单上保存操作时,如何通过插件实现自动提交和审核。代码部分详细描述了如何在保存操作完毕、事务结束前进行自动提交和审核的逻辑,包括如何检查是否从自动下推而来、如何取到需要自动处理的单据内码、如何设置提交和审核的参数、以及如何调用相关服务执行提交和审核操作,并对结果进行判断处理。
案例背景:
像入库配置了自动下推到应付后,可以选择应付到自动审核的状态。那么我们想扩展开发任意流程的自动下推,然后下游单据自动审核,如何操作呢?
案例需求:自动下推后自动审核
一、自动下推
如图,在审核操作上,配置自动下推服务。
配置默认的自动下推单据转换规则。
二、下游单据自动审核
比如上图配置的是XX流程到物料清单的流程,那么我们在物料清单上保存操作,配置插件。
代码如下,可通用。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using Kingdee.BOS; using Kingdee.BOS.Util; using Kingdee.BOS.Core; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm; using Kingdee.BOS.Contracts; using Kingdee.BOS.App; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Interaction; namespace 你的命名空间 { [HotUpdate] public class MaterialListSave : AbstractOperationServicePlugIn { /// /// 保存操作完毕,事务结束之前,进行自动提交、审核 /// /// public override void EndOperationTransaction(EndOperationTransactionArgs e) { string saveTime = ""; this.Option.TryGetVariableValue<string>("ConvertType", out saveTime); //只有从自动下推的,才自动提交审核 if (string.Compare(saveTime, "AutoPush", true) != 0) { return; } // 取到需要自动提交、审核的单据内码 object[] pkArray = (from p in e.DataEntitys select p[0]).ToArray(); // 设置提交参数 // using Kingdee.BOS.Orm; OperateOption submitOption = OperateOption.Create(); submitOption.SetIgnoreWarning(this.Option.GetIgnoreWarning()); submitOption.SetInteractionFlag(this.Option.GetInteractionFlag()); submitOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag()); // 创建提交服务:using Kingdee.BOS.Contracts; using Kingdee.BOS.App; ISubmitService submitService = ServiceFactory.GetSubmitService(this.Context); IOperationResult submitResult = submitService.Submit( this.Context, this.BusinessInfo, pkArray, "Submit", submitOption); // 判断提交结果,如果失败,则内部会抛出错误,回滚代码 if (CheckOpResult(submitResult) == false) { return; } // 构建操作可选参数对象 OperateOption auditOption = OperateOption.Create(); auditOption.SetIgnoreWarning(this.Option.GetIgnoreWarning()); auditOption.SetInteractionFlag(this.Option.GetInteractionFlag()); auditOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag()); // 构建单据主键参数 List<KeyValuePair<object, object>> pkEntityIds = new List<KeyValuePair<object, object>>(); foreach (var pkValue in pkArray) { pkEntityIds.Add(new KeyValuePair<object, object>(pkValue, "")); } List<object> paras = new List<object>(); paras.Add("1"); paras.Add(""); // 调用审核操作 ISetStatusService setStatusService = ServiceFactory.GetSetStatusService(this.Context); // 如下调用方式,需显示交互信息 IOperationResult auditResult = setStatusService.SetBillStatus(this.Context, this.BusinessInfo, pkEntityIds, paras, "Audit", auditOption); // 判断审核结果,如果失败,则内部会抛出错误,回滚代码 if (CheckOpResult(auditResult) == false) { return; } } /// /// 判断操作结果是否成功,如果不成功,则直接抛错中断进程 /// /// /// private bool CheckOpResult(IOperationResult opResult) { bool isSuccess = false; if (opResult.IsSuccess == true) { // 操作成功 isSuccess = true; } else { if (opResult.InteractionContext != null && opResult.InteractionContext.Option.GetInteractionFlag().Count > 0) {// 有交互性提示 // 传出交互提示完整信息对象 this.OperationResult.InteractionContext = opResult.InteractionContext; // 传出本次交互的标识, // 用户在确认继续后,会重新进入操作; // 将以此标识取本交互是否已经确认过,避免重复交互 this.OperationResult.Sponsor = opResult.Sponsor; // 抛出错误,终止本次操作 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; } } }
赞 74
74人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *
10金币20金币30金币40金币50金币60金币
可用金币: 0