我需要读取和编写我在Outlook中的进程邮箱(公共邮箱?)中创建的自定义列。
我想我应该以某种方式使用ExtendedPropertyDefinition,但是,我不知道如何。如果这有意义,我没有列的GUID。
我已将自定义列命名为“Engineer”,使用此代码,但我获得了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实现这一点。如果有任何人有一些想法,我会接受它。我已经检查了以下所有内容,但无济于事。
Accessing custom contacts using EWS managed API http://msdn.microsoft.com/en-us/library/office/dd633697(v=exchg.80).aspx
还有其他人......
答案 0 :(得分:1)
马顿,
看起来你有使用扩展属性的基本概念是正确的。很难说问题出在哪里,因为您的代码只有几个片段。这是一个你应该能够构建的例子。它会创建一个新邮件,设置扩展属性,然后保存邮件(到草稿文件夹)。
// 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。以下示例将使用" 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不会为您执行此操作,因此您必须自己编写一些代码来读取/更新此属性。我没有任何示例代码可以向您展示,但这里有一些关于属性结构的链接,可以帮助您: