如何使用EWS从Outlook联系人中读取扩展属性

3

我目前正在尝试通过Microsoft的EWS托管API从Outlook联系人对象中读取特定属性。 我通过FindItems()函数检索这些联系人对象。其中一些字段是扩展属性,例如TitleUser1字段,我无法读取它们。目前,我有:

Guid propertySetId = new Guid("{00062004-0000-0000-C000-000000000046}");
ExtendedPropertyDefinition titleProp = new ExtendedPropertyDefinition(propertySetId, 0x3A45, MapiPropertyType.String);
ExtendedPropertyDefinition user1Prop = new ExtendedPropertyDefinition(propertySetId, 0x804F, MapiPropertyType.String);

string title, user1;
contact.TryGetProperty(titleProp, out title);
contact.TryGetProperty(user1Prop, out user1);

运行此代码时,TryGetProperty 始终返回 false。我已验证这些字段在我要搜索的 Outlook 联系人中是填充的。
编辑:这是我检索联系人对象的方式。
ExchangeService service = //...
Mailbox userMailbox = new Mailbox(emailAddress);
FolderId folderId = new FolderId(WellKnownFolderName.Contacts, userMailbox);
FindItemsResults<Item> results;
const string AQS = "Category:~>\"CategoryTag\"";
ItemView view = new ItemView(200);
results = service.FindItems(folderId, AQS, view);
foreach (var result in results)
{
    Contact contact = result as Contact;
    //...Try to read fields
}

你需要包含 Contact.Bind() 的代码或者其他获取 contact 字段引用的方式。 - SliverNinja - MSFT
1个回答

5
您需要更改 ItemView包含您想访问的属性 (PropertySet)。 请注意保留HTML标记。
var user1Val = string.Empty;
var user1Prop = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Address, 0x804F, MapiPropertyType.String);
ExtendedPropertyDefinition[] extendedFields = new ExtendedPropertyDefinition[] { user1Prop };
PropertySet extendedPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, extendedFields);
ItemView view = new ItemView(200) { PropertySet = extendedPropertySet };
// ...
var title = contact.CompleteName.Title; // Title value
contact.TryGetProperty(user1Prop, out user1Val); // user field 1 value

1
我目前需要检索4个不同的扩展属性。这些属性是CustomerId、Title、User1和Email1AddressType。通过您的更改,我能够检索CustomerId和Email1AddressType,但是Title和User1仍然无法读取。您知道原因吗? - Klam
1
尝试将user1Prop更改为以下内容:ExtendedPropertyDefinition user1Prop = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Address, 0x804F, MapiPropertyType.String); - SliverNinja - MSFT
1
对于“Title”,您应该使用Contact.CompleteName.Title来检索值(一个一级属性)。 - SliverNinja - MSFT
我在哪里可以找到那些带有“0x3A45”数字的Outlook属性列表?(MSDN总是把这样的东西藏起来不让我看到...) - Jan
1
找到了某些东西(PDF的直接下载链接):http://interoperability.blob.core.windows.net/files/MS-OXPROPS/[MS-OXPROPS]-080627.pdf - Jan
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接