电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

二开案例.服务插件.获取工作流审核调用堆栈

来源:金蝶云社区作者:金蝶2024-09-235

二开案例.服务插件.获取工作流审核调用堆栈

【应用场景】

日志跟踪。

工作流偶发出现单据的流程实例尚未结束,但是单据已被审核,且不知道是何原因被审核,此时可通过挂载此插件进行追踪。


【案例演示】

采购订单,捕获审批时的调用堆栈。


【实现步骤】

<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 voi

二开案例.服务插件.获取工作流审核调用堆栈

【应用场景】日志跟踪。工作流偶发出现单据的流程实例尚未结束,但是单据已被审核,且不知道是何原因被审核,此时可通过挂载此插件进行追踪...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信