Как получить правильный исполняемый файл Store в Outlook с C#, Windows Forms e VS2017? - PullRequest
0 голосов
/ 14 января 2020

У меня есть много автоматизации VBA, которая связывает решения Outlook и Word; это хорошо, но время неумолимо ... поэтому я начинаю украшать и расширять это старое решение, оборачивая его C # / VS2017. С помощью обычной Winform я могу выбирать своих пациентов, и из этого действия я делаю много действий, в том числе открываю правильный контакт Outlook; в этом проблема, потому что я не могу найти правильный Магазин; Patient.PST, в зависимости от машины, может быть 1-го, 2-го, 3-го ... В VBA я делаю это:

    WhichStoreNameToPointAt="patients"
    Set myNamespace = myolApp.GetNamespace("MAPI")
    For i = 1 To myNamespace.Stores.Count Step 1
        If myNamespace.Stores.item(i).DisplayName = WhichStoreNameToPointAt Then
             intOutlookItemStore = i
        End if
    End If
    Set myFolderPatients = myNamespace.Stores.item(intOutlookItemStore).GetDefaultFolder(olFolderContacts)

И он всегда функционирует как брелок.

В C# я перепробовал множество вариантов и не смог указать правильный магазин:

    public void OpenPatientContact(string patientName)
    {
        Outlook.Store whichStore = null;
        Outlook.NameSpace nameSpace = OlkApp.Session;
        int i = 1;
        foreach (Outlook.Folder folder in nameSpace.Folders)
        {
            bool p = false;
            if (whichStoreNameToPointAt == folder.Name)
            {
                p = true;
                whichStore = folder.Store;
               //Correct Store selected; I can tell because of this watch:
               //whichStore.displayname == whichStoreNameToPointAt 
            } 
            i++;
            if (p)
                break;
        }
        var contactItemsOlk = whichStore.Session.GetDefaultFolder
                        (Outlook.OlDefaultFolders.olFolderContacts).Items;
        // The problem is below; always the first Store
        Outlook.ContactItem contact = (Outlook.ContactItem)contactItemsOlk
                        .Find(string.Format("[FullName]='{0}'", patientName)); //[1];
        if (contact != null)
        {
            contact.Display(true);
        }
        else
        {
            MessageBox.Show("The contact information was not found.");
        }
    }

К сожалению, он постоянно указывает на один и тот же первый магазин, тот, в котором нет пациентов ... Если я изменю порядок в Магазине, я смогу обойти это и протестировать другие вещи, но, конечно, это не правильный путь.

Любые другие головы / глаза, чтобы увидеть свет?

TIA

1 Ответ

0 голосов
/ 14 января 2020

Пока я писал вопрос, глядя на желтую резиновую утку - и много других вещей, принадлежащих моей 1-летней дочери;), я понял, что whichStore.Session.GetDefaultFolder немного странно в этом контексте. Я только изменил это

 var contactItemsOlk = whichStore.Session.GetDefaultFolder
                    (Outlook.OlDefaultFolders.olFolderContacts).Items;

На что:

 var contactItemsOlk = whichStore.GetDefaultFolder
                    (Outlook.OlDefaultFolders.olFolderContacts).Items;

Вуаля! Волхвы c тоже случаются с C#! Сессия возвращает объект NameSpace по умолчанию для текущего сеанса .

PS: желтая резиновая утка; ребята из The Pragmati c Программист действительно знает некоторые секреты и приемы;)

Спасибо, Томас и Хант!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...