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

二开案例.元模型.日志单据

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

二开案例.元模型.日志单据

【应用场景】日志单据专门用于存储和展示日志数据,与单据不同,单据数据存储在业务数据库,而日志单据数据存储在日志数据库,日志单据最大限度的减小了日志功能及日志数据对业务系统的入侵。

【使用限制】日志单据需要启用日志库,公有云不支持日志库,无法使用日志单据功能。

【实现原理】

Context指向业务数据库,Context.LogDBContext指向日志数据库,如果未启用日志库,那么LogDBContext等于null,将无法使用日志单据。往日志单据的日志表中写数据时,需要显示指定使用LogDBContext。

【案例演示】本文演示如何从零开发一张日志单据,用于存储采购订单的操作日志。

<1>环境准备,登录管理中心,启用日志库,一个业务库有且仅有一个日志库。

<2>打开BOSIDE,新建日志单据(元数据见文末附件),如下图所示。

<3>在日志库创建日志单据对应的日志表,对应建表脚本如下。

-------------------------------------------------------------------------------------------------

CREATE TABLE Jac_Log_OperateLog(

FID varchar(36) NOT NULL,

F_JAC_OBJECTTYPEID nvarchar(50) NOT NULL DEFAULT (''),

F_JAC_OBJECTTYPENAME nvarchar(50) NOT NULL DEFAULT (''),

F_JAC_OPERATIONNAME nvarchar(50) NOT NULL DEFAULT (''),

F_JAC_CREATORID int NOT NULL DEFAULT (0),

F_JAC_CREATORNAME nvarchar(50) NOT NULL DEFAULT (''),

F_JAC_CREATETIME datetime NULL DEFAULT (getdate()),

F_JAC_LOG nvarchar(2000) NOT NULL DEFAULT (''),

)

GO


ALTER TABLE Jac_Log_OperateLog ADD CONSTRAINT PK_Jac_Log_OperateLog PRIMARY KEY CLUSTERED (FID ASC)

GO

-------------------------------------------------------------------------------------------------


<4>发布日志单据。

/*

-- 发布菜单

DELETE T_META_CONSOLEDETAIL WHERE FDetailFuncId='5fc5efc2d14e01' 

INSERT INTO T_META_CONSOLEDETAIL(FDETAILFUNCID,FSUBFUNCID,FNUMBER,FOBJECTID,FTYPE,FSTATUS,FPERMISSIONITEMID,FSEQ,FPARAM,FCUSTOMPARAMS,FTHUMB,FLEVEL,FVISIBLE,FFUNCTIONGROUP,FAUTHPMOBJECTTYPEID,FHTMLSTATUS,FEXCELSTATUS,FH5OBJECTID) VALUES ('5fc5efc2d14e01','068cff00618e48f4b22623a826bca1ba',N'CZRZ','Jac_OperateLog','1','1',' ',6,N'{"FormId":"Jac_OperateLog","ShowType":"1","formType":"list"}',N' ',' ',null,29,0,' ','1','0',null)  

DELETE T_META_CONSOLEDETAIL_L WHERE FDetailFuncId = '5fc5efc2d14e01' AND FLOCALEID = 2052

INSERT INTO T_META_CONSOLEDETAIL_L(FPKID, FDETAILFUNCID, FLOCALEID, FNAME, FDESCRIPTION) VALUES('5fc5efc2d14e02','5fc5efc2d14e01',2052, N'操作日志(日志库)', N' ')

 */


<5>编写表单插件,用于操作后写日志库日志,代码如下。

using Kingdee.BOS;

using Kingdee.BOS.App.Data;

using Kingdee.BOS.Core.DynamicForm.PlugIn;

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using Kingdee.BOS.Core.Metadata;

using Kingdee.BOS.Util;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Linq;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【表单插件】将日志写入日志库

    /// </summary>

    [Description("【表单插件】将日志写入日志库"), HotUpdate]

    public class WriteLogToLogDbFormPlugIn : AbstractDynamicFormPlugIn

    {

        public override void AfterDoOperation(AfterDoOperationEventArgs e)

        {

            base.AfterDoOperation(e);

            var log = string.Empty;

            if (e.OperationResult != null)

            {

                log = e.OperationResult.IsSuccess ? "成功" : "失败";

                if (e.OperationResult.OperateResult != null && e.OperationResult.OperateResult.Count > 0)

                {

                    log += "\r\n操作结果:" + string.Join("\r\n", e.OperationResult.OperateResult.Select(o => o.Message));

                }


                if (e.OperationResult.ValidationErrors != null && e.OperationResult.ValidationErrors.Count > 0)

                {

                    log += "\r\n校验错误:" + string.Join("\r\n", e.OperationResult.ValidationErrors.Select(o => o.Message));


                }

            }


            DbLogger.AddOperateLog(this.Context, this.View.BillBusinessInfo, e.Operation.OperationName, log);

        }

    }


    /// <summary>

    /// 日志库日志管理器

    /// </summary>

    public class DbLogger

    {

        /// <summary>

        /// 写操作日志

     

二开案例.元模型.日志单据

【应用场景】日志单据专门用于存储和展示日志数据,与单据不同,单据数据存储在业务数据库,而日志单据数据存储在日志数据库,日志单据最大...
点击下载文档文档为doc格式

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

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