0

C# と Exchange Web サービス API を使用していますが、Account という名前の拡張プロパティを使用して連絡先を取得する方法が見つかりません。このフィールドを使用して、社内で開発されたシステムにとって意味のある整数を保持しています。WebDAV の下で、連絡先を取得する方法はわかっていましたが、その方法を示すために何らかの助け (できれば短い例またはコード スニペット) が必要です。

4

2 に答える 2

0

これがまだ必要かどうかはわかりません...しかし、私は自分自身に近いものを解決しました:

ここでの私の答えは、あなたが望むものの球場にあるはずです。ここではブール値とアカウントを使用しています。

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
                ));
}
于 2013-05-24T03:20:00.253 に答える
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;
}
于 2012-12-19T09:50:23.433 に答える