商信互联
所述eXpressApp框架提供了各种方法来过滤列表视图:上的数据源水平,通过应用模型以及用于过滤“查找属性编辑器”的列表视图的特殊方法。在每种方法中,您可能需要将静态变量设置为过滤条件值。例如,过滤器“ Task.DueDate必须设置为当前日期”需要使用CurrentDate变量(每次需要时都要计算)。为此,请使用函数标准运算符,这些运算符表示返回特定值(例如当前日期或当前用户)或处理指定参数的结果的函数(例如串联函数)。本主题描述函数标准运算符,显示在过滤时如何使用它们,并说明如何实现自定义函数运算符。
功能标准运算符是标准语言的一部分。在条件字符串中,“功能条件运算符”名称后应跟括号,其中包含表示函数参数的操作数;如果不带参数,则为空括号。以下条件演示了如何使用LocalDateTimeToday运算符:
[Task.DueDate] = LocalDateTimeToday()
开箱即用的是多个功能条件运算符,例如LocalDateTimeAfterTomorrow或Replace。请参阅FunctionOperatorType帮助主题以获取完整列表。下表列出了XAF应用程序中可用的特定于XAF的功能标准运算符:
操作员 | 描述 | 例子 |
---|---|---|
CurrentUserId() | 返回当前用户的标识符。此自定义功能条件运算符已在SystemModule的ModuleBase.CustomizeTypesInfo方法重写中注册。此运算符的Evaluate方法返回SecuritySystem.CurrentUserId属性值。 | User.Oid = CurrentUserId() |
IsCurrentUserInRole(角色名称) | 确定是否将当前登录的用户分配给指定角色。当前没有用户登录时返回false。该SecurityModule注册该自定义函数的标准操作员在XafApplication.LoggedOn事件处理程序,如果SecuritySystem.CurrentUser实现IUserWithRoles或ISecurityUserWithRoles接口。此Operator的Evaluate方法将SecuritySystem.CurrentUser属性值强制转换为IUserWithRoles和ISecurityUserWithRoles接口,并检查Roles集合是否包含指定的角色。 | IsCurrentUserInRole('Admin') |
IsNewObject(obj) | 仅适用于XPO对象。指示是否创建了指定对象但尚未将其保存到数据库。此运算符的Evaluate方法使用静态XPObjectSpace.FindObjectSpaceByObject方法获取当前的对象空间,然后返回XPObjectSpace.IsNewObject结果,如果未找到对象空间,则返回false。您只能在客户端使用此运算符;不要在安全权限标准中使用它。 | IsNewObject(This) IsNewObject(Manager) |
该日期时间参数不支持加法和减法运算。以下表达式不正确:
[Task.DueDate]>(LocalDateTimeToday()-3)和[Task.DueDate] <(LocalDateTimeToday() 3)
要从DateTime参数中添加或减去值,请使用XPO公开的DateTime管理功能,例如AddDays和AddYears。例如,这是编写先前条件的正确方法:
[Task.DueDate]> ADDDAYS(LocalDateTimeToday(),-3)和[Task.DueDate] <ADDDAYS(LocalDateTimeToday(),3)
有关带有说明的功能的完整列表,请参阅“标准语言语法”帮助主题。
DateTime参数支持某些数据库管理系统(DBMS)中的普通加法和减法操作-在服务器端对这种表达式求值时不会出错。例如,当通过ListViewFilterAttribute过滤列表视图时,条件在服务器上处理。如果服务器支持DateTime参数的加减运算(例如,MS SQL Server或MS Jet数据库引擎),则将正确处理该条件。
在移动应用程序中使用功能条件运算符时,请注意以下限制: