使用EWS管理的API读取自定义列
本文关键字:读取 自定义 API EWS 管理 使用 | 更新日期: 2023-09-27 17:50:34
我需要读取和写入我在Outlook中的进程邮箱(公共邮箱?)中创建的自定义列。
我想我应该以某种方式使用ExtendedPropertyDefinition,但是,我不知道如何使用。如果这有意义的话,我没有列的GUID。
我已经将自定义列命名为'Engineer',并且使用了此代码,但是我得到的ext props计数为0。
ExtendedPropertyDefinition myExtDef=
new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings,
"Engineer",
MapiPropertyType.String);
和
PropertySet propertySet =
new PropertySet(BasePropertySet.FirstClassProperties, myExtDef);
最后foreach (Item item in findResults)
{
EmailMessage message =
EmailMessage.Bind(service, item.Id, new PropertySet(propertySet));
}
当我调试和检查findResults中的'item'时,我看到了subject属性和所有这些,但ExtendedProperties计数为0。似乎是我定义扩展属性的方式有问题。
谁能帮我读和写自定义列?
编辑:我现在不确定这是否可以使用托管API实现。如果有人有什么好主意,我就接受。我已经检查了以下所有内容,但都无济于事。
使用EWS管理的API访问自定义联系人http://msdn.microsoft.com/en-us/library/office/dd633697 (v = exchg.80) . aspx
和其他人…
Marton,
看起来您已经掌握了使用扩展属性的基本概念。很难说问题出在哪里,因为只有几段代码。下面是一个示例,您应该能够从中构建。它创建一个新的邮件,设置扩展属性,然后保存邮件(到草稿文件夹)。
// Create a definition for the extended property.
ExtendedPropertyDefinition extendedPropertyDefinition = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "Engineer", MapiPropertyType.String);
// Create an e-mail message that you will add the extended property to.
EmailMessage message = new EmailMessage(service);
message.Subject = "Saved with custom ExtendedPropertyDefinition.";
message.Body = "The Engineer custom value is stored within the extended property.";
message.ToRecipients.Add("user@contoso.com");
// Add the extended property to an e-mail message object.
message.SetExtendedProperty(extendedPropertyDefinition, "Save some customer value");
message.Save();
现在要验证消息是用扩展属性创建的,您可以使用FindItems。下面的示例将在drafts文件夹中搜索带有"Engineer"扩展属性的消息。
ItemView view = new ItemView(10);
// Create a definition for the extended property.
ExtendedPropertyDefinition extendedPropertyDefinition = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "Engineer", MapiPropertyType.String);
// Create a search filter the filters email based on the existence of the extended property.
SearchFilter.Exists customPropertyExistsFilter = new SearchFilter.Exists(extendedPropertyDefinition);
// Create a property set that includes the extended property definition.
view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, extendedPropertyDefinition);
// Search the drafts folder with the defined view and search filter.
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Drafts, customPropertyExistsFilter, view);
// Search the e-mail collection returned in the results for the extended property.
foreach (Item item in findResults.Items)
{
Console.WriteLine(item.Subject);
// Check whether the item has the custom extended property set.
if (item.ExtendedProperties.Count > 0)
{
// Display the extended name and value of the extended property.
foreach (ExtendedProperty extendedProperty in item.ExtendedProperties)
{
Console.WriteLine(" Extended Property Name: " + extendedProperty.PropertyDefinition.Name);
Console.WriteLine(" Extended Property Value: " + extendedProperty.Value);
}
}
else
{
Console.WriteLine(" This email does not have the 'Engineer' extended property set on it");
}
}
为了在Outlook的自定义表单中查看和更新这些扩展属性,需要做一些额外的工作。Outlook表单使用附加属性将扩展属性存储为二进制字段。PidLidPropertyDefinitionStream以及扩展的属性都需要修改。不幸的是,EWS Managed API不能为您完成此操作,因此您必须自己编写一些代码来读取/更新此属性。我没有任何示例代码可以向您展示,但是这里有一些关于属性结构的链接,可以帮助您学习:
- PidLidPropertyDefinitionStream规范属性- http://msdn.microsoft.com/en-us/library/ee415119(v=office.14).aspx
- 属性定义流结构- http://msdn.microsoft.com/en-us/library/ee415116(v=office.14).aspx