FilterDescriptor
筛选器是业务数据目录用于捕获用户(或系统)输入,并将其完全插入后端 API 调用的一种基本方式。FilterDescriptor 描述在一系列复杂的参数中,应该将筛选值插入到什么位置。这是通过对方法定义中表示复杂参数的 TypeDEscriptor“做标记”,以标出应该执行插入的位置而实现的。但需要注意的是,后端必须提供用于筛选的功能;FilterDescriptor 仅形成一种机制以将这一点展示给最终用户。FilterDescriptor 对象为 Method 对象所有(包含在 Method 对象中)。随后 TypeDescriptor 对象引用这些对象
用户可能要检索符合某些条件的实体的实例。例如,用户可能要显示姓名以“A”开头的客户或者某个客户下的订单。用于检索客户的 API 要求传入此用户输入作为调用中的第三个字符串参数。元数据创作者将创建 Wildcard 类型的 FilterDescriptor,然后用这个新创建的 FilterDescriptor 为第三个参数的根 TypeDescriptor 做标记。许多此类 FilterDescriptor 都可以与单个方法 (API) 相关联。然后,用户选择运行时所需的筛选器,为其指定一个值,业务数据目录将该筛选器的值传递到后端方法,同时将其准确插入后端所需的位置,这样使得该值仅返回用户要查看的行。
例如,假定 Customer 实体的 Finder 方法定义如下:
SELECT * FROM Customers WHERE CustomerID >= lo
假定该方法中 lo 的默认参数值为 0。FilterDescriptor 元数据声明如果用户替代 lo 值,则它可以限制所返回实例的范围。这种情况下,用户可以提供 lo 值,并得到特定的结果。
备注
FilterDescriptor 是元数据对象,而筛选器是运行时对象。FilterDescriptor 对象描述对方法可用的筛选器。
筛选模式
业务线 (LOB) 系统提供各种筛选机制。业务数据目录将常用模式抽象化,因此可以为用户提供相同的筛选语义,无论数据源是什么都是如此。业务数据目录支持以下筛选器和筛选模式:
- Wildcard筛选器 将所返回的实例限定为含 field like value 的实例,其中的值可以包含星号 (*) 通配符。用户可以使用此筛选器类型显示更好记的筛选器,例如“starts with”和“contains”。
备注
出于筛选目的,业务数据目录使用 LobSystem 对象元数据中指定的通配符。
Comparison 筛选器 将所返回的实例限定为满足条件的实例。SQL 在 WHERE 子句中支持此筛选器。
Limit 筛选器 将所返回的实例数限制为 n。SQL 在 SELECT TOP 子句中支持此筛选器。使用 Limit 筛选器可以避免长时间等待和超时现象,还可以防止用户发出请求过量数据的不当查询。
UserContext 按当前用户的上下文限制实例。此筛选器让业务数据目录将当前 Microsoft Windows 用户的“域\用户名”附加到方法调用。
Username 按单一登录 (SSO) 用户名限制实例。此筛选器让业务数据目录将来自 SSO 的用户名作为参数的一部分传递给方法调用。
Password 与 Username 筛选器配合工作。此筛选器让业务数据目录将来自 SSO 的密码作为参数的一部分传递给方法调用。
备注
后端方法定义应该支持筛选器。只有这样才能以区分上下文的方式使用筛选器在前端应用程序中反映后端提供的功能。元数据仅声明方法支持何种筛选器。
UserProfile 可以在 FilterDescriptor 定义中指定的简单筛选器类型。若要使用此筛选器,请声明“UserProfile”类型的筛选器,并添加名为“UserProfilePropertyName”的 System.String 属性,属性值为用户配置文件属性的名称。业务数据目录将查找当前用户的配置文件,读取此名称属性的值,并将其完全插入后端调用。
SSOTicket 让业务数据目录将来自 SSO 的 SSO 票证作为参数的一部分传递到方法调用。
LastIdSeen 启用对 IDEnumerator 枚举成员的分块。对于 Web 服务和其他非流式后端应用程序,应该在 IDEnumerator 成员中使用 LastIdSeen 筛选器来提高性能,如下例所示:
SELECT TOP 100 Id FROM Customers WHERE Id>=@LastIdSeen ORDER BY Id
如 Comparison 之类的用户筛选器声明用户可以替代的输入,而利用如 UserContext 和 UserProfile 之类的系统筛选器,业务数据目录可以安全地设置如用户令牌之类的值。
重要
如果元数据创作者创建的不当元数据以用户名作为用户可控制的筛选器并返回敏感的个人数据,则一个用户可能会看到另一个用户的数据。若要避免这种情况,请使用 UserContextFilter 将用户名传递至方法调用。
客户端查询元数据记录库以确定系统支持哪些筛选器,并相应地呈现其用户界面。
示例
<FilterDescriptors>
<FilterDescriptor Type="Wildcard" Name="Name">
<Properties>
<Property Name="UsedForDisambiguation"
Type="System.Boolean">true</Property>
</Properties>
</FilterDescriptor>
<FilterDescriptor Type="Wildcard" Name="ProductNumber" />
</FilterDescriptors>
架构
子级 |
类型 |
出现规律 |
默认值 |
限制/接受的值 |
说明 |
---|---|---|---|---|---|
Type |
属性 (bdc:FilterDescriptorType) |
1..1 |
true |
Limit Comparison Wildcard UserContext Username Password LastId SsoTicket UserProfile |
指定筛选器的类型。 |
属性
以下是对于数据库和 Web 服务系统,FilterDescriptor 对象都接受的属性。
重要
属性区分大小写。
属性 |
类型 |
必需 |
默认值 |
限制/接受的值 |
注释 |
---|---|---|---|---|---|
UsedForDisambiguation |
System.Boolean |
否 |
false |
true false |
如果为 true,则在业务数据选取器中使用此筛选器生成可能的匹配项的列表。 |
CaseSensitive |
System.Boolean |
否 |
false |
true false |
如果为 true,则业务数据 Web 部件和业务数据选取器通知用户此筛选器区分大小写。 |
IsDefault |
System.Boolean |
否 |
false |
true false |
如果为 true,则在业务数据选取器中默认选择此筛选器。 |
See Also
任务
AdventureWorks SQL Server 2000 示例