Oracle® Fusion Middleware Oracle Application Development Frameworkデスクトップ統合開発者ガイド 11gリリース1(11.1.1.6.0) B66694-01 |
|
前 |
次 |
この章では、統合Excelワークブック向けにサーバー・サイドとクライアント・サイドの検証を提供する方法と、検証の失敗やデータの競合などのエラーを報告する方法、カスタムのエラー・ハンドラを使用してエラー・レポートを構成する方法について説明します。
この章の内容は次のとおりです。
Fusion Webアプリケーションと統合Excelワークブックにサーバー・サイドとクライアント・サイドの検証を構成して、ADFモデル・レイヤーおよびMicrosoft Excelにより提供される検証オプションを活用します。これらの検証オプションに加えて、ADFデスクトップ統合のコンポーネントを利用して、Fusion Webアプリケーションからエラー・メッセージを返したり、コンポーネント・アクションの結果のステータスの提供のほか、Fusion WebアプリケーションによりホストされるデータとのExcelワークブックの競合でデータが変更されるときに発生する可能性のあるエラーを返すことができます。
ADFデスクトップ統合では、ADFモデル・レイヤーがバインディングの属性に設定する検証ルールを使用します。エンド・ユーザーがADF表コンポーネントなど、ADFデスクトップ統合コンポーネントのいずれかで入力または編集するデータは、Fusion Webアプリケーションで設定されたルールや条件に対して検証できます。Oracle ADFでの検証ルールの定義の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「検証とビジネス・ルールの宣言的な定義」の章を参照してください。
ADFモデル・レイヤーの検証の追加の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「ADF Modelレイヤー検証の追加」の項を参照してください。
ADFデスクトップ統合は、クライアント・サイドの検証を提供しません。ただし、Excelのデータ検証機能を使用して、エンド・ユーザーがセルに入力したデータや値を制御できます。これらの機能によって、データ・エントリを一定の日付範囲に制限したり、リストを使用して選択内容を限定したり、正の整数のみをセルに入力したりすることができます。たとえば、EditPriceList-DT.xlsx
ワークブックのProduct Number
列を構成して、ユーザーがこの列のセルに整数のみを入力できるようにすることができます。
ADF表コンポーネント内の列にカスタム検証を適用する場合、実行時にADF表コンポーネントの列に値が移入されると、その検証は伝播されます。ただし、設計時にTreeNodeList
サブコンポーネントを参照する列に適用されたカスタム検証は、ADFデスクトップ統合によって実行時に上書きされる点に注意してください。これは、ADFデスクトップ統合が、実行時に起動される独自のリスト制約検証を適用するためです。
注意:
|
Excelでのデータ検証の詳細は、Excelのドキュメントを参照してください。
Excelワークブックが統合されるFusion Webアプリケーションをホストするサーバーは、操作の結果をフィードバックするエラー・メッセージを返すことができます。返されるエラー・メッセージには、検証の失敗、競合エラー、レコードの削除などがあります。
エンド・ユーザーにエラー・メッセージの概要を返すには、ADF出力テキスト・コンポーネントのValue
プロパティにEL式を設定する必要があります。エラーが発生すると、ADF出力テキスト・コンポーネントは実行時にエラー・メッセージの概要を表示します。
ADF出力テキスト・コンポーネントのValue
プロパティに設定するEL式のタイプは、ワークシートで起動するアクション・セットで生成されるエラー・メッセージを返すか、あるいはADF表コンポーネントやADF読取り専用表コンポーネントなど他のコンポーネントで起動するアクションにより生成されるエラー・メッセージを返すかによって異なります。次のEL式では、ワークシートでアクション・セットを起動したときに返されるエラー・メッセージの概要が表示されます。
#{worksheet.errors}
実行時には、アクション・セットが起動を開始すると、以前のエラー・メッセージ概要がクリアされます(存在する場合)。起動時にエラーが発生しない場合は、エラー・メッセージは空白のままです。エラーが発生した場合、ADF出力テキスト・コンポーネントによってエラー・メッセージの概要が表示されます。
ワークシートで起動するアクション・セットで生成されるエラー・メッセージの概要を返すには、アクション・セットのAlert.FailureMessage
プロパティの値に#{worksheet.errors}
を設定する方法もあります。この方法では、生成されたエラー・メッセージの概要がダイアログに表示されます。
Fusion Webアプリケーションと対話するアクションを持つADF表コンポーネントやADF読取り専用表コンポーネントなどのコンポーネントも、エラー・メッセージの概要を返すことができます。ADF出力テキスト・コンポーネントのValue
プロパティ、またはアクション・セットのAlert.FailureMessage
プロパティに次のEL式を設定します。
#{components.componentID.errors}
componentID
は、アクションを起動するコンポーネント(ADF表コンポーネントやADF読取り専用表コンポーネントなど)のIDを指します。
Fusion Order DemoアプリケーションのMaster Price ListモジュールのEditPriceList-DT.xlsx
ファイルは、ワークシートで起動するアクション・セットやADF表コンポーネントのアクションで生成されるエラー・メッセージの概要を返す方法を示します。図12-1に、設計モードのEL式を示します。
ADFデスクトップ統合は、ADF表コンポーネントまたは統合Excelワークシートにより生成されるエラー詳細を表示するアクションを提供します。
これらのアクションのいずれかを起動するアクション・セットは、アクションを1つのみ含む必要があります。一般的に、アクション・セットは起動時にエラー・ラベルとメッセージ・リストをクリアします。次のいずれかのアクションを起動するアクション・セットは、エラー・ラベルとメッセージ・リストをエンド・ユーザーに返します。
ワークシートのDisplayWorksheetErrors
アクション
ワークシートのエラー・メッセージを表示するには、ワークシートのコンポーネントのアクション・セットまたはワークシートのリボン・ボタンを構成して、このアクションを起動します。たとえば、図12-2は、DisplayWorksheetErrors
アクションをワークシートのADF出力テキスト・コンポーネントのDoubleClickActionSet
項目として構成する、アクション・コレクション・エディタ・ダイアログを示します。
実行時にADF OutputTextコンポーネントをダブルクリックすると、図12-3に示すようにDisplayWorksheetErrors
アクションが起動します。
ワークシートのDisplayWorksheetErrors
アクションの詳細は、A.13項「ワークシートのアクションとプロパティ」を参照してください。
ADF表コンポーネントのDisplayRowErrors
アクション
ADF表コンポーネントで発生する行レベルの失敗を表示するには、このアクションを起動します。行レベルの失敗は、エンド・ユーザーが次のアクションを起動すると発生します。
Upload
DeleteFlaggedRows
ADF表コンポーネントの列から起動されたDoubleClickActionSet
このアクションの使用の詳細は、12.5項「ADF表コンポーネントでの行ごとのステータスの追加」を参照してください。
ADF表コンポーネントのDisplayTableErrors
アクション
ADF表コンポーネントで発生する表レベルの失敗を表示するには、このアクションを起動します。ADF表コンポーネント列のDoubleClickActionSet
がこのアクションを起動することは、意図されていません。かわりに、ADF表コンポーネントのBatchOptions.CommitBatchActionID
プロパティで指定されたアクション・バインディングの起動時に失敗が発生する場合、エンド・ユーザーにエラー・メッセージをアクション・セットにこのアクションを追加します。
実行時にADF OutputTextコンポーネントをダブルクリックすると、図12-4に示すようにDisplayTableErrors
アクションが起動します。
ADF表コンポーネント・アクションの詳細は、A.9項「ADF表コンポーネントのプロパティとアクション」を参照してください。
ADF表コンポーネントには、次のADF表コンポーネント・アクションの起動後に、ADF表コンポーネントからの行が正常に処理されたかどうかをエンド・ユーザーに示すメカニズムがあります。
DeleteFlaggedRows
Upload
ADF表コンポーネントの列から起動されたDoubleClickActionSet
ADF表コンポーネントは、ADF表コンポーネント・アクションの起動後に、_ADF_StatusColumn
列に各行のステータスを移入します。たとえば、ADF表コンポーネントのUpload
アクションの起動後に、_ADF_StatusColumn
列に各行のアップロード・ステータスを移入します。
図12-5はADF表コンポーネントの行を示し、Changed列の上向き矢印で示すように、これらの行の値は変更済です。CostPrice列では、数値が1つあるべきところに2つの文字列の値が入力されています。
図12-6は、ADF表コンポーネントのUpload
アクションの起動後にADF表コンポーネントにある同じ行を示します。ADF表コンポーネントは、_ADF_StatusColumn
列(この例の実行時はStatusというラベル付き)に、行の更新が成功したかどうかを示すメッセージを移入します。
デフォルトでは、_ADF_StatusColumn
列のDoubleClickActionSet
は、ADF表コンポーネントのDisplayRowErrors
アクションを起動するように構成されています。エンド・ユーザーが実行時にこの列の行をダブルクリックすると、ADF表コンポーネントはDisplayRowErrors
アクションを起動します。エラーが存在する場合、このアクションはその行のエラーのリストを示すダイアログを表示します。エラーがない場合、ダイアログにはエラーが発生しなかったことを示すメッセージが表示されます。図12-7は、Status列にUpdate failed
と表示される表12-6のセルをエンド・ユーザーがダブルクリックする場合に表示されるダイアログを示します。
_ADF_StatusColumn
列の詳細は、7.11項「ADF表コンポーネント内の特殊な列」を参照してください。
Fusion Webアプリケーションを構成して、カスタムのエラー・ハンドラを使用してエラーを報告し、統合Excelワークブックでエンド・ユーザーに表示されるエラー・メッセージに対する詳細を提供することができます。
この機能を実装するには、カスタムのエラー・ハンドラがgetDetailedDisplayMessage
メソッドを上書きして、DCErrorMessage
オブジェクトを返す必要があります。実行時にADFデスクトップ統合は、カスタムのエラー・ハンドラを検出して、DCErrorMessage
オブジェクトに対してgetHtmlText
メソッドを起動します。ADFデスクトップ統合には、エラー・メッセージ・リストのgetHtmlText
メソッドにより返されるHTMLが詳細として含まれます。
カスタムのエラー・ハンドラの作成の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「エラー処理のカスタマイズ」の項を参照してください。
エンド・ユーザーの1人(John)がFusion WebアプリケーションからExcelワークブックにダウンロードしたデータ行に変更を加えて、異なるセッションにいる別のエンド・ユーザー(Jane)が、Johnが行をダウンロードした後にFusion Webアプリケーションで同じ行を変更する場合、Johnが変更済の行をアップロードしようとすると、JohnとJaneがそれぞれ行った変更が競合するために、エラーが発生する可能性があります。Fusion Webアプリケーションの構成によっては、JohnはRowInconsistentException
タイプのエラー・メッセージを受信することがあります。Fusion Webアプリケーションを構成してデータを保護する方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「同時に更新したデータの損失を防止する方法」の項を参照してください。
統合Excelワークブックでこの競合を解決するには、JohnがFusion Webアプリケーションから最新バージョンのデータをダウンロードする必要があります。ただし、ADF表コンポーネントのDownload
アクションを起動すると、コンポーネントがExcelワークブックにホストしているすべてのデータがリフレッシュされます。これによって、Johnが加えた他の変更で競合エラー・メッセージを生成しないものが上書きされる可能性があります。このシナリオを解決するには、ADF表コンポーネントのDownloadFlaggedRows
アクションを公開することができます。このアクションが起動すると、エンド・ユーザーがダウンロード用にフラグ付けした行についてのみデータがダウンロードされます。このアクションを使用して、Johnは競合の問題を解決して変更済データをアップロードできます。
第15章「切断されたモードでの複数のWebセッションにおける統合Excelワークブックの使用」には、複数のセッションに対しての統合Excelワークブックの使用に関する情報が記載されています。行のフラグ付けの詳細は、7.10.2項「ADF表コンポーネントでの行のフラグ付け」を参照してください。コンポーネント・アクションの起動の詳細は、8.2.2項「アクション・セット内のコンポーネント・アクションの起動方法」を参照してください。ADF表コンポーネントがサポートするコンポーネントの詳細は、A.9章「ADF表コンポーネントのプロパティとアクション」を参照してください。
RowData.ChangeIndicatorAttribute
プロパティに対してツリー・バインディングの行に固有な属性を指定して、行が最後にADF表コンポーネントによってダウンロードされてから別のユーザーによって変更されたかどうかを判断します。
ワークブックを構成してデータの競合を処理する手順:
統合Excelワークブックを開きます。
ADF表コンポーネントを参照するExcelワークシートのセルを選択し、「Oracle ADF」タブの「コンポーネントの編集」をクリックして、コンポーネントの編集:ADF表ダイアログを表示します。
RowData.ChangeIndicatorAttribute
プロパティについて、行に固有のツリー・バインディングの属性を指定して、統合ExcelワークブックでADF表コンポーネントによって最後にダウンロードされてから、別のユーザーによって行が変更されているかを判断します。
「OK」をクリックします。
ADF表コンポーネントは、RowDownSync
アクションを起動する際にRowData.ChangeIndicatorAttribute
の値として指定した、ツリー・バインディングの行に固有な属性の元の値をキャッシュします。ADF表コンポーネントがRowUpSync
アクションを起動する際、Fusion Webアプリケーションによってホストされるバインディングの値と、ADF表コンポーネントがキャッシュした元の値が異なるかどうかをチェックします。これらが異なる場合、Fusion Webアプリケーションによってホストされるバインディングの値が、ADF表コンポーネントがバインディングの値をダウンロードした後に変更されているため、データの競合を示します。