EWS获得联系人 - CustomerID&帐户

时间:2013-04-19 17:22:49

标签: c# contacts exchangewebservices

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从联系人中获取客户ID和帐户?

1 个答案:

答案 0 :(得分:0)

帐户和客户ID不需要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没有正确映射....自定义布尔值正确拉动,但自定义整数不是。

编辑:发现双重工作,其中整数没有。

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
            ));
}