0

例外が発生したときに実行時にスワップインされる例外レポート変数のプレースホルダーを含む 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 は標準に準拠していません (図を参照)。

ありがとう。;)

4

1 に答える 1

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こちらをご覧ください。この答えはあなたにも役立つかもしれません。

于 2012-08-27T20:39:11.740 に答える