状态表和状态对象
适用于:Outlook 2013 | Outlook 2016
MAPI 提供了一个表,其中包含有关 MAPI 子系统、MAPI 后台处理程序、通讯簿或特定服务提供程序的状态信息。 可以通过调用 IMAPISession::GetStatusTable 来访问此表。
状态表中的每一行都表示 MAPI 或服务提供商实现的状态对象。 可以使用状态对象显示提供程序的配置属性表、更改提供程序密码、上传或下载消息,以及与特定传输提供程序通信。
可通过两种方式访问状态对象:
通过状态表
通过登录对象的 OpenStatusEntry 方法
由于登录对象对客户端不可用,因此必须使用状态表来访问状态对象。 状态表方法是间接的,需要在打开 status 对象之前进行几次调用,并返回指向其 IMAPIStatus 实现的指针。
使用状态表打开状态对象
调用 IMAPIStatus::GetStatusTable 以检索 IMAPITable 指针。
调用状态表的 IMAPITable::SetColumns 方法,将列设置为 PR_ENTRYID (PidTagEntryId) ,PR_RESOURCE_TYPE (PidTagResourceType) ,PR_DISPLAY_NAME (PidTagDisplayName) 。
将表视图限制为特定的状态对象。 对于 MAPI 实现,客户端可以使用 PR_RESOURCE_TYPE 定义属性限制。 对于服务提供程序实现,客户端可以限制 PR_PROVIDER_DISPLAY (PidTagProviderDisplay) 、提供程序的名称,或者 限制PR_PROVIDER_DLL_NAME (PidTagProviderDllName) 提供程序 DLL 文件的名称。
调用 IMAPITable::Restrict 设置限制。
调用 HrQueryAllRows,传入 SPropertyRestriction 结构,以检索表示提供程序状态的行。
调用 IMAPISession::OpenEntry,指定状态表行中的条目标识符,打开状态对象并检索 IMAPIStatus 指针。
若要显示属性表,请为目标提供程序调用 status 对象的 IMAPIStatus::SettingsDialog 方法。 SettingsDialog 显示属性表,用于查看和在某些情况下更改提供程序的配置属性。
若要与传输提供程序通信,请调用其状态对象的 IMAPIStatus::ValidateState 方法。 ValidateState 可以重新配置传输提供程序,阻止提供程序显示用户界面,并控制涉及从远程服务器下载消息标头的会话,具体取决于传入的标志。 例如,若要取消远程标头的下载,请将 ABORT_XP_HEADER_OPERATION 标志传递给 ValidateState。 若要连接或断开与远程服务器的连接,请传递FORCE_XP_CONNECT或FORCE_XP_DISCONNECT。 若要重新配置提供程序,请传递CONFIG_CHANGED。
实现按需发送或接收消息的客户端调用传输提供程序的 或 MAPI 后台处理程序的 IMAPIStatus::FlushQueues 方法。 可以将三个标志传递到 方法中:FLUSH_UPLOAD、FLUSH_DOWNLOAD 和 FLUSH_FORCE。 FLUSH_UPLOAD指示提供程序或 MAPI 后台处理程序发送在输出队列中等待的任何消息,而FLUSH_DOWNLOAD指示提供程序或 MAPI 后台处理程序接收任何传入消息。 可以使用其他任一标志设置FLUSH_FORCE,以便无论时间如何,状态对象都会执行刷新。
不要期望能够对任何 MAPI 子系统、MAPI 后台处理程序或通讯簿状态对象调用 SettingsDialog 或 ChangePassword 。 子系统和通讯簿状态对象仅支持 ValidateState;MAPI 后台处理程序状态对象支持 FlushQueues 以及 ValidateState。