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 のエラー ダイアログ ボックスに表示されます。