Как отобразить общий календарь в Outlook с помощью С#?

Я хочу отображать общий календарь. я ищу в Интернете, и я нахожу этот код:

 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, передав имя другого почтового ящика, затем передайте возвращенного получателя в 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