次の方法で共有


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

カスタム アプリケーションを作成する際、開発者はしばしばエラー ハンドリングを行わなければなりません。これには、アプリケーションで発生したエラーをチェックするプログラム コードや、カスタム エラーを作成して発生させるプログラム コードの記述などの作業が伴います。InfoPath 2003 互換オブジェクト モデルでは、ErrorObject オブジェクトと ErrorsCollection コレクションを組み合わせて使用することによるエラー ハンドリングがサポートされています。

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 例外処理を使用していないと、Visual Studio .NET でのデバッグ中およびプレビュー中に、未処理の例外に関する情報が InfoPath によって InfoPath のエラー ダイアログ ボックスに表示されます。また、既定では、マネージ コード フォーム テンプレートを展開した場合の実行時には、未処理の例外は Info Path エラー ダイアログ ボックスに表示されません。実行時に未処理の例外に関する情報を表示するには、次の手順を使用します。

未処理のマネージ コード例外の実行時の通知を有効にする

  1. InfoPath を開きます。

  2. [ツール] メニューの [オプション] をクリックします。

  3. [詳細設定] タブで、[マネージ コード エラーを表示する] チェック ボックスをオンにします。