Outlook任务请求已接受事件

时间:2015-03-12 15:13:02

标签: c# outlook

我正在研究Outlook的插件,我对此很新。

我需要知道我的任务请求何时被接受,但我找不到这样的事件。

我尝试订阅任务的PropertyChange事件并检查ResponseState是否为olTask​​Accept,但这不起作用,可能是因为此属性更改的任务对象与正在侦听事件的任务对象不同。

我看到有一个TaskRequestAcceptItem对象,但是msdn并不想说明如何获取它,只是你无法创建它。

所以我的问题是如何订阅在我发送的任务请求被接受时触发的事件,或者至少如何获得接受它的日期时间?

我正在使用VS 2013和Outlook 2010

void buttonGroup1_Click(Office.CommandBarButton Ctrl, ref bool CancelDefault)
        {
            _task = Application.CreateItem(Outlook.OlItemType.olTaskItem);
            Outlook.MailItem email = _selection[1] as Outlook.MailItem;

            _task.Subject = email.Subject;
            _task.Body = email.Body;
            _task.ReminderSet = true;
            _task.ReminderTime = new DateTime(2015, 03, 12, 15, 41, 0);
            _task.PropertyChange += task_PropertyChange;
            _task.Recipients.Add("x@x.com");
            _task.Assign();
            (_task as Outlook._TaskItem).Send();
        }

        Dictionary<Outlook.TaskItem, DateTime> taskAccepts = new Dictionary<Outlook.TaskItem, DateTime>();

        void task_PropertyChange(string Name)
        {
            if (Name == "ResponseState" && _task.ResponseState == Outlook.OlTaskResponse.olTaskAccept)
            {
                taskAccepts.Add(_task, DateTime.Now); // this never executes
            }
        }

2 个答案:

答案 0 :(得分:1)

如果委派的用户接受任务,则ResponseState属性设置为olTask​​Accept。尝试保存新创建的项目,至少要触发PropertyChange事件。

void buttonGroup1_Click(Office.CommandBarButton Ctrl, ref bool CancelDefault)

命令栏已弃用,在Outlook中不再使用。您需要使用Fluent UI。

答案 1 :(得分:0)

如果其他人在这里挣扎,我就是这样做的。我在侦听将TaskRequestAcceptItem添加到收件箱时:

    Outlook.Items _items;
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Outlook.Folder inbox = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder;

        _items = inbox.Items;
        _items.ItemAdd += items_ItemAdd;
    }

    private void items_ItemAdd(object Item)
    {
        if (Item is Outlook.TaskRequestAcceptItem)
        {
            Outlook.TaskItem task = (Item as Outlook.TaskRequestItem).GetAssociatedTask(false);
            // some code here
        }
    }

还有另一种方法,如果代码在收件人的计算机上运行,​​您可以侦听TaskRequestItem,然后在关联的任务上侦听PropertyChange事件

    Outlook.TaskItem _task;
    private void items_ItemAdd(object Item)
    {
        if (Item is Outlook.TaskRequestItem)
        {
            _task = (Item as Outlook.TaskRequestItem).GetAssociatedTask(false);
            _task.PropertyChange += item_PropertyChange;
        }
    }

    void item_PropertyChange(string Name)
    {
        if (Name == "ResponseState" && _task.ResponseState == Outlook.OlTaskResponse.olTaskAccept)
        {
            //some code here
        }
    }