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

目標は、公開アドレス帳から連絡先情報を取得して、所有している別のプログラムと同期できるようにすることです。

公開アドレス帳の連絡先ごとに、DisplayName、EmailAddress、およびカスタム プロパティが出力されます。そこに問題はありません。

私が抱えている問題は、特定のプロパティを引き出すための適切な呪文を取得できないように見えることです。CustomerID と Account は、プル/印刷できないように見える 2 つの例です。私が作成していない限り、それらは「カスタム」ではありません。

EWS 経由で連絡先から CustomerID とアカウントを取得するにはどうすればよいですか?

4

1 に答える 1

0

Account と CustomerID には 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 が正しくマッピングされない理由を理解できれば....カスタムブール値は適切にプルされますが、カスタム整数値はそうではありません。

編集: double が機能することがわかりましたが、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
            ));
}
于 2013-05-24T02:21:57.123 に答える