InfoPath 2003 オブジェクト モデルを使用してエラーを処理する

カスタム アプリケーションを作成するときに、開発者はエラー処理を行わなければならないことがよくあります。 InfoPath 2003 互換オブジェクト モデルでは、ErrorsCollection コレクションと関連付けて ErrorObject オブジェクトを使用してエラー処理をサポートします。

InfoPath では、フォームに入力されたデータが XML スキーマ検証に失敗したとき、カスタム検証制約に違反があったとき、DataDOMEventObject オブジェクトの ReportError メソッドによりエラーが生成されたとき、および ErrorsCollection コレクションの Add メソッドを使用してエラーが作成されたときにエラーが発生します。

ErrorsCollection コレクションの概要

ErrorsCollection コレクションには、次のメソッドとプロパティがあります。フォームの開発者は、これらを使用することにより、コレクションに含まれている ErrorObject オブジェクトを管理できます。

名前 説明
Add メソッド
ErrorObject オブジェクトを作成し、それをコレクションに追加します。
Delete メソッド
指定した XML ノードと条件名に関連付けられている、 ReportError メソッドを使用して追加したカスタム エラー以外のすべての ErrorObject オブジェクトを削除します。
DeleteAll メソッド
コレクションに含まれているすべての ErrorObject オブジェクトを削除します。
Count プロパティ
コレクションに含まれている ErrorObject オブジェクトの数を取得します。
Item プロパティ
指定したインデックス番号に基づく ErrorObject オブジェクトへの参照を取得します。

ErrorObject オブジェクトの概要

ErrorObject オブジェクトには、次のプロパティがあります。フォームの開発者は、これらを使用することにより、発生したエラーに関する情報にアクセスできます。

名前 説明
ConditionName プロパティ
ErrorObject オブジェクトの型に応じて、エラー条件の名前を取得するか、または null を返します。
DetailedErrorMessage プロパティ
ErrorObject オブジェクトの詳細なエラー メッセージを取得または設定します。
ErrorCode プロパティ
ErrorObject オブジェクトのエラー コードを取得または設定します。
Node プロパティ
ErrorObject オブジェクトに関連付けられている XML ノードへの参照を取得します。
ShortErrorMessage プロパティ
ErrorObject オブジェクトの短いエラー メッセージを取得または設定します。
ErrorType プロパティ
ErrorObject オブジェクトの型を取得します。

ErrorsCollection および ErrorObject を使用する

ErrorsCollection コレクションにアクセスするには、 XDocument オブジェクトの Errors プロパティを使用します。 ErrorsCollection コレクションはフォームの基になる XML ドキュメントと関連付けられているため、エラー発生時にはエラーは XML ドキュメント内で発生します。 次の例は、Visual C# の foreach ループを使用して、フォームの基になる XML ドキュメント内にあるエラーをチェックする方法を示します。 エラーがある場合は、関数で各エラーをループ処理し、 ErrorObject オブジェクトの ShortErrorMessage プロパティを使用してメッセージをユーザーに表示します。

public void CheckErrors(IXMLDOMNode xmlNode)
{
   foreach(ErrorObject err in thisXDocument.Errors)
   {
      if(xmlNode==err.Node)
         thisXDocument.UI.Alert("The following error has occured: "
             + err.ShortErrorMessage + ".");
   }
}

上の関数は、フォームのデータ検証イベントハンドラーの 1 つから呼び出すことができます。 たとえば、フォーム内のフィールドの OnAfterChange イベント ハンドラー内で使用する場合なら、次に示すように DataDOMEventObject オブジェクトの Site プロパティを使用して、関数の呼び出し時に XML ノードを引数として渡します。

CheckErrors(e.Site);

フォームの開発者は、InfoPath により生成されたエラーの処理に加えて、 DataDOMEventObject オブジェクトの ReportError メソッドまたは ErrorsCollection コレクションの Add メソッドを使用してカスタム エラーを発生させることもできます。 ReportError メソッドおよび Add メソッドの使用方法の詳細については、このトピックの先頭にあるメソッド名をクリックしてください。

マネージ コードの例外を処理する

try-catch 例外処理を使用すると、次のコードに示すようにマネージ コード フォーム テンプレート内で発生した例外を処理することができます。

DataAdapters dataAdapters;
dataAdapters = thisXDocument.DataAdapters; 
XMLFileAdapterObject queryXMLFile = 
   (XMLFileAdapterObject)dataAdapters["form1"];
// Perform the query.
try
{
   queryXMLFile.Query();
}
catch (Exception ex)
{
   thisXDocument.UI.Alert("Failed to query.\n\n" + ex.Message);
}
// Perform the submit.
try
{
   queryXMLFile.Submit();
}
catch (Exception ex)
{
   thisXDocument.UI.Alert("Failed to submit.\n\n" + ex.Message);
}

フォーム コード内で try-catch 例外処理を使用していないと、デバッグ中およびプレビュー中に、未処理の例外に関する情報が InfoPath によって InfoPath のエラー ダイアログ ボックスに表示されます。