C#Outlook约会用户属性 - 不在日历/被邀请者之间保持

时间:2016-12-07 10:34:27

标签: c# visual-studio-2015 outlook-addin outlook-2010

有没有办法将用户属性保存到约会受邀者/位置日历?

我为约会创建了一个表单区域,其中包含一些额外的表单字段。在约会写入事件时,我可以将表单区域数据保存为针对约会的用户属性。从发件人的角度来看,这些属性在项目打开时仍然存在,并且可以更新等。

但是,约会上的任何被邀请者或所包含的任何会议室/位置都可以接收约会但是用户属性似乎不会随附该项目。为什么会这样,可以解决这个问题吗?

我唯一能想到的就是在数据库中保留用户属性,并在使用FormRegion_Showing方法打开项目时加载它们。这并不理想,但重点是要将它全部放在前景中。

我正在使用Outlook 2010和Visual Studio 2015。

我偶然发现this post几乎说它无法完成,但是从2011年开始我无法找到与此特定情景相关的最新内容。

一些减少代码 - 表单区域:

// Form region class
[Microsoft.Office.Tools.Outlook.FormRegionMessageClass(Microsoft.Office.Tools.Outlook.FormRegionMessageClassAttribute.Appointment)]
[Microsoft.Office.Tools.Outlook.FormRegionName("Namespace.MyFormRegion")]
public partial class MyFormRegionFactory
{

}

private void MyFormRegion_FormRegionShowing(object sender, System.EventArgs e)
{
    Outlook.AppointmentItem appointment = this.OutlookItem as Outlook.AppointmentItem;
    this.appointment.Write += Appointment_Write;
}

private void Appointment_Write(ref bool Cancel)
{
    Outlook.ItemProperties CateringData = this.appointment.ItemProperties;
    var Serializer = new System.Web.Script.Serialization.JavaScriptSerializer();

    Outlook.ItemProperty MeetingNameProperty = CateringData.Add("MeetingName", Outlook.OlUserPropertyType.olText, true);
    MeetingNameProperty.Value = this.MeetingName.Text;

    // More properties saved
    appointment.Save();
}

并在插件类中:

public partial class ThisAddIn
{
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Application.ItemSend += Application_ItemSend;
    }

    private void Application_ItemSend(object Appointment, ref bool Cancel)
    {
        // Appointment is an AppointmentItem that has just been saved.
        // How does this relate to the outgoing item that ends up in the 
        // Sent Items folder???
    }
}

使用Outlook Spy,用户属性不在已发送邮件的项目中。从其中一个被邀请者日历打开项目时,表单区域会出现,但用户属性不存在。

1 个答案:

答案 0 :(得分:1)

所以,经过大量的抓头和修改,以及在Dmitry(http://www.dimastr.com/outspy/home.htm)的帮助下使用Outlook Spy来检查用户属性之后,我意识到我一直试图设置一个碰巧的属性名称已在Outlook内部使用(MeetingType)

更改该属性的名称后,所有其他用户属性现在都会在已发送项目和被邀请者的日历中保留。

对于其他遇到此问题的人来说,如果属性不存在,请使用Outlook中设置的属性名称检查您的属性名称,这可以为您节省数小时的头痛!