二开案例.服务插件.获取工作流审核调用堆栈
【应用场景】
日志跟踪。
工作流偶发出现单据的流程实例尚未结束,但是单据已被审核,且不知道是何原因被审核,此时可通过挂载此插件进行追踪。
【案例演示】
采购订单,捕获审批时的调用堆栈。
【实现步骤】
<1>编写服务插件,代码如下。
using Kingdee.BOS; using Kingdee.BOS.App.Core; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Transactions; namespace Jac.XkDemo.BOS.App.PlugIn { /// <summary> /// 【服务插件】获取工作流审核调用堆栈 /// </summary> [Description("【服务插件】获取工作流审核调用堆栈"), HotUpdate] public class WFAuditLogServicePlugInn : AbstractOperationServicePlugIn { public override void EndOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EndOperationTransactionArgs e) { var formId = this.BusinessInfo.GetForm().Id; foreach (var obj in e.DataEntitys) { try { if (!obj.Contains("Id") || obj["Id"] == null) continue; var log = GetCurrentStackInfo(); var keyValue = (obj["Id"] ?? "").ToString(); using (var tran = new KDTransactionScope(TransactionScopeOption.Suppress)) { WriteActionEventLog(this.Context, formId, keyValue, log); tran.Complete(); } } catch { } } } /// <summary> /// 获取堆栈信息 /// </summary> /// <param name="topLevel"></param> /// <returns></returns> private string GetCurrentStackInfo(int topLevel = 100) { var logs = new List<string>(); logs.Add("堆栈信息:"); var stackFrames = new StackTrace().GetFrames(); foreach (var stackFrame in stackFrames) { try { topLevel--; if (topLevel < 0) { break; } var method = stackFrame.GetMethod(); var log = string.Format("【{0}】=>{1}->{2}->{3}", method.Name, method.Module, method.DeclaringType == null ? "" : method.DeclaringType.FullName, method); logs.Add(log); } catch { } } var logData = string.Join("\r\n", logs); return logData; } /// <summary> /// 添加工作流节点日志 /// </summary> /// <param name="ctx"></param> /// <param name="formId"></param> /// <param name="keyValue"></param> /// <param name="log"></param> private void WriteActionEventLog(Context ctx, string formId, string keyValue, string log) { // 获取工作流当前节点内码 var sql = string.Format(@"SELECT T_WF_ACTINST.FACTINSTID FROM T_WF_PIBIMAP JOIN T_WF_ACTINST ON T_WF_ACTINST.FPROCINSTID = T_WF_PIBIMAP.FPROCINSTID WHERE T_WF_PIBIMAP.FOBJECTTYPEID = '{0}' AND T_WF_PIBIMAP.FKEYVALUE = '{1}' ORDER BY T_WF_ACTINST.FCREATETIME DESC", formId, keyValue); var actInstId = DBUtils.ExecuteScalar<string>(ctx, sql, ""); if (string.IsNullOrWhiteSpace(actInstId)) { return; } // 将日志信息写入工作流动作执行记录表 sql = @"INSERT INTO T_WF_ACTIONEVENTLOG(FACTIONLOGID,FACTINSTID,FACTIONEVENTID,FEXECUTEDTIME,FEXECUTELOG) VALUES (@FACTIONLOGID,@FACTINSTID,@FACTIONEVENTID,@FEXECUTEDTIME,@FEXECUTELOG)"; var paras = new List<SqlParam>() { new SqlParam("@FACTIONLOGID", KDDbType.AnsiString, new DBService().GetSequenceString(1)[0]), new SqlParam("@FACTINSTID", KDDbType.AnsiString, actInstId), new SqlParam("@FACTIONEVENTID", KDDbType.Int32, -100), new SqlParam("@FEXECUTEDTIME", KDDbType.DateTime, DateTime.Now), new SqlParam("@FEXECUTELOG", KDDbType.String, log) }; DBUtils.Execute(ctx, sql, paras); } } }
<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。
<3>BOSIDE扩展采购订单,审核操作注册服务插件,保存元数据,开发完毕。
【功能验证】
<1>登录业务站点,打开采购订单新增界面,创建新单,提交工作流,审批单据,完成后,即可前往流程管理中心提取审核操作的堆栈信息,有了堆栈信息,就能知道此次审批的大部分细节信息啦。
流程管理中心选中某个流程,长按Ctrl+Enter,可以调出菜单【导出流程数据】
流程数据:
---------------------------------------------------------------------------------------------------------
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.服务插件.获取工作流审核调用堆栈
【应用场景】日志跟踪。工作流偶发出现单据的流程实例尚未结束,但是单据已被审核,且不知道是何原因被审核,此时可通过挂载此插件进行追踪...
点击下载文档
本文2024-09-23 03:33:33发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-159631.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章