Witam,

mam 'okazję' przyjrzeć się bliżej outlook'owi (v.2013) i rozszerzeniom VSTO Add-in. Pierwsze pytanie mam takie ogólne - czy ktoś z Was miał okazję robić jakiś Add-in do Outlooka? Ja osobiście chciałem dodać kilka dodatkowych pól do formularza spotkania (appointment) i mam z tym niestety kłopot, bo:

1) Nie mogę użyć tutaj funkcji tworzenia/edytowania szablonu terminarza (scheduling assistant), bo akurat w tym przypadku ten formularz jest read-only. W niektórych przypadkach widziałem, że właśnie przy pomocy tego narzędzia można trochę pozmieniać sobie formularz (m.in. kontaktowy).

2) Więc zabrałem się za Outlook Form Region ( https://msdn.microsoft.com/en-us/library/bb386301.aspx ), z tym że tutaj nie mogę się z kolei dokopać (i czy to w ogóle jest możliwe) do informacji, jak 'odbierać zdarzenia' z kontrolek już istniejących i 'połączyć' ich działanie z kontrolkami dodanymi przeze mnie, np. przy dodawaniu nowego spotkania chciałbym, aby nowo dodane pole również było uwzględniane.. (pomocny screen: http://oi60.tinypic.com/2z7r238.jpg )

Jakby szło rozwiązać ten drugi podpunkt to byłoby by elegancko.. tymczasem chciałbym pokazać co zrobiłem i z czym mam ciągle problem..

Mam sytuację, gdzie chcę otworzyć okno konkretnego spotkania ( http://oi57.tinypic.com/15gayr5.jpg ). Można to zrobić na dwa sposoby: z poziomu kalendarza ( https://i.ytimg.com/vi/8MsBWk0p7_M/maxresdefault.jpg ) i z poziomu asystenta planowania ( https://plagwitz.files.wordpress.com/2013/08/image3.png ). Problem polega na tym, że otwierając okno spotkania z poziomu kalendarza wszystko jest ok (mogę 'dorwać się' do obiektu bo m.in. mogę zwrócić z aplikacji aktywnego explorera). Przy próbie otwarcia okna spotkania z poziomu asystenta planowania, nie mogę pobrać explorera i tym samym obiektu appoitmentItem.

Pytanie są wiec takie - jak sobie z tym poradzić ? Czy można jakoś inaczej pozyskać ten obiekt spotkania ? Co robię nie tak ?


// chcąc nie chcąc wykorzystuje te metody, bo innych do dyspozycji nie mam...
private void PersonCounter_FormRegionShowing(object sender, System.EventArgs e)
{
    Outlook.Application app = Globals.ThisAddIn.Application.Application;
    Explorer explorer = app.ActiveExplorer();

    if (explorer != null && explorer.Selection != null && explorer.Selection.Count > 0)
    {
        Object selObject = explorer.Selection[1];
        if (selObject is Outlook.AppointmentItem)
        {
            Outlook.AppointmentItem appointItem = (selObject as Outlook.AppointmentItem);

            //dalsza cześć logiki..
        }
    }
}

private void PersonCounter_FormRegionClosed(object sender, System.EventArgs e)
{

}

Pozdrawiam
Adam