IMAPITable::Restrict

适用于:Outlook 2013 | Outlook 2016

将筛选器应用于表,将行集减少到仅与指定条件匹配的行。

HRESULT Restrict(
LPSRestriction lpRestriction,
ULONG ulFlags
);

参数

lpRestriction

[in]指向定义筛选器条件的 SRestriction 结构的指针。 在 lpRestriction 参数中传递 NULL 会删除当前筛选器。

ulFlags

[in]控制限制操作计时的标志的位掩码。 可以设置以下标志:

TBL_ASYNC

异步启动操作,并在操作完成之前返回。

TBL_BATCH

延迟对筛选器的评估,直到需要表中的数据。

返回值

S_OK

已成功应用筛选器。

MAPI_E_BUSY

另一个操作正在进行中,该操作阻止限制操作启动。 应允许正在进行的操作完成,或者应停止该操作。

MAPI_E_TOO_COMPLEX

表无法执行该操作,因为 lpRestriction 参数指向的特定筛选器太复杂。

备注

IMAPITable::Restrict 方法对表建立限制或筛选器。 如果存在以前的限制,则会放弃该限制并应用新的限制。 应用限制不会影响表的基础数据;它只需通过将可检索的行限制为包含满足限制的数据的行来更改视图。

有几种不同类型的限制,每种限制都使用不同的结构进行描述。 SRestriction 结构包含两个成员:一个指示限制类型和适用于该类型的特定结构的值。

永远不会生成因调用 Restrict 而隐藏在视图中的表行的通知。

多值属性的属性限制的工作方式类似于对单值属性的限制。 要在属性限制中使用的多值属性必须设置MVI_FLAG标志。 如果未设置此标志,则会将其视为完全有序的元组。 对两个多值列的比较按顺序比较列元素,报告列在第一个不等式处的关系。 仅当比较的列以相同顺序包含相同的值时,才会返回相等性。 如果一列的值比另一列少,则报告的关系是另一个值为 null 值的关系。

有关限制的详细信息,请参阅 关于限制

注意

如果创建动态查询来搜索服务器上的数据,请使用 FindRow 方法,而不是同时使用 Restrict 方法和 QueryRows 方法。 Restrict 方法创建缓存视图,该视图用于评估添加到基文件夹中或修改的所有邮件。 如果客户端应用程序对每个动态查询使用 Restrict 方法,则会为每个查询创建缓存视图。

给调用方的说明

若要放弃当前限制而不创建新的限制,请在 lpRestriction 中传递 NULL。

如果正在进行另一个异步表调用,导致 Restrict 返回MAPI_E_BUSY,则可以调用 IMAPITable::Abort 来停止调用。

除非 设置了其中一个标志,否则 Restrict 将同步运行。 如果设置TBL_BATCH标志, 则 Restrict 将推迟对限制的评估,除非请求数据。 如果设置了TBL_ASYNC标志, 则 Restrict将异步操作,可能会在操作完成之前返回 。

调用 Restrict 时,将丢弃表的所有书签,并将当前光标位置BOOKMARK_CURRENT设置为表的开头。

如果尝试对不在表的列集中的属性施加属性限制,则结果未定义。 如果不确定表中是否支持某个属性,请将属性限制与存在限制组合在一起。 存在限制在尝试施加属性限制之前检查属性是否存在。

不要期望收到由于限制而从表中筛选的行的表通知。

MFCMAPI 引用

有关 MFCMAPI 示例代码,请参阅下表。

文件 函数 Comment
ContentsTableListCtrl.cpp
CContentsTableListCtrl::ApplyRestriction
MFCMAPI 使用 IMAPITable::Restrict 方法对表设置限制。

另请参阅

IMAPITable::Abort

IMAPITable::FindRow

IMAPITable::GetRowCount

IMAPITable::QueryRows

SPropertyRestriction

IMAPITable : IUnknown

MFCMAPI 代码示例