2016-12-07 71 views
0

有没有办法将用户属性持续到约会被邀请者/位置日历?C#Outlook约会用户属性 - 不持续跨日历/被邀请者

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

但是,约会中的任何受邀者或任何包括的会议室/位置都可以接收约会,但用户物业似乎并没有与该项目进行。为什么会这样,是否可以解决?

我唯一能想到的就是将用户属性保存在数据库中,并在用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间谍用户属性不在项目已发送的邮件中。从其中一个受邀者日历中打开项目时,表单区域确实出现,但用户属性不在那里。

+0

您是否在两个Exchange邮箱之间发送邮件?还是通过SMTP? –

+0

受邀者都是内部的,所以它通过同一个交换服务器,我想。 –

+0

自从发布这个问题后,看了一下它看起来像使用EWS设置项目上的ExtendedProperty可能是一种方法来做到这一点?据推测,这将是在调用附件中的AppointmentItem.Save之后,将属性附加到该项目的方式。 –

回答

1

因此,经过大量的头部划伤和修改,以及在使用Outlook Spy与Dmitry(http://www.dimastr.com/outspy/home.htm)帮助检查用户属性后,我意识到我一直在尝试设置一个属性名称,该名称恰好在使用中通过Outlook内部(MeetingType)

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

对于任何遇到同样问题的地方,在属性不会持续的情况下,请检查您在Outlook中设置的属性名称,可以节省您头痛的时间!