2012-12-18 2 views
0

C# 및 Exchange 웹 서비스 API를 사용하고 있는데 계정이라는 확장 속성을 사용하여 연락처를 검색하는 방법을 찾을 수 없습니다. 우리는이 필드를 사용하여 자체 개발 시스템에 의미있는 정수를 저장했습니다. WebDAV에서 Contact를 가져 오는 방법을 알고 있었지만이를 수행하는 방법을 보여주기 위해 약간의 도움이 필요합니다 (짧은 예제 또는 코드 조각).Exchange 웹 서비스 - 계정 확장 속성을 사용하여 연락처를 검색하는 방법

답변

0

약속과 함께 확장 속성을 사용 했으므로 연락처와 동일한 개념으로 작업 할 수도 있습니다.

아이디어는 고유 ID가 일정하지 않으므로 약속에 대한 Guid를 넣는 것입니다.

private static readonly PropertyDefinitionBase AppointementIdPropertyDefinition = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "AppointmentID", MapiPropertyType.String); 
public static PropertySet PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointementIdPropertyDefinition); 


//Setting the property for the appointment 
public static void SetGuidForAppointement(Appointment appointment) 
{ 
    try 
    { 
     appointment.SetExtendedProperty((ExtendedPropertyDefinition)AppointementIdPropertyDefinition, Guid.NewGuid().ToString()); 
     appointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToNone); 
    } 
    catch (Exception ex) 
    { 
     // logging the exception 
    } 
} 

//Getting the property for the appointment 
public static string GetGuidForAppointement(Appointment appointment) 
{ 
    var result = ""; 
    try 
    { 
     appointment.Load(PropertySet); 
     foreach (var extendedProperty in appointment.ExtendedProperties) 
     { 
      if (extendedProperty.PropertyDefinition.Name == "AppointmentID") 
      { 
       result = extendedProperty.Value.ToString(); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
    // logging the exception 
    } 
    return result; 
} 
0

확실하지 여전히이 필요합니다 ...하지만 난 그냥 뭔가 자신을 닫습니다 해결하는 경우 :

answer here 당신이 원하는 것을 야구장에 있어야합니다. 나는 여기뿐만 아니라 부울을 사용하고 있습니다 :

ExchangeService service = this.GetService(); // my method to build service 
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 
       )); 
} 
관련 문제