ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development Frameworkデスクトップ統合開発者ガイド
11gリリース1 (11.1.1.7.0)
B66694-02
  目次へ移動
目次

前
 
次
 

12 統合Excelワークブックへの検証の追加

この章では、統合Excelワークブックにサーバー・サイド検証とクライアント・サイド検証を提供する方法、検証の失敗やデータ競合などのエラーを報告する方法、およびカスタム・エラー・ハンドラを使用してエラー・レポートを構成する方法について説明します。

この章の内容は次のとおりです。

12.1 統合Excelワークブックへの検証の追加の概要

Fusion Webアプリケーションと統合Excelワークブックにサーバー・サイドとクライアント・サイドの検証を構成して、ADFモデル・レイヤーおよびMicrosoft Excelにより提供される検証オプションを活用します。これらの検証オプションに加えて、ADFデスクトップ統合のコンポーネントを利用して、Fusion Webアプリケーションからエラー・メッセージを返したり、コンポーネント・アクションの結果のステータスを提供するほか、Fusion WebアプリケーションによりホストされるデータとのExcelワークブックの競合でデータが変更されるときに発生するエラーを管理できます。

統合Excelワークブックに検証を追加することには、いくつかの利点があります。Fusion Webアプリケーションおよび統合Excelワークブックで検証ルールを作成して、エンド・ユーザーによるデータ入力を検証できます。

12.2 統合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レイヤー検証の追加に関する項を参照してください。

12.3 統合Excelワークブックのクライアント・サイド検証の追加

ADFデスクトップ統合はクライアント・サイドの検証を提供しません。ただし、Excelのデータ検証機能を使用して、エンド・ユーザーがセルに入力したデータの型や値を制御することはできます。これらの機能によって、データ・エントリを一定の日付範囲に制限したり、リストを使用して選択内容を限定したり、正の整数のみをセルに入力したりすることができます。たとえば、EditWarehouses-DT.xlsxワークブックのZipCodeフィールドを構成して、ユーザーがこのフィールドのセルに整数のみを入力できるようにすることができます。

ADF表コンポーネント内の列にカスタム検証を適用した場合、実行時にADF表コンポーネントの列に値が移入されると、検証が伝播されます。ただし、設計時にTreeNodeListサブコンポーネントを参照する列に適用されたカスタム検証は、ADFデスクトップ統合によって実行時に上書きされる点に注意してください。これは、ADFデスクトップ統合が、実行時に起動される独自のリスト制約検証を適用するためです。


注意:

  • 検証が失敗するとExcelにエラー・メッセージが表示されます。これらのエラー・メッセージはローカライズできません。

  • ADFデスクトップ統合は、サーバー・サイドの検証の警告をサポートしていません。Fusion Webアプリケーションで定義されるルールに設定される検証の警告は、統合Excelワークブックによって表示されません。


Excelでのデータ検証の詳細は、Excelのドキュメントを参照してください。

12.4 統合Excelワークブックでレポートされるエラー

Excelワークブックと統合されるFusion Webアプリケーションをホストするサーバーは、操作の結果をフィードバックするエラー・メッセージをエンド・ユーザーに返すことができます。返されるエラー・メッセージには、検証の失敗、競合エラー、レコードの削除などがあります。

12.4.1 EL式を使用してレポートされるエラー

エンド・ユーザーにエラー・メッセージ概要を返すには、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を指します。

ADFデスクトップ統合のSummitサンプル・アプリケーションのEditCustomers-DT.xlsxファイルは、ワークシートで起動するアクション・セットやADF表コンポーネントのアクションで生成されるエラー・メッセージの概要を返す方法を示します。図12-1に、設計モードのEL式を示します。

図12-1 ADF出力テキスト・コンポーネントでエラー・メッセージを返すEL式

エラー・メッセージを返すEL式を示します

12.4.2 コンポーネント・アクションを使用してレポートされるエラー

ADFデスクトップ統合は、ADF表コンポーネントまたは統合Excelワークシートにより生成されるエラー詳細を表示するアクションを提供します。

これらのアクションのいずれかを起動するアクション・セットは、アクションを1つのみ含む必要があります。一般的に、アクション・セットは起動時にエラー・ラベルとメッセージ・リストをクリアします。次のいずれかのアクションを起動するアクション・セットは、エラー・ラベルとメッセージ・リストをエンド・ユーザーに返します。

  • ワークシートのDisplayWorksheetErrorsアクション

    ワークシートのエラー・メッセージを表示するには、ワークシートのコンポーネントのアクション・セットまたはワークシートのリボン・ボタンを構成して、このアクションを起動します。たとえば、図12-2は、DisplayWorksheetErrorsアクションをワークシートのADF出力テキスト・コンポーネントのDoubleClickActionSet項目として構成する、「コンポーネントの編集: ADF出力テキスト」ダイアログを示します。

    図12-2 DisplayWorksheetErrorsアクション

    DisplayWorksheetErrorsアクション

    実行時にADF OutputTextコンポーネントをダブルクリックすると、図12-3に示すようにDisplayWorksheetErrorsアクションが起動します。

    図12-3 DisplayWorksheetErrorsアクションの実行時の表示

    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アクションが起動します。

    図12-4 DisplayTableErrorsアクションの実行時の表示

    DisplayWorksheetErrorsの実行時のメニュー。

    ADF表コンポーネント・アクションの詳細は、A.9項「ADF表コンポーネントのプロパティとアクション」を参照してください。

12.5 ADF表コンポーネントでの行ごとのステータスの追加

ADF表コンポーネントには、次のADF表コンポーネント・アクションの起動後に、ADF表コンポーネントからの行が正常に処理されたかどうかをエンド・ユーザーに示すメカニズムがあります。

ADF表コンポーネントは、ADF表コンポーネント・アクションの起動後に、各行のステータスを_ADF_StatusColumn列に移入します。たとえば、ADF表コンポーネントのUploadアクションの起動後に、各行のアップロード・ステータスを_ADF_StatusColumn列に移入します。

図12-5は、ADF表コンポーネントの行を示しています。Changed列の上向き矢印で示されているように、これらの行の値は変更されています。Zip Code列では、数値が予期されるところに文字列値が入力されています。

図12-5 アップロードの前に行が変更済のADF表コンポーネント

アップロード前のDEGコンポーネント

図12-6は、ADF表コンポーネントのUploadアクションの起動後にADF表コンポーネントにある同じ行を示しています。ADF表コンポーネントは、_ADF_StatusColumn列(この例の実行時はStatusというラベル付き)に、行の更新が成功したかどうかを示すメッセージを移入します。

図12-6 アップロード後に行が変更済のADF表コンポーネント

アップロード後のDEGコンポーネント

デフォルトでは、__ADF_StatusColumn列のDoubleClickActionSetは、ADF表コンポーネントのDisplayRowErrorsアクションを起動するように構成されています。エンド・ユーザーが実行時にこの列の行をダブルクリックすると、ADF表コンポーネントによりDisplayRowErrorsアクションが起動されます。エラーが存在する場合、このアクションによってその行のエラーのリストを示すダイアログが表示されます。エラーがない場合、ダイアログにはエラーが発生しなかったことを示すメッセージが表示されます。

図12-7は、Status列にUpdate failedと表示される図12-6のセルをエンド・ユーザーがダブルクリックすると表示されるダイアログを示しています。

図12-7 行のエラー・メッセージを表示するダイアログ

行のエラー・メッセージを表示するダイアログ

_ADF_StatusColumn列の詳細は、7.11項「ADF表コンポーネント内の特殊な列」を参照してください。

12.6 統合Excelワークブックでのエラー・メッセージへの詳細の追加

Fusion Webアプリケーションを構成して、カスタムのエラー・ハンドラを使用してエラーを報告し、統合Excelワークブックでエンド・ユーザーに表示されるエラー・メッセージに対する詳細を提供することができます。

この機能を実装するには、カスタムのエラー・ハンドラがgetDetailedDisplayMessageメソッドを上書きして、DCErrorMessageオブジェクトを返す必要があります。実行時にADFデスクトップ統合は、カスタムのエラー・ハンドラを検出して、DCErrorMessageオブジェクトに対してgetHtmlTextメソッドを起動します。ADFデスクトップ統合には、エラー・メッセージ・リストのgetHtmlTextメソッドにより返されるHTMLが詳細として含まれます。

カスタムのエラー・ハンドラの作成の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のエラー処理のカスタマイズに関する項を参照してください。

12.7 ワークブックからデータをアップロードする際のデータ競合の処理

エンド・ユーザーの1人(User X)がFusion WebアプリケーションからExcelワークブックにダウンロードしたデータ行に変更を加えて、異なるセッションにいる別のエンド・ユーザー(User Y)が、User Xが行をダウンロードした後にFusion Webアプリケーションで同じ行を変更する場合、User Xが変更済の行のアップロード時に、User XとUser Yがそれぞれ行った変更が競合するために、エラーが発生する可能性があります。Fusion Webアプリケーションの構成によっては、User XはRowInconsistentExceptionタイプのエラー・メッセージを受信することがあります。Fusion Webアプリケーションを構成してデータを保護する方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の同時に更新したデータの損失を防止する方法に関する項を参照してください。

統合Excelワークブックでこの競合を解決するには、User XがFusion Webアプリケーションから最新バージョンのデータをダウンロードする必要があります。ただし、ADF表コンポーネントのDownloadアクションを起動すると、コンポーネントがExcelワークブックにホストしているすべてのデータがリフレッシュされます。これによって、User Xが加えた他の変更で競合エラー・メッセージを生成しないものが上書きされる可能性があります。このシナリオを解決するために、ADF表コンポーネントのDownloadFlaggedRowsアクションを公開できます。このアクションが起動すると、エンド・ユーザーがダウンロード用にフラグ付けした行についてのみデータがダウンロードされます。このアクションを使用して、User Xは競合の問題を解決し、変更済データをアップロードできます。

第15章「切断されたモードでの複数のWebセッションにおける統合Excelワークブックの使用」には、複数のセッションに対しての統合Excelワークブックの使用に関する情報が記載されています。行のフラグ付けの詳細は、7.10.2項「ADF表コンポーネントでの行のフラグ付け」を参照してください。コンポーネント・アクションの起動の詳細は、8.2.2項「アクション・セット内のコンポーネント・アクションの起動方法」を参照してください。ADF表コンポーネントでサポートされるコンポーネントの詳細は、A.9章「ADF表コンポーネントのプロパティとアクション」を参照してください。

12.7.1 データをアップロードする際のデータ競合を処理するためのワークブックの構成

RowData.ChangeIndicatorAttributeプロパティに対してツリー・バインディングの行に固有な属性を指定して、行が最後にADF表コンポーネントによってダウンロードされてから別のユーザーによって変更されたかどうかを判断します。

ワークブックを構成してデータの競合を処理するには:

  1. 統合Excelワークブックを開きます。

  2. ADF表コンポーネントのセルを選択し、「Oracle ADF」タブの「プロパティの編集」をクリックします。

  3. 「コンポーネントの編集: ADF出力テキスト」で、RowData.ChangeIndicatorAttributeプロパティについて、行に固有のツリー・バインディングの属性を指定して、統合ExcelワークブックでADF表コンポーネントによって最後にダウンロードされてから、別のユーザーによって行が変更されているかを判断します。

  4. 「OK」をクリックします。

12.7.2 実行時の処理: データ競合の処理方法

ADF表コンポーネントは、RowDownSyncアクションを起動する際にRowData.ChangeIndicatorAttributeの値として指定した、ツリー・バインディングの行に固有な属性の元の値をキャッシュします。ADF表コンポーネントがRowUpSyncアクションを起動する際、Fusion Webアプリケーションによってホストされるバインディングの値と、ADF表コンポーネントがキャッシュした元の値が異なるかどうかをチェックします。これらが異なる場合、Fusion Webアプリケーションによってホストされるバインディングの値が、ADF表コンポーネントがバインディングの値をダウンロードした後に変更されているため、データの競合を示します。