2010-11-15 32 views
0

我已经编写了一些VSTO(2003)代码,根据邮件项目的附件成功应用了一些强制主题行更改。该代码被编写为在microsoft.office.interop.outlook.mailitem上运行但是,我需要相同的代码来操作其他类型,例如microsoft.office.interop.outlook.appointmentitem(实际上它需要适用于任何用户可以发送那将有一个主题)。如何处理Outlook VSTO对象,就好像它们是邮件项目

假设Outlook项目类型有一个主题属性,一个附件属性和一个保存方法,我该如何处理编写适用于所有相关的interop.outlook类型的代码。

我试图通过反射解决这一点,但在的getProperty空returing所以我不能使用的GetValue它

 
? mi.GetType().GetProperty("Subject") 
null 

?(mi as Microsoft.Office.Interop.Outlook.MailItem).Subject 
"Test Subject" 

似乎没有成为一个通用的outlookitem类我可以投给,要做到这一点。什么是正确的方法?

编辑: 要clarif我的代码开始是这样的...

 
    void Application_ItemSend(object Item, ref bool Cancel) 
    { 
      if (Item is Microsoft.Office.Interop.Outlook.MailItem) 
      { 
       Microsoft.Office.Interop.Outlook.MailItem currentItem = 
        Item as Microsoft.Office.Interop.Outlook.MailItem; 

然后做的东西CURRENTITEM(包括通过对目前与Microosft.Office.Interop.Outlook.MailItem性质类型的各种功能。我希望他们来处理“Microsoft.Interop.Outlook.somethingsendable”

+0

什么类型是mi声明的? – 2010-11-15 15:32:13

+0

在我的原代码中声明为mailitem,但是,我希望能够处理其他类型...我将编辑我的问题以阐明 – Andiih 2010-11-15 15:38:42

回答

4

这是行不通开箱 - AppointmentItemMailItem是完全不同的接口,所以多态性是不是一种选择

我可以建议的最好的方法是创建一个SendableItem类来包装您需要支持的PIA接口,并将切换代码封装在您想使用的“常用”操作的常用包装器后面。您可以使用MailItemAppointmentItem创建一个SendableItem,但是一旦创建,它们看起来与SendableItem包装外部的相同。

+0

谢谢Steve。我认为这会奏效,并且它不太讨厌......不像我开始尝试的反思解决方案那样讨厌!耻辱没有部分多态! – Andiih 2010-11-15 16:44:03

+0

是的 - 这些PIA实际上是让事情顺利运作所需的基本骨架,而不像其他的.Net Framework那样优雅。祝你好运。 – 2010-11-15 16:45:06

+0

它在大约10分钟内工作。很简单,但有点难看。 – Andiih 2010-11-15 21:02:33

相关问题