2010-11-15 29 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

相關問題