以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]能否通过表格+代码(在表格中输入加载条件)动态实现加载管理-已解决 (http://foxtable.net/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("函数") |
-- 作者: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编辑过]
|