由于缺少对“用户”数据类型结构的明确定义,在设计InfoPath表达式时往往会耗用大量时间尝试,而且不一定能得到期望结果。下面对用户数据类型的结构进行详细解析。
>> 什么是用户数据类型
用户数据类型即保存用户信息的数据类型。直观上,在InfoPaht“域”列表中它前面是两个小人的图片;点击“域属性”,其数据类型为“UserType”;用户数据类型缺省对应的控件类型为“个人/组选择器”。
>> 数据结构定义
为方便表述,下面用“UserType”表述用户数据类型对应的类名。借用面向对象语言的表达方式,其成员及属性结构如下:
UserType.Person
UserType.Person.DisplayName
UserType.Person.AccountId
UserType.Person.AccountType
>> 类及成员字符串取值
在InfoPath表达式中对域值做比较时,一般会首先将其转换为字符串,下面以一个示例说明其字符串化后的取值:
UserType — 诸葛亮SHUGUO\liang.zhugeUser
UserType.Person — 诸葛亮SHUGUO\liang.zhugeUser
UserType.Person.DisplayName — 诸葛亮
UserType.Person.AccountId — SHUGUO\liang.zhuge
UserType.Person.AccountType — User
>> 如何应用
对于用户数据类型的一种应用场景是比较当前用户是否等于某个用户数据类型的字段值。获取当前用户对应的方法是:userName(),但其返回值形如“liang.zhuge”。所以,若直接拿用户数据类型的域与userName比较,一定无法达到预期结果。所以,对于这种情况,可创建一个规则,并设计如下条件来实现:
AccountId 包含 userName()