Foxtable(狐表)用户栏目专家坐堂 → 请教操作日志问题


  共有4955人关注过本帖树形打印复制链接

主题:请教操作日志问题

帅哥哟,离线,有人找我吗?
xnsiwei
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
请教操作日志问题  发帖心情 Post By:2022/4/1 4:32:00 [显示全部帖子]

操作日志记录代码如下
1、项目事件切换:LoadUserSetting
For Each dt As DataTable In DataTables
    dt.GlobalHandler.DataColChanged = True '全局表事件DataColChanged事件列数据变化对所有表有效
    dt.GlobalHandler.DataRowAdded = True '全局表事件DataRowAdded事件增加行对所有表有效
   Next
2、项目事件加载:AfterOpenProject
For Each dt As DataTable In DataTables
    dt.GlobalHandler.DataColChanged = True '全局表事件DataColChanged事件列数据变化对所有表有效
    dt.GlobalHandler.DataRowAdded = True '全局表事件DataRowAdded事件增加行对所有表有效
Next

3、项目全局表事件数据变化:DataColChanged
If e.DataTable.Name <> "数据操作日志" Then
    If e.DataRow.RowState = 2 Then
        Return
    Else
        Dim dr As DataRow = DataTables("数据操作日志").AddNew
        dr("ID") = e.DataRow("_Identify")
        dr("用户") = User.Name
        dr("涉及表") = e.DataTable.Name
        dr("涉及列") = e.DataCol.Name
        dr("涉及行") = e.DataRow("_Identify")
        dr("时间") = Date.Now
        dr("操作") = """" & e.OldValue &  """ 改成了 """ & e.NewValue & """"
        Dim str As String = ""
        For Each c As DataCol In e.DataTable.DataCols
            str += c.Name & "=" & e.DataRow(c.Name) & "|"
        Next
        dr("原行数据") = str
dr.save
    End If
End If
4、项目全局表事件增加行:DataRowAdded
If e.DataTable.Name <> "数据操作日志" Then
    Dim dr As DataRow = DataTables("数据操作日志").AddNew
    dr("ID") = e.DataRow("_Identify")
    dr("用户") = User.Name
    dr("涉及表") = e.DataTable.Name
    dr("涉及列") = Nothing
    dr("涉及行") = e.DataRow("_Identify")
    dr("时间") = Date.Now
    dr("操作") = "增加了一行"
    Dim str As String = ""
    For Each c As DataCol In e.DataTable.DataCols
        str += c.Name & "=" & e.DataRow(c.Name) & "|"
    Next
    dr("原行数据") = str
dr.save
End If

出现问题如下:
1、直接以普通用户登录,操作相关表后无法记录日志
2、直接以普通用户登录,切换到开发者,再切换到普通用户,操作相关表后可以记录日志
3、以开发登录再切换到普通用户,操作相关表后可以记录日志
就是说普通用户直接登录不能记录操作日志

请教版主!!


 回到顶部
帅哥哟,离线,有人找我吗?
xnsiwei
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
  发帖心情 Post By:2022/4/1 8:56:00 [显示全部帖子]

我的表是动态加载的,有关系吗?


 回到顶部
帅哥哟,离线,有人找我吗?
xnsiwei
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
  发帖心情 Post By:2022/4/1 9:17:00 [显示全部帖子]

把全局代码放到:
3、项目事件加载BeforeLoadInnerTable,动态加载表情况下
For Each dt As DataTable In DataTables
    dt.GlobalHandler.DataColChanged = True '全局表事件DataColChanged事件列数据变化对所有表有效
    dt.GlobalHandler.DataRowAdded = True '全局表事件DataRowAdded事件增加行对所有表有效
Next
4、项目事件加载BeforeLoadOuterTable,动态加载表情况下
For Each dt As DataTable In DataTables
    dt.GlobalHandler.DataColChanged = True '全局表事件DataColChanged事件列数据变化对所有表有效
    dt.GlobalHandler.DataRowAdded = True '全局表事件DataRowAdded事件增加行对所有表有效
Next

动态加载表后,操作日志问题解决

 回到顶部
帅哥哟,离线,有人找我吗?
xnsiwei
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
  发帖心情 Post By:2022/4/2 9:33:00 [显示全部帖子]


一、把全局代码放到下面事件的第一行后会使起初不加载表的代码失效,影响了项目的启动速度:
1、项目事件加载BeforeLoadInnerTable,动态加载表情况下
2、项目事件加载BeforeLoadOuterTable,动态加载表情况下
二、不放到事件的第一行,起初不加载表的代码有效,但记录不了操作日志
三、测试后解决办法:
按照版主的意见,动态加载的,在加载后调用GlobalHandler.DataColChanged = True, GlobalHandler.DataRowAdded = True 

再次谢谢版主!


[此贴子已经被作者于2022/4/3 4:55:36编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
xnsiwei
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
把调用代码放在加载代码后面就可  发帖心情 Post By:2022/4/2 10:25:00 [显示全部帖子]


以下内容只有回复后才可以浏览

把调用代码放在加载代码后面就可
[此贴子已经被作者于2022/4/3 4:54:30编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
xnsiwei
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
  发帖心情 Post By:2022/4/16 9:19:00 [显示全部帖子]

谢谢

 回到顶部