2013-04-19 6 views
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 
          )); 
} 

목표는 공용 주소록에서 연락처 정보를 가져 와서 다른 프로그램과 동기화 할 수 있습니다.EWS 연락처 - 고객 ID 및 계정

공개 주소록의 각 연락처에 대해 DisplayName, EmailAddress 및 내 사용자 정의 속성이 인쇄됩니다. 거기에는 문제가 없습니다.

내가 가진 문제는 특정 속성을 끌어 올 올바른 주문을 얻지 못하는 것입니다. CustomerID와 Account는 내가 잡아 당기거나 인쇄 할 수없는 두 가지 예입니다. 그들은 내가 만들지 않은만큼 "Custom"이 아닙니다.

EWS를 통해 연락처에서 CustomerID와 Account를 얻으려면 어떻게해야합니까?

답변

0

GUID는 계정 및 CustomerID를 .. 필요하지 않습니다와 이름이 고유 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이 발견되었습니다.

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