One-Off 表

适用于:Outlook 2013 | Outlook 2016

一次性表包含通讯簿提供商支持创建新收件人的模板的相关信息。 一次性表由通讯簿提供程序、单个通讯簿容器和 MAPI 实现,可以是永久性表,也可以是临时表。

注意

不要将一次性表中的模板与模板标识符混淆;虽然它们的用途相似,但代码构造却毫无相似之处。 模板用于创建特定类型的收件人,而模板标识符用于使用代码绑定属于主机提供程序的一个收件人的数据,以支持属于外部提供程序的另一个收件人。

客户端创建新收件人:

  • 将 添加到传出邮件的收件人列表。

  • 添加到通讯簿中的某个容器。

在这两种情况下,都要求通讯簿提供程序返回一次性表。 通讯簿提供程序可以实现在两种情况下使用的单个一次性表,也可以实现每种情况的唯一一次性表。

当收件人将包含在传出邮件中时,MAPI 会调用通讯簿提供程序的 IABLogon::GetOneOffTable 方法来检索其一次性表。 一次性表包含模板,使用户能够输入信息,从而创建具有有效地址的收件人。 MAPI 注册此表上的通知,使其保持打开状态,以便可以向用户反映更改。 仅当调用其子系统或通讯簿状态对象的 IMAPIStatus::ValidateState 方法时,MAPI 才会释放表。

当收件人将添加到容器时,MAPI 会发出不同的调用,调用容器的 IMAPIProp::OpenProperty 方法检索其 PR_CREATE_TEMPLATES (PidTagCreateTemplates) 属性。 此一次性表中包含的模板集表示可添加到容器的收件人类型。 例如,邮件服务器通常会为安装的每个网关公开一个容器,以便每个容器仅包含特定于相应网关的地址。

MAPI 提供一次性表,其中包含其自己的模板以及会话中每个通讯簿提供程序的模板。 MAPI 提供了一个通用模板,该模板可用于为任何地址类型创建新收件人,前提是用户知道其格式。 通讯簿提供程序通过调用 IMAPISupport::GetOneOffTable 使用此一次性表。 MAPI 一次性表中包含的每个模板都会创建具有有效收件人地址的收件人。

通讯簿提供商通常为其支持的每个地址类型提供一个模板。 但是,不需要支持模板。 当 MAPI 调用请求一次性表时,不允许创建新地址的通讯簿提供程序可能会返回MAPI_E_NO_SUPPORT。 允许创建新地址但不提供任何模板的通讯簿提供程序可以调用 IMAPISupport::GetOneOffTable ,以使用 MAPI 一次性表中列出的模板。

以下属性构成一次性表中所需的列集:

PR_ADDRTYPE 指示可与使用模板创建的新收件人关联的地址类型。

PR_DISPLAY_NAMEPR_DISPLAY_TYPE 将数据与新收件人相关联。 PR_DISPLAY_NAME 包含一个标识新收件人的字符串, PR_DISPLAY_TYPE 包含一个常量,该常量标识要与行一起显示的图标类型。 消息用户的模板将其 PR_DISPLAY_TYPE 列设置为DT_MAILUSER;通讯组列表的模板将其 PR_DISPLAY_TYPE 列设置为DT_DISTLIST。

PR_ENTRYID 是用于创建新收件人的模板的条目标识符。 此条目标识符可以传递给将来 的 IAddrBook::NewEntryIAddrBook::OpenEntryIABContainer::CreateEntry 调用。 容器将其默认消息用户模板行的 PR_ENTRYID 列设置为 PR_DEF_CREATE_MAILUSER (PidTagDefCreateMailuser) ,将默认通讯组列表模板行的 PR_ENTRYID 列设置为 PR_DEF_CREATE_DL (PidTagDefCreateDl) 。

PR_DEPTH 用于通过指示模板的缩进级别来支持一次性表中条目的分层显示。 尽管一次性表可以显示为平面列表或分层显示,但后者更可取,通讯簿提供商应通过适当设置每一行 的PR_DEPTH 列来支持它。 PR_DEPTH 从零开始;其 PR_DEPTH 列中值为 0 的行不会缩进。 PR_DEPTH的值越高,行缩进的越多。 例如, PR_DEPTH 设置为 1 的行将缩进一个制表位,而 PR_DEPTH 设置为 3 的行则缩进三个制表符。

PR_SELECTABLE 用于指示表中的行是否表示可以选择并用于创建新收件人的模板。 尽管一次性表中的大多数行都表示模板,但提供程序可以包含非模板行。 例如,提供程序可能希望按模板类型组织一次性表,包括显示在显示中但不用于创建收件人的类别行。

另请参阅

MAPI 表