Как да покажа споделен календар в Outlook с помощта на c#?

искам да покажа споделен календар. Търся в мрежата и намирам този код:

 static void Main(string[] args)
    {

        Outlook.Application objOLApp;
        Outlook.MAPIFolder objFolder;
        Outlook.Explorer objExplorer;
        Outlook.MAPIFolder objSubFolder;
        Outlook.AppointmentItem objCalenderItem;
        Outlook.Folders objOutlookFolders;
        int intFolderCtr;
        int intSubFolderCtr;
        int intAppointmentCtr;
        // >> Initialize The Base Objects
        objOLApp = new Outlook.Application();
        objOutlookFolders = objOLApp.Session.Folders;
        // >> Loop Through The PST Files Added n Outlook
        for (intFolderCtr = 1; intFolderCtr <= objOutlookFolders.Count; intFolderCtr++)
        {
            objFolder = objOutlookFolders[intFolderCtr];
            objExplorer = objFolder.GetExplorer();
            // >> Loop Through The Folders In The PST File
            for (intSubFolderCtr = 1; intSubFolderCtr <= objExplorer.CurrentFolder.Folders.Count; intSubFolderCtr++)
            {
                objSubFolder = objExplorer.CurrentFolder.Folders[intSubFolderCtr];
                // >> Check if Folder Contains Appointment Items
                if (objSubFolder.DefaultItemType == Outlook.OlItemType.olAppointmentItem)
                {
                    // >> Loop Through Appointment Items
                    for (intAppointmentCtr = 1; intAppointmentCtr <= objSubFolder.Items.Count; intAppointmentCtr++)
                    {
                        // >> Get Teh Calender Item From The Calender Folder
                        objCalenderItem = objSubFolder.Items[intAppointmentCtr];
                        // >> Process Appointment Item Accordingly
                        Console.WriteLine(objCalenderItem.Subject);
                        Console.WriteLine(objCalenderItem.Location + "," + objCalenderItem.Start.ToLongDateString());
                        Console.WriteLine();
                        Console.WriteLine();
                    }
                }
            }
        }
        // >> Close Application
       // objOLApp.Quit();
        // >> Release COM Object
        System.Runtime.InteropServices.Marshal.ReleaseComObject(objOLApp);
        objOLApp = null;
        Console.ReadLine();
    }

но виждам само моята среща.

искам да видя целия споделен календар. защото насрочих среща, но не знам дали другият е зает или свободен. така че как мога да покажа календара на друг?

редактиране:

промених тази линия

objOutlookFolders = objOLApp.Session.Folders;

с

objOutlookFolders = oNs.GetSharedDefaultFolder(oRep, OlDefaultFolders.olFolderCalendar).Folders;

и добавям това

 NameSpace oNs = objOLApp.GetNamespace("MAPI");
 Recipient oRep = oNs.CreateRecipient(objOLApp.Session.CurrentUser.Name);

но все още получавам грешката.

новата версия е

        static void Main(string[] args)
        {

            Outlook.Application objOLApp;
            Outlook.MAPIFolder objFolder;
            Outlook.Explorer objExplorer;
            Outlook.MAPIFolder objSubFolder;
            Outlook.AppointmentItem objCalenderItem;
            Outlook.Folders objOutlookFolders;
            int intFolderCtr;
        int intSubFolderCtr;
        int intAppointmentCtr;
        // >> Initialize The Base Objects
        objOLApp = new Outlook.Application();



        NameSpace oNs = objOLApp.GetNamespace("MAPI");
        Recipient oRep = oNs.CreateRecipient(objOLApp.Session.CurrentUser.Name);


        oRep.Resolve();
        //if (oRep.Resolved)
            objOutlookFolders = oNs.GetSharedDefaultFolder(oRep, OlDefaultFolders.olFolderCalendar).Folders;

        //else
        //    objOutlookFolders = objOLApp.Session.Folders;


        // >> Loop Through The PST Files Added n Outlook
        for (intFolderCtr = 1; intFolderCtr <= objOutlookFolders.Count; intFolderCtr++)
        {
            objFolder = objOutlookFolders[intFolderCtr];
            objExplorer = objFolder.GetExplorer();
            // >> Loop Through The Folders In The PST File
            for (intSubFolderCtr = 1; intSubFolderCtr <= objExplorer.CurrentFolder.Folders.Count; intSubFolderCtr++)
            {
                objSubFolder = objExplorer.CurrentFolder.Folders[intSubFolderCtr]; 
                // >> Check if Folder Contains Appointment Items
                if (objSubFolder.DefaultItemType == Outlook.OlItemType.olAppointmentItem)
                {
                    // >> Loop Through Appointment Items
                    for (intAppointmentCtr = 1; intAppointmentCtr <= objSubFolder.Items.Count; intAppointmentCtr++)
                    {
                        // >> Get Teh Calender Item From The Calender Folder
                        objCalenderItem = objSubFolder.Items[intAppointmentCtr];
                        // >> Process Appointment Item Accordingly
                        Console.WriteLine(objCalenderItem.Subject);
                        Console.WriteLine(objCalenderItem.Location + "," + objCalenderItem.Start.ToLongDateString());
                        Console.WriteLine();
                        Console.WriteLine();
                    }
                }
            }
        }
        // >> Close Application
        // objOLApp.Quit();
        // >> Release COM Object
        System.Runtime.InteropServices.Marshal.ReleaseComObject(objOLApp);
        objOLApp = null;
        Console.ReadLine();

    }

моля помогнете ми.. още работя. но не стана.


person eakgun    schedule 31.07.2013    source източник


Отговори (1)


Използвайте Namespace.GetSharedDefaultFolder, за да отворите папката на календара по подразбиране на друг потребител.

person Dmitry Streblechenko    schedule 31.07.2013
comment
Благодаря за отговора. но имам един въпрос към теб. как мога да използвам Namespace.GetSharedDefaultFolder? аз съм по-ново приложение за Outlook, съжалявам :/ - person eakgun; 01.08.2013
comment
Извикайте objOLApp.Session.CreateRecipient, като подадете името на другата rmailbox, след което прехвърлете върнатия получател на objOLApp.Session.GetSharedDefaultFolder(..., olFolderCalendar) - person Dmitry Streblechenko; 01.08.2013
comment
използвам тези методи като този objOutlookFolders = oNs.GetSharedDefaultFolder(oRep, OlDefaultFolders.olFolderCalendar); objOutlookFolders.Display(); но не искам да показвам с Outlook. този метод използва Outlook. искам да показвам с възможност за програмиране. - person eakgun; 21.08.2013
comment
Не мисля, че разбирам - не искате да показвате папката в Outlook? Тогава защо се обаждате на MAPIFolder.Display? Искате да кажете, че не искате да показвате папката в отделен прозорец? След това задайте свойството Application.ActiveExplorer.CurrentFolder. - person Dmitry Streblechenko; 21.08.2013