Skip to content

OTR_MessageDefinition

nishi_74322014 edited this page Oct 27, 2026 · 1 revision

メッセージ定義

概要

メッセージの本文をコードから追い出し、メッセージ ID で引けるようにする機能。

  • 定義ファイル MSGDefinition.xml にメッセージ ID と雛形を書き、GetMessage.GetMessageDescription で取得する。
  • 例外の messageID と対応させることで、例外の型を増やさずにエラーの種類を識別できる(例外処理方式)。

詳細

定義ファイル

パスは設定 FxXMLMSGDefinition で指定する。

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE MSGD[ … DTD … ]>
<MSGD>
  <Message id="E0001" description="○△□エラー、%1が%2しました。"/>
  <Message id="I0001" description="登録しました。"/>
</MSGD>
要素・属性 内容
Message の id メッセージ ID。XML の ID 型なので、先頭に数字を使えない(E0001 は可、0001 は不可)
Message の description メッセージの雛形
  • E(異常系)・I(正常系)の接頭辞は慣例で、フレームワークは解釈しない。
  • DTD を省かない(Open 棟梁の XML 定義ファイルに共通の作法)。

取得する

using Touryo.Infrastructure.Framework.Util;

string msg = GetMessage.GetMessageDescription("E0001");

%1 / %2 の置換

プレースホルダ 置換される値
%1 業務例外の Message
%2 業務例外の Information
throw new BusinessApplicationException("E0001", "受注番号", "重複");
// → 「○△□エラー、受注番号が重複しました。」
  • 置換するのは GetMessage ではなく、P 層の親クラス2 である。既定では Web Forms の親クラス2 にだけ実装されている。
  • 置換しない親クラス2 で %1 を書くと、そのまま画面に出る。確認できないときは、%1 / %2 を使わず完成した文で定義する。

2 つの系統

系統 定義する人 置き場
事前定義のメッセージ 纏め者(基盤として先に用意) MyBusinessApplicationExceptionMessage / MyBusinessSystemExceptionMessage(.resx。国際化対応)
プロジェクト進行中に採番するメッセージ 開発者 MSGDefinition.xml

事前定義のものは再定義せずに使い、新しいエラーは MSGDefinition.xml に採番する。

国際化

カルチャ別のファイル(MSGDefinition_ja-JP.xml など)を用意して、多言語に対応できる(設定 FxExceptionMessageCulture など)。

コーディング・エージェントに任せる場合

  • スキル opentouryo-message と opentouryo-exception を使わせる。
  • エージェントはメッセージをコードに直書きしがちなので、ID で引いているかをレビューで見る。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally