Foxtable(狐表)用户栏目专家坐堂 → [求助]能否通过表格+代码(在表格中输入加载条件)动态实现加载管理-已解决


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

主题:[求助]能否通过表格+代码(在表格中输入加载条件)动态实现加载管理-已解决

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[求助]能否通过表格+代码(在表格中输入加载条件)动态实现加载管理-已解决  发帖心情 Post By:2018/5/29 9:08:00 [只看该作者]

表和列的权限管理(简称权限管理)和菜单按钮的权限管理(简称菜单管理)可以通过表格+代码的形式,实现动态管理,权限明了、代码简单,修改权限也无需重新修改代码、发布项目,用户也无需升级系统,非常高效。
那么,所有表的加载条件(即根据不同的角色加载不同的行),是否也可以通过表格+代码的形式,实现动态管理?
现在AfterOpenProject的代码如下:
With DataTables("项目管理")
    Select Case _userroles
        Case "一般人员"
            .loadFilter = "[项目经理] = '" & _username & "'or [借款人] = '" & _username & "'"
        Case "部门干事","部门领导","体系管理"
            .LoadFilter = "[部门名称] In (" & _usergroup & ")"
        Case "部门会计"
            .LoadFilter = "会计核算部门 In (" & _usergroup & ") Or 部门名称 In (" & _usergroup & ")"
        Case "财务领导","生产领导","公司领导","合同管理","产值管理","开发者","管理者"
            .LoadFilter = ""
        Case "审核人员","担保管理","物业管理"
            .loadFilter = "[_Identify] Is null"
    End Select
End With
若想增加“加载管理”表(有序号、表名、角色、加载条件4列),实现动态管理,用下列代码:
Dim drs As List (of DataRow)
Dim dr As DataRow
Dim role As String = "'%" & _userroles & "%'"
Dim code As String
drs = DataTables("加载管理").SQLSelect("角色名称 like " & role,"","序号")
For Each dr In drs
    functions.remove("loadstr") '必须先删除
    code = "dim str As String =" & dr("加载条件") & vbcrlf
    code = code & "return str"
    functions.add("loadstr",code)
    functions.complie()
    DataTables(dr("表名")).LoadFilter = functions.execute("loadstr")
Next
[此贴子已经被作者于2018/5/29 15:38:43编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/29 9:30:00 [只看该作者]

字符串需要动态编译一下,才能得到变量的值的。

 

http://www.foxtable.com/webhelp/scr/1487.htm

 


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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2018/5/29 12:22:00 [只看该作者]

谢谢甜版,问题已经解决,代码就在1楼。但也费了很多周折。
1、帮助文档举例的代表性太差;
2、帮助文档根本不提不能用汉字作为函数名(用汉字的结果会让人莫名其妙,甚至怀疑系统出了问题);
3、帮助文档根本不提应该先删除函数;
所以:
4、寥寥几行代码(仅增加简单的6行、修改简单的1处,却折腾了我一早上),版主直接给出就行了;
5、有时候还不能完全靠版主,必须看看狐友是怎么解决问题的。
[此贴子已经被作者于2018/5/29 12:22:24编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/29 12:29:00 [只看该作者]

函数名可以用中文

 

Functions.remove("函数")
Dim Code As String
Code = "msgbox(123)"
Functions.Add("函数",Code)
Functions.Complie()
Functions.Execute("函数")


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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2018/5/29 15:35:00 [只看该作者]

1、用英文函数名、没用remove,因代码不合适,不成功。
2、搜索并参照http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=94344&skin=0的6楼和7楼,用汉字函数名、用remove(第一次测试也没用remove),也因为历史的原因,也不成功,并一直提示与其他表相关的一些表名和列名信息,却与测试表格(项目管理、加载管理)无关,非常纳闷。
3、重新打开项目,仍然一直提示与其他表相关的一些表名和列名信息。
4、函数名改成英文,好了。
5、甜版代码确实没问题。
6、现在测试自己的代码:下列循环内的代码,如果用“加载”,会加载全部;如果“加载”改成“loadstr”,则仅加载符合条件的,太不可思议了。
    functions.remove("loadstr")
    functions.remove("加载")
    code = "dim str As String =" & dr("加载条件") & vbcrlf
    code = code & "return str"
    functions.add("加载",code)
    functions.complie()
    DataTables(dr("表名")).LoadFilter = functions.execute("加载")
    DataTables(dr("表名")).Load

[此贴子已经被作者于2018/5/29 15:36:52编辑过]

 回到顶部