2012-08-27 85 views
0

我想創建一個帶有XML或HTML的模板,並帶有佔位符,用於在發生異常時在運行時交換異常報告變量。我非常喜歡我對模板和行爲的瞭解,但這一切都是硬編碼,非常糟糕。用於錯誤報告的XML/HTML電子郵件模板

這裏是我的代碼的樣本...

'Styling (Outlook does not follow CSS standards >:-() 
body = "<html><head>" & _ 
     "<style type=""text/css"">" & _ 
     " * {font:12px Arial, Helvetica, sans-serif;}" & _ 
     " table {border-collapse:collapse;}" & _ 
     " table.grid td {padding:0 7px;border:solid #ccc 1px;}" & _ 
     " .bold {font-weight:bold;padding-right:12px;}" & _ 
     "</style></head><body>" 

'Partial template 
body &= "<table><tr><td class=""bold"">Error:</td><td>" & ex.Message & "</td></tr>" & _ 
     "<tr><td class=""bold"">Exception:</td><td>" & ex.GetType().FullName & "</td></tr>" & _ 
     "<tr><td class=""bold"">Source:</td><td>" & ex.Source & "</td></tr>" & _ 
     "<tr><td class=""bold"">Request Url:</td><td>" & Request.Url.ToString & "</td></tr></table><br />" 

通知的ex.Message變量,等我想移動所有的HTML代碼放到一個單獨的文件(XML或HTML,這取決於是什麼推薦,XML我想象?)以及每個錯誤變量的佔位符。然後加載模板,替換變量並即時發送電子郵件。這樣做的最佳做法是什麼?

此外,請不要嘗試修復我的CSS,這不是這個問題。 Outlook不遵循標準(去圖),這是我必須這樣做的。

謝謝。 ;)

回答

1

我認爲你是非常正確的方式。步驟如下:

  • 將模板提取到資源文件(資源擴展名.xml,.html是實際的資源類型)。
  • 用令牌替換變量連接;所以應該是: (...)<tr><td class="bold">Source:</td><td>{exSource}</td></tr>(...)
  • 創建一個擴展方法String對象,以 「提升」 的String.Format,所以你可以做這樣的事情

    ' Load the resourceFile and put content into formattedBody 
    Dim formattedBody as String = templateBody.FormatWith(New With{.exSource = ex.Source}) 
    

關於如何實施FormatWith,請看here。 這answer也可以幫助你。

+0

因此,使用XML模板實現這件事有多容易?我幾乎沒有使用XML的經驗。還是XML更受歡迎?我應該只使用HTML,因爲它最終需要格式化爲了Outlook無論如何閱讀它?謝謝。 – Chiramisu

+0

您不必使用XML對象。該模板將是您自己創建的文本文件(.html,.xml或.txt擴展名在這裏沒有任何區別)。只需閱讀文本文件(您的模板),然後將代碼中的相應變量替換爲您的代幣。 –

+0

太棒了!做了一些事情,但像魅力一樣工作。謝謝。 :) – Chiramisu