以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]能否通过表格+代码(在表格中输入加载条件)动态实现加载管理-已解决  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=119631)

--  作者:shenyl0211
--  发布时间: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编辑过]

--  作者:有点甜
--  发布时间:2018/5/29 9:30:00
--  

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

 

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

 


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

--  作者:有点甜
--  发布时间:2018/5/29 12:29:00
--  

函数名可以用中文

 

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


--  作者:shenyl0211
--  发布时间: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编辑过]