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

前
 
次
 

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

この章では、統合Excelワークブックへの検証の追加方法について説明します。

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

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

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

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

12.1.1 統合Excelワークブックの検証のユースケースおよび例

検証ルールは、無効なデータのアップロードを停止することでサーバーを保護します。たとえば、ワークシートおよび表の検証ルールを使用して、図12-1に示すように、サーバーへのアップロード時に無効なデータを取得できます。

図12-1 実行時のワークブックおよび表の検証エラー

実行時のワークブックおよび表の検証エラー

12.1.2 統合Excelワークブックに検証を追加するための追加の機能

統合Excelワークブックで検証ルールを適用した後、必要に応じてワークブックを構成するための機能をさらに追加できます。使用可能な他の機能へのリンクは次のとおりです。

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

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

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

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を指します。

Fusion Order DemoアプリケーションのMaster Price ListモジュールのEditPriceList-DT.xlsxファイルは、ワークシートで起動するアクション・セットやADF表コンポーネントのアクションで生成されるエラー・メッセージの概要を返す方法を示します。図12-2に、設計モードのEL式を示します。

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

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

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

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

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

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

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

    図12-3 DisplayWorksheetErrorsアクション

    DisplayWorksheetErrorsアクション

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

    図12-4 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-5に示すようにDisplayTableErrorsアクションが起動します。

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

    DisplayWorksheetErrorsの実行時のメニュー。

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

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

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

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

図12-6はADF表コンポーネントの行を示し、Changed列の上向き矢印で示すように、これらの行の値は変更済です。CostPrice列では、数値が1つあるべきところに2つの文字列の値が入力されています。

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

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

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

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

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

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

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

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

_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人(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表コンポーネントのプロパティとアクション」を参照してください。

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

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

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

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

  2. ADF表コンポーネントを参照するExcelワークシートのセルを選択し、「Oracle ADF」タブの「コンポーネントの編集」をクリックして、コンポーネントの編集:ADF表ダイアログを表示します。

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

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

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

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