0
ExchangeService service = this.GetService();
FolderId folderID = GetPublicFolderID(service, "My Address Book");
ContactsFolder folder = ContactsFolder.Bind(service, folderID);
int folderCount = folder.TotalCount;

var guid       = DefaultExtendedPropertySet.PublicStrings;
var epdCP      = new ExtendedPropertyDefinition(guid, "CustomProp", MapiPropertyType.Boolean);
var epdAccount = new ExtendedPropertyDefinition(guid, "Account", MapiPropertyType.String);
var epdCID     = new ExtendedPropertyDefinition(guid, "CustomerID", MapiPropertyType.Integer);

var view = new ItemView(folderCount);
view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties);
view.PropertySet.Add(epdCP);
view.PropertySet.Add(epdAccount);
view.PropertySet.Add(epdCID);
var contacts = service.FindItems(folderID, view);

foreach (Contact contact in contacts)
{
    bool CP;
    string Account;
    int  CID;

    contact.GetLoadedPropertyDefinitions();
    contact.TryGetProperty(epdCP, out CP);
    contact.TryGetProperty(epdAccuont, out Account);
    contact.TryGetProperty(epdCID, out CID);

    Console.WriteLine(String.Format("{0, -20} - {1} - {2}"
                                    , contact.DisplayName
                                    , contact.EmailAddresses[EmailAddressKey.EmailAddress1]
                                    , CP
                                    , Account
                                    , CID
                            ));
}

目标是从公共通讯簿中获取联系信息,以便我可以将其与我们拥有的另一个程序同步。

对于公共通讯簿中的每个联系人,这将打印出 DisplayName、EmailAddress 和我的自定义属性。那里没有问题。

我遇到的问题是我似乎无法获得正确的咒语来拉动某些属性。CustomerID 和 Account 是我似乎无法提取/打印的两个示例。它们不是“自定义”,就像我没有创建它们一样。

如何通过 EWS 从联系人中获取 CustomerID 和 Account?

4

1 回答 1

0

Account 和 CustomerID 不需要 GUID。名称必须是唯一 ID:

var guid       = DefaultExtendedPropertySet.PublicStrings;
var epdAccount = new ExtendedPropertyDefinition(0x3A00, MapiPropertyType.String);
var epdCID     = new ExtendedPropertyDefinition(0x3A4A, MapiPropertyType.String);
var epdCP      = new ExtendedPropertyDefinition(guid, "CustomBln", MapiPropertyType.Boolean);
var epdCI      = new ExtendedPropertyDefinition(guid, "CustomInt", MapiPropertyType.Integer);

现在,如果我能弄清楚为什么 MapiPropertyType.Integer 没有正确映射......自定义布尔值正确拉动,但自定义整数不是。

编辑:发现 double 有效,而 Integer 没有。

var epdCI      = new ExtendedPropertyDefinition(guid, "CustomInt", MapiPropertyType.Double);

编辑示例:

ExchangeService service = this.GetService();
FolderId folderID = GetPublicFolderID(service, "My Address Book");
ContactsFolder folder = ContactsFolder.Bind(service, folderID);
int folderCount = folder.TotalCount;

var guid       = DefaultExtendedPropertySet.PublicStrings;
var epdAccount = new ExtendedPropertyDefinition(0x3A00, MapiPropertyType.String);
var epdCID     = new ExtendedPropertyDefinition(0x3A4A, MapiPropertyType.String);
var epdCBLN    = new ExtendedPropertyDefinition(guid, "CustomBln", MapiPropertyType.Boolean);
var epdCDBL    = new ExtendedPropertyDefinition(guid, "CustomDbl", MapiPropertyType.Double);

var view = new ItemView(folderCount);
view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties);
view.PropertySet.Add(epdAccount);
view.PropertySet.Add(epdCID);
view.PropertySet.Add(epdCBLN);
view.PropertySet.Add(epdCDBL);

//var searchOrFilterCollection = new List<SearchFilter>();
//searchOrFilterCollection.Add(new SearchFilter.IsEqualTo(epdCBLN, true));
//searchOrFilterCollection.Add(new SearchFilter.IsEqualTo(epdAccount, "user"));
//var filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchOrFilterCollection);
var filter = new SearchFilter.IsEqualTo(epdAccount, "user");

var contacts = service.FindItems(folderID, filter, view);

foreach (Contact contact in contacts)
{
    string Account;
    int  CID;
    bool CBLN;
    double CDBL;

    contact.GetLoadedPropertyDefinitions();
    contact.TryGetProperty(epdAccuont, out Account);
    contact.TryGetProperty(epdCID, out CID);
    contact.TryGetProperty(epdCBLN, out CBLN);
    contact.TryGetProperty(epdCDBL, out CDBL);

    Console.WriteLine(String.Format("{0, -20} - {1} - {2} - {3} - {4}"
                    , contact.DisplayName
                    , contact.EmailAddresses[EmailAddressKey.EmailAddress1]
                    , Account
                    , CID
                    , CBLN
                    , CDBL
            ));
}
于 2013-05-24T02:21:57.123 回答