然后在订单表的DataRowAdding事件 中加入代码:
e.DataRow("业务员") = User.name
这样新增订单的时候,会自动在业务员列填入当前登录用户名。
3、最后将订单表的PrepareEdit事件设置为:
If e.Row("业务员") <> User.Name Then
e.Cancel = True
End If
这样在编辑某个订单前,会自动判断负责此订单的业务员是否和登录用户名相同,如果不同,则取消编辑。
让不同用户处理不同的行
我们已经学会了如何设置代码,使得用户只能编辑自己负责的行,而对于其他用户负责的行,则只能查看,不能编辑。
不过有的时候,对于其他用户负责的行,连查看都是不允许的。
对于这种情况,我们可以用动态加载的功能,在打开项目后,只加载登录用户负责的行即可实现目的。
以订单表为例,我们要求:
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,并将用户名替换为分组名即可。
1.现在有以下问题
1.1实例中,张经理,是写死,实际开发中,都用,部门,姓名来,还实例说用户管理,取经理,实际开发销售经理只负责销售,也只能看销售,采购经理只负责采购,也只能看采购。
1.1.1如果小张和小明都是经理,但实际小张是销售经理,小明采购经理,按实例说,定为经理,会造成错乱,是不是不能在用户管理写经理,要区分开,销售经理,采购经理.
1.1、2 上面好象分开,但还是不灵活,因为有客户销售经理不叫销售经理,而叫业务经理,然而我们权限代码写是销售经理,会造成报错,无法执行,应如何写?
1.2 加载实际是以编辑者,有一种情况,比如业务员张三接之前李四的工作,那以编辑者,之前订单是李四编辑,不是张三,那张三是不是看不到?
1.3 有时经理下有组长,再有业务员,如何实现经理可看本部门,组长只看本组长,业务员只看自己?