让不同用户处理不同的行

我们已经学会了如何设置代码,使得用户只能编辑自己负责的行,而对于其他用户负责的行,则只能查看,不能编辑。
不过有的时候,对于其他用户负责的行,连查看都是不允许的。
对于这种情况,我们可以用动态加载的功能,在打开项目后,只加载登录用户负责的行即可实现目的。

以订单表为例,我们要求:

1、张经理可以处理所有订单。
2、其他用户只能处理自己负责的订单。

设计步骤:

1、首先我们要确保在初始状态下,不加载任何订单,对于内部表和外部表,有不同的处理方式。

如果是内部表,设置BeforeLoadInnerTable事件为:

If e.DataTableName = "订单" Then
   
e.Filter = "[_Identify] Is Null"
End If

如果是外部表,可以在定义外部表的时候,直接定义加载条件:

由于任何行的_Identify列的内容都不可能为空,所以上述代码和设置会使得初始状态不会加载任何订单。

2、在项目的LoadUserSetting事件中设置代码,加载用户负责的订单:

If User.Name = "张经理" Then
    DataTables("订单").LoadFilter = ""
Else
   
DataTables("订单").LoadFilter = "业务员 = '" & User.Name & "'"
End
If
DataTables
("订单").Load()

这样用户登录后,系统判断登录用户是否是张经理,如果是的,则加载所有订单,否则只加载登录用户负责的订单。

上面的代码是基于用户名的,同样可以改为基于用户分组的,只需将上述代码中的User.Name改为User.Group,并将用户名替换为分组名即可。


本页地址:http://www.foxtable.com/webhelp/topics/2256.htm