Foxtable(狐表)用户栏目专家坐堂 → 求助:非开发者或非管理员登录问题


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

主题:求助:非开发者或非管理员登录问题

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


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
求助:非开发者或非管理员登录问题  发帖心情 Post By:2022/2/9 20:19:00 [只看该作者]

1、开发者或管理员身份登录没有问题
2、其它身份登录出现如图错误(不同用户错误提示表不同)
3、但对应的项目事件代码里面不涉及相关表,只是可视化授权相关代码
4、此前一直没有问题,可视化授权代码一直都在
求解?


图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2022/2/9 20:23:48编辑过]

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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/10 8:24:00 [只看该作者]

贴出出错事件代码。应该是权限表配置有问题,没有加载或者卸载隐藏了需要使用的表

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


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
  发帖心情 Post By:2022/2/10 9:56:00 [只看该作者]

1、项目AfterOpenProject事件代码


If User.Type <> UserTypeEnum.Developer '隐藏表名,仅开发者可见.

    TableCaptionVisible = False
End If
Syscmd.Project.Update(False,False) '静默升级
forms("主界面").open '打开窗口
forms("背景窗口").open '打开背景窗口
MainTable = Tables("A") '打开背景主表
HttpServer.Start() '开启http服务器
If user.Type = userTypeEnum.user Then '非开发者或管理员不可见下列表
    Tables("yh1").Visible = False
End If
For Each t As Table In Tables '切换用户时可见控制代码
    t.Visible = True
    t.AllowEdit = True
    For Each c As Col In t.Cols
        c.Visible = True
        c.AllowEdit = True
    Next
Next
Tables("yh1").Visible = (User.Type <> UserTypeEnum.User )'非开发者或管理员不可见此表
If User.Type = UserTypeEnum.User Then
    For Each dr As DataRow In DataTables("yh1").Select("用户名 = '" & User.Name & "'" )
        If dr.IsNull("列名") Then
            Tables(dr("授权项目")).Visible = Not dr("不可见")
            Tables(dr("授权项目")).AllowEdit = Not dr("不可编辑")
        Else
            Tables(dr("授权项目")).Cols(dr("列名")).Visible = Not dr("不可见")
            Tables(dr("授权项目")).Cols(dr("列名")).AllowEdit = Not dr("不可编辑")
        End If
    Next
End If


[此贴子已经被作者于2022/2/10 9:56:21编辑过]

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


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
  发帖心情 Post By:2022/2/10 9:56:00 [只看该作者]

2、项目LoadUserSetting 事件代码

For Each t As Table In Tables '切换用户时可见控制代码
    t.Visible = True
    t.AllowEdit = True
    For Each c As Col In t.Cols
        c.Visible = True
        c.AllowEdit = True
    Next
Next
Tables("yh1").Visible = (User.Type <> UserTypeEnum.User )'非开发者或管理员不可见此表
If User.Type = UserTypeEnum.User Then
    For Each dr As DataRow In DataTables("yh1").Select("用户名 = '" & User.Name & "'" )
        If dr.IsNull("列名") Then
            Tables(dr("授权项目")).Visible = Not dr("不可见")
            Tables(dr("授权项目")).AllowEdit = Not dr("不可编辑")
            DataTables(dr("授权项目")).AllowClipBoard = Not dr("不可复制")
        Else
            Tables(dr("授权项目")).Cols(dr("列名")).Visible = Not dr("不可见")
            Tables(dr("授权项目")).Cols(dr("列名")).AllowEdit = Not dr("不可编辑")
            DataTables(dr("授权项目")).AllowClipBoard = Not dr("不可复制")
        End If
    Next
End If


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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/10 10:07:00 [只看该作者]

首先升级代码的用法不正确:http://www.foxtable.com/webhelp/topics/2934.htm

如果我们在AfterOpenProject下面的代码:

Syscmd.Project.Update(False,False)
Forms("窗口1").Open() '可能会出错
'后续其它代码

目的是希望打开项目的时候自动升级,然后打开窗口1。
但是上述代码肯定会在升级成功之后提示错误,因为一旦升级成功,Foxtable就会关闭,后面的打开窗口代码就会出错,当然后续其它的代码也一样会出错。
我们可以用下面的代码避免错误:

If Syscmd.Project.Update(False,False) = False Then '如果没有升级
    
Forms("窗口1").open()
    '后续其它代码
End
 If

也就是说Update执行后会返回一个逻辑值,如果升级成功,返回True,否则返回False。

总之,如果需要在AfterOpenPoject事件中实现自动升级,那么原有的AfterOpenProject事件代码必须包括在这个判断中,只有没有升级的情况下,才执行原来的代码:

If Syscmd.Project.Update(False,False) = False Then '如果没有升级
    '原AfterOpenProject事件代码
End
 If


改正升级代码后如果还有问题,检查一下权限表的设置,确定存在“hp1”的表格,并且已经加载

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


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
  发帖心情 Post By:2022/2/10 13:01:00 [只看该作者]

已改,问题依旧

以前一直都没问题的

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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/10 13:35:00 [只看该作者]

检查一下权限表的设置,确定存在“hp1”的表格,并且已经加载

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


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
  发帖心情 Post By:2022/2/10 15:17:00 [只看该作者]

有的,不止这些表,但因为表很多,都设置为动态加载
先前这样也不会有问题

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


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/10 15:48:00 [只看该作者]

怎么设置的‘动态加载’?表格都没有加载,权限表里用到并设置肯定是出错的。之前没有问题,可能是之前权限表没有针对这些表的设置

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


加好友 发短信
等级:一尾狐 帖子:454 积分:3241 威望:0 精华:0 注册:2019/11/3 22:21:00
  发帖心情 Post By:2022/2/11 6:52:00 [只看该作者]

1、项目BeforeLoadOuterTable事件代码,默认不加载其它表,用界面按钮加载

Select Case e.DataTableName
    Case "A","yh1","mls" ,"用户" '无条件加载这些表
    Case "sjklb"
        If e.User.Type <> UserTypeEnum.Developer Then '只有开发者才加载表sjklb
            e.Cancel = True
        End If
    Case Else '其他所有表默认都不加载
        e.Cancel = True
End Select
2、根据版主意见改良后的AfterOpenProject代码
If User.Type <> UserTypeEnum.Developer '隐藏表名,仅开发者可见.
    TableCaptionVisible = False
End If
Syscmd.Project.Update(False,False) '静默升级
If Syscmd.Project.Update(False,False) = False Then '如果没有升级
    forms("主界面").open '打开窗口
    forms("背景窗口").open '打开背景窗口
    MainTable = Tables("A") '打开背景主表 '原AfterOpenProject事件代码
    HttpServer.Start() '开启http服务器
    If user.Type = userTypeEnum.user Then '非开发者或管理员不可见下列表
        Tables("yh1").Visible = False
    End If
End If

 回到顶部
总数 16 1 2 下一页