1

Outlook API を使用して共有予定表から個人用予定表に予定表アイテムをコピーするアプリを作成中です。これが私がこれまでに持っているものです...

using Outlook = Microsoft.Office.Interop.Outlook;

public Outlook.Items GetPublicEntries(string calendar)
    {
        Microsoft.Office.Interop.Outlook.Items CalendarFolderItems = null;
        Outlook.Application oApp;
        oApp = new Outlook.Application();
        Outlook.NameSpace oNS = oApp.GetNamespace("MAPI");
        //oNS.Logon(Missing.Value, Missing.Value, true, true);

        Outlook.Recipient oRecip = (Outlook.Recipient)oNS.CreateRecipient(calendar);
        Outlook.MAPIFolder usersCalendarFolder = (Outlook.MAPIFolder)oNS.GetSharedDefaultFolder(oRecip, Outlook.OlDefaultFolders.olFolderCalendar);
        CalendarFolderItems = usersCalendarFolder.Items;
        return CalendarFolderItems;
    }



    static void Main(string[] args)
    {
        String[] Cals = { "Appointments","Deadlines","Hearings"};

        foreach (string cal in Cals)
        {
            CalendarItems calobj = new CalendarItems();
            Outlook.Items calobjs = calobj.GetPublicEntries(cal);

            foreach (Microsoft.Office.Interop.Outlook.AppointmentItem item in calobjs)
            {
                try
                {
                    Console.WriteLine(item.Subject + " -> " + item.Start.ToLongDateString() + " - " + item.GlobalAppointmentID);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            Console.ReadKey();
        }
    }

3 つのカレンダーからアイテムのリストを返すことはできますが、今は個人のカレンダーにコピーする必要があり、そこで行き詰まっています。これを行う方法を知っている人はいますか?

ありがとう!

トニー

4

1 に答える 1

0

Outlook では、指定したフォルダーに直接コピーすることはできません (パラメーターとして MAPIFolder オブジェクトを取る AppointmentItem.Move() とは異なります) - AppointmentItem.Copy を使用し、その後に AppointmentItem.Move を使用します。

AppointmentItem コピーされたアイテム = Item.Copy();
AppointmentItem newItem =copyedItem.Move(YourDestinationFolder);
newItem.Save();

Copy() を呼び出すと、Outlook によってグローバル アポイントメント ID が消去されることに注意してください。これは、メッセージの更新が受信トレイに直接届いたとしても、アポイントが見つからないことを意味します。

Redemption を使用すると、中間ステップを回避できます。そのRDOAppointmentItem ( RDOMailオブジェクトから派生) を使用すると、CopyTo() を呼び出すときにターゲット フォルダーを渡すことができます。

于 2013-01-28T19:46:11.087 に答える