对话对象 (Outlook)
代表包含一个或多个文件夹和存储中所存储的一个或多个项目的会话。
备注
对话 是抽象、 聚合对象。 一个对话可以包含不同类型的项目,尽管 对话 对象不对应特定的基础 MAPI IMessage 对象。
会话代表一个或多个文件夹和存储中的一个或多个项目。 如果将会话中的某一项目移至 "删除的项目" 文件夹,并在随后使用 GetChildren 、 GetRootItems 或 GetTable 方法枚举会话,该项目将不会包含在返回的对象中。
若要获取当前对话的 对话 对象,使用 GetConversation 方法的项。
一些操作可以通过调用 SetAlwaysAssignCategories , SetAlwaysDelete 或 SetAlwaysMoveToFolder 方法适用于在对话中的项目。 每种操作时将应用于在此对话中的所有项自动调用此方法;此操作也适用于对话中的未来项目只要操作仍适用于对话。 没有任何显式保存在 会话 对象上的方法。
此外,到对话中的项目应用一个操作时,对应的事件发生。 例如, 项目 对象的 ItemChange 事件发生时调用 SetAlwaysAssignCategories ,和 BeforeItemMove文件夹 对象的事件发生时调用 SetAlwaysMoveToFolder 。
示例
下面的托管代码是使用 C# 编写的。 若要运行需要调入组件对象模型 (COM) 的 .NET Framework 托管代码示例,您必须使用可定义托管接口并将其映射到对象模型类型库中的 COM 对象的互操作程序集。 对于 Outlook,您可以使用 Visual Studio 和 Outlook 主互操作程序集 (PIA)。 在您运行适用于 Outlook 2013 的托管代码示例之前,请确保您已安装了 Outlook 2013 PIA 并且已添加了对 Visual Studio 中的 Microsoft Outlook 15.0 对象库组件的引用。 应使用 Office Developer Tools for Visual Studio) 在 Outlook 外接程序 (类中使用以下代码 ThisAddIn
。 代码中的 应用程序对象必须是由 提供的受信任 Outlook ThisAddIn.Globals
对象。 有关使用 Outlook PIA 开发托管 Outlook 解决方案的详细信息,请参阅欢迎使用 MSDN 上的 Outlook 主互操作程序集参考 。
下面的代码示例假定该浏览器窗口中的选定的项的邮件项目。 该代码示例获取所选的邮件项目相关联,并列举在该对话中,显示项目的主题的每一项对话。 方法 DemoConversation
调用所选邮件项的 GetConversation 方法以获取关联的 Conversation 对象。 DemoConversation
然后调用要分别获取一个 Table 对象和 SimpleItems 集合的 对话 对象的 GetTable 和 GetRootItems 方法。 DemoConversation
调用重复性的方法 EnumerateConversation
枚举并显示该对话中的各项主题。
void DemoConversation()
{
object selectedItem =
Application.ActiveExplorer().Selection[1];
// This example uses only
// MailItem. Other item types such as
// MeetingItem and PostItem can participate
// in the conversation.
if (selectedItem is Outlook.MailItem)
{
// Cast selectedItem to MailItem.
Outlook.MailItem mailItem =
selectedItem as Outlook.MailItem;
// Determine the store of the mail item.
Outlook.Folder folder = mailItem.Parent
as Outlook.Folder;
Outlook.Store store = folder.Store;
if (store.IsConversationEnabled == true)
{
// Obtain a Conversation object.
Outlook.Conversation conv =
mailItem.GetConversation();
// Check for null Conversation.
if (conv != null)
{
// Obtain Table that contains rows
// for each item in the conversation.
Outlook.Table table = conv.GetTable();
Debug.WriteLine("Conversation Items Count: " +
table.GetRowCount().ToString());
Debug.WriteLine("Conversation Items from Table:");
while (!table.EndOfTable)
{
Outlook.Row nextRow = table.GetNextRow();
Debug.WriteLine(nextRow["Subject"]
+ " Modified: "
+ nextRow["LastModificationTime"]);
}
Debug.WriteLine("Conversation Items from Root:");
// Obtain root items and enumerate the conversation.
Outlook.SimpleItems simpleItems
= conv.GetRootItems();
foreach (object item in simpleItems)
{
// In this example, only enumerate MailItem type.
// Other types such as PostItem or MeetingItem
// can appear in the conversation.
if (item is Outlook.MailItem)
{
Outlook.MailItem mail = item
as Outlook.MailItem;
Outlook.Folder inFolder =
mail.Parent as Outlook.Folder;
string msg = mail.Subject
+ " in folder " + inFolder.Name;
Debug.WriteLine(msg);
}
// Call EnumerateConversation
// to access child nodes of root items.
EnumerateConversation(item, conv);
}
}
}
}
}
void EnumerateConversation(object item,
Outlook.Conversation conversation)
{
Outlook.SimpleItems items =
conversation.GetChildren(item);
if (items.Count > 0)
{
foreach (object myItem in items)
{
// In this example, only enumerate MailItem type.
// Other types such as PostItem or MeetingItem
// can appear in the conversation.
if (myItem is Outlook.MailItem)
{
Outlook.MailItem mailItem =
myItem as Outlook.MailItem;
Outlook.Folder inFolder =
mailItem.Parent as Outlook.Folder;
string msg = mailItem.Subject
+ " in folder " + inFolder.Name;
Debug.WriteLine(msg);
}
// Continue recursion.
EnumerateConversation(myItem, conversation);
}
}
}
方法
属性
名称 |
---|
Application |
类 |
ConversationID |
Parent |
Session |
另请参阅
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。