我正在研究Outlook的插件,我对此很新。
我需要知道我的任务请求何时被接受,但我找不到这样的事件。
我尝试订阅任务的PropertyChange事件并检查ResponseState是否为olTaskAccept,但这不起作用,可能是因为此属性更改的任务对象与正在侦听事件的任务对象不同。
我看到有一个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
}
}
答案 0 :(得分:1)
如果委派的用户接受任务,则ResponseState属性设置为olTaskAccept。尝试保存新创建的项目,至少要触发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
}
}