Exchange Web 服务 - 如何使用 Account 扩展属性检索联系人

Posted

技术标签:

【中文标题】Exchange Web 服务 - 如何使用 Account 扩展属性检索联系人【英文标题】:Exchange Web Services - How to retrieve a Contact using the Account extended property 【发布时间】:2012-12-18 19:00:46 【问题描述】:

我正在使用 C# 和 Exchange Web 服务 API,但无法找到使用名为 Account 的扩展属性检索联系人的方法。我们使用这个字段来保存一个对内部开发系统有意义的整数。在 WebDAV 下,我们知道如何检索联系人,但需要一些帮助(希望是一个简短的示例或代码 sn-p)来演示如何执行此操作。

【问题讨论】:

【参考方案1】:

我在约会中使用了扩展属性,所以它们的工作原理可能与联系人相同。

这个想法是为约会放置一个 Guid,因为他们的本地 ID 不是恒定的。

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;

【讨论】:

【参考方案2】:

不确定你是否还需要这个...但我刚刚解决了一些自己关闭的问题:

我的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
                ));

【讨论】:

以上是关于Exchange Web 服务 - 如何使用 Account 扩展属性检索联系人的主要内容,如果未能解决你的问题,请参考以下文章

Exchange Web 服务托管 API:如何通过 FindItem 方法执行重复扩展?

Exchange Web 服务 (EWS) - 如何识别会议参与者是邮件组还是个人参与者

用于不知名文件夹名称的 Exchange Web 服务 FolderId

导入 Exchange Web 服务 (EWS) wsdl 文件时如何修复未解析的类型?

GetUserAvailabilityResults在Exchange Web服务的工作时间之外显示结果

使用Exchange Web服务API