Oracle® Fusion Middleware Oracle Application Development Frameworkデスクトップ統合開発者ガイド 11gリリース2 (11.1.2.2.0) B66718-02 |
|
![]() 前 |
![]() 次 |
この章では、統合Excelワークブックにサーバー・サイド検証とクライアント・サイド検証を提供する方法、検証の失敗やデータ競合などのエラーを報告する方法、およびカスタム・エラー・ハンドラを使用してエラー・レポートを構成する方法について説明します。
この章の内容は次のとおりです。
Fusion Webアプリケーションと統合Excelワークブックにサーバー・サイドとクライアント・サイドの検証を構成して、ADFモデル・レイヤーおよびMicrosoft Excelにより提供される検証オプションを活用します。これらの検証オプションに加えて、ADFデスクトップ統合のコンポーネントを利用して、Fusion Webアプリケーションからエラー・メッセージを返したり、コンポーネント・アクションの結果のステータスを提供するほか、Fusion WebアプリケーションによりホストされるデータとのExcelワークブックの競合でデータが変更されるときに発生するエラーを管理できます。
統合Excelワークブックに検証を追加することには、いくつかの利点があります。Fusion Webアプリケーションおよび統合Excelワークブックで検証ルールを作成して、エンド・ユーザーによるデータ入力を検証できます。
検証ルールは、無効なデータのアップロードを停止することでサーバーを保護します。たとえば、ワークシートおよび表の検証ルールを使用して、図12-1に示すように、サーバーへのアップロード時に無効なデータを取得できます。
統合Excelワークブックで検証ルールを適用した後、必要に応じてワークブックを構成するための機能をさらに追加できます。使用可能な他の機能へのリンクは次のとおりです。
統合Excelワークブックのテスト: 統合Excelワークブックを公開してデプロイする前に、テストする必要があります。詳細は、第13章「統合Excelワークブックのテスト」を参照してください。
統合Excelワークブックの公開およびデプロイ: 統合Excelワークブックの設計と検証に続く最終ステップは、公開およびデプロイです。詳細は、第14章「統合Excelワークブックのデプロイ」を参照してください。
ADFデスクトップ統合は、ADFモデル・レイヤーがバインディングの属性に対して設定する検証ルールを使用します。エンド・ユーザーがADFデスクトップ統合コンポーネントの1つに入力または編集したデータ(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-2に、設計モードのEL式を示します。
ADFデスクトップ統合は、ADF表コンポーネントまたは統合Excelワークシートにより生成されるエラー詳細を表示するアクションを提供します。
これらのアクションのいずれかを起動するアクション・セットは、アクションを1つのみ含む必要があります。一般的に、アクション・セットは起動時にエラー・ラベルとメッセージ・リストをクリアします。次のいずれかのアクションを起動するアクション・セットは、エラー・ラベルとメッセージ・リストをエンド・ユーザーに返します。
ワークシートのDisplayWorksheetErrors
アクション
ワークシートのエラー・メッセージを表示するには、ワークシートのコンポーネントのアクション・セットまたはワークシートのリボン・ボタンを構成して、このアクションを起動します。たとえば、図12-3は、DisplayWorksheetErrors
アクションをワークシートのADF出力テキスト・コンポーネントのDoubleClickActionSet
項目として構成する、アクションの編集ダイアログを示します。
実行時にADF OutputTextコンポーネントをダブルクリックすると、図12-4に示すように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-5に示すようにDisplayTableErrors
アクションが起動します。
ADF表コンポーネント・アクションの詳細は、A.9項「ADF表コンポーネントのプロパティとアクション」を参照してください。
ADF表コンポーネントには、次のADF表コンポーネント・アクションの起動後に、ADF表コンポーネントからの行が正常に処理されたかどうかをエンド・ユーザーに示すメカニズムがあります。
DeleteFlaggedRows
Upload
ADF表コンポーネントの列から起動されたDoubleClickActionSet
ADF表コンポーネントは、ADF表コンポーネント・アクションの起動後に、各行のステータスを_ADF_StatusColumn
列に移入します。たとえば、ADF表コンポーネントのUpload
アクションの起動後に、各行のアップロード・ステータスを_ADF_StatusColumn
列に移入します。
図12-6は、ADF表コンポーネントの行を示しています。Changed列の上向き矢印で示されているように、これらの行の値は変更されています。CostPrice列では、数値が1つあるはずのところに2つの文字列値が入力されています。
図12-7は、ADF表コンポーネントのUpload
アクションの起動後にADF表コンポーネントにある同じ行を示しています。ADF表コンポーネントは、_ADF_StatusColumn
列(この例の実行時はStatusというラベル付き)に、行の更新が成功したかどうかを示すメッセージを移入します。
デフォルトでは、__ADF_StatusColumn
列のDoubleClickActionSet
は、ADF表コンポーネントのDisplayRowErrors
アクションを起動するように構成されています。エンド・ユーザーが実行時にこの列の行をダブルクリックすると、ADF表コンポーネントによりDisplayRowErrors
アクションが起動されます。エラーが存在する場合、このアクションによってその行のエラーのリストを示すダイアログが表示されます。エラーがない場合、ダイアログにはエラーが発生しなかったことを示すメッセージが表示されます。図12-8は、Status列にUpdate failed
と表示される図12-7のセルをエンド・ユーザーがダブルクリックすると表示されるダイアログを示しています。
_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表コンポーネントがバインディングの値をダウンロードした後に変更されているため、データの競合を示します。