ヘッダーをスキップ

Oracle Applications開発者ガイド
リリース12
E06048-01
目次へ
目次
前のページへ
前へ
次のページへ
次へ

フレックスフィールド

フレックスフィールドの概要

フレックスフィールドは、複数のセグメントで構成されたフィールドです。各セグメントは、ユーザーまたはエンド・ユーザーによって名前が付けられ、一連の有効な値で構成されます。フレックスフィールドには、キー・フレックスフィールドと付加フレックスフィールドという2つの種類があります。

フレックスフィールドの機能および概念の説明と、Oracle Applicationsでのフレックスフィールドの設定方法は、『Oracle Applicationsフレックスフィールド・ガイド』を参照してください。フレックスフィールドによるデータの入力および問合せは、『Oracle Applicationsユーザーズ・ガイド』を参照してください。

キー・フレックスフィールド

ほとんどの会社では、勘定科目、部品番号およびその他のビジネス・エンティティを識別するために、意味のあるセグメント(インテリジェント・キー)で構成されたコードを使用します。たとえば、ある会社では、メモ帳、細罫、黄色、8 1/2x14インチを示す「PAD-NR-YEL-8 1/2x14」という部品番号を使用します。キー・フレックスフィールドを使用すると、エンド・ユーザーがキー・フレックスフィールド・セグメントによって思いどおりに変更できる、柔軟性に富んだコードのデータ構造を提供できます。エンド・ユーザーは、キー・フレックスフィールドによって、ユーザーのアプリケーションをカスタマイズし、コードを望みどおりに表示できます。たとえば、別の会社で同じメモ帳を示す「8x14-PD-Y-NR」というコードを使用する場合には、そのコードに合わせてユーザーのアプリケーションを簡単にカスタマイズできます。キー・フレックスフィールドを使用すると、アプリケーションのプログラムを変更せずに様々な顧客の要求を満たせます。

別の例をあげると、Oracle General Ledgerは、会計フレックスフィールドというキー・フレックスフィールドを使用して、GL勘定科目を一意に識別します。オラクル社では、この会計フレックスフィールドをカスタマイズして、会社コード、原価センター、勘定科目、製品、生産ラインおよび補助勘定という6つのセグメントを設定しています。また、各セグメントの有効な値を定義するとともに、セグメントの有効な組合せを示す相互検証ルールを定義しています。GL勘定科目のフィールドの構成は、会社によって異なります。会計フレックスフィールドのキー・フィールドを追加すると、Oracle General Ledgerを使用して様々な会社の要求に対応できます。ある会社では会計フレックスフィールドに6つのセグメントを設定し、別の会社では12のセグメントを設定しますが、いずれの場合もプログラム作成は不要です。

キー・フレックスフィールドは、アプリケーション・エントリを一意に識別するインテリジェント・キーです。各キー・フレックスフィールド・セグメントには、ユーザーによって名前が付けられ、一連の有効な値が指定されます。各値には意味も指定されています。Oracle General Ledgerの会計フレックスフィールドは、GL勘定科目を一意に識別するのに使用するキー・フレックスフィールドの例です。

キー・フレックスフィールドは、様々なアプリケーションで使用できます。たとえば、在庫アプリケーションで部品フレックスフィールドを使用すると、部品を一意に識別できます。この場合、部品フレックスフィールドに製品クラス、製品コード、サイズ、色および梱包コードなどのセグメントを設定します。また、色セグメントの有効な値として01から10(01は赤、02は青、...)などの範囲を定義できます。さらに、セグメント値の有効な組合せを示す相互検証ルールを指定すると、たとえばある特定の製品コードの製品には決まった色しかないようにも設定できます。

付加フレックスフィールド

付加フレックスフィールドを使用すると、カスタマイズ可能な拡張領域をフォームに設定することにより、ユーザーのアプリケーションを変更せずに、様々なユーザー・グループの要求を満たすことができます。たとえば、小売アプリケーションで顧客の記録を取る場合を考えます。通常、「顧客」フォームは、「名前」、「住所」、「州」、「顧客番号」などのフィールドで構成されます。顧客の服のサイズ、色の好みまたは担当販売員などを記録する追加フィールドは、これらの顧客エンティティ属性がエンド・ユーザーのアプリケーション使用方法により異なるため、フォームに含まれません。この小売アプリケーションを工具店で使用すると、服のサイズ用のフィールドがあることが不都合になります。また、エンド・ユーザーに必要なフィールドを最初にすべて用意しておいたとしても、記録対象にする顧客属性が後で明らかになる場合があります。このために、付加フレックスフィールドをフォームに追加して、エンド・ユーザーが必要な拡張領域を使用できるようにします。付加フレックスフィールドは状況依存型にできるため、アプリケーションで保存する情報がフォームの他の部分に入力した値によって異なる場合にも有効に活用できます。

付加フレックスフィールドはアプリケーション・エンティティを表し、カスタマイズ可能なフォームおよびデータベース拡張領域で構成されます。各付加セグメントには、ユーザーが付けた名前があります。また、入力された値を検証するために、有効なセグメント値を指定したり、基準を設定したりすることが可能です。

Oracle General Ledgerでは、仕訳入力用のフォームに付加フレックスフィールドが含まれているため、エンド・ユーザーが自分で選択した情報を追加できます。たとえば、ソース文書番号、項目を作成した人の名前などの仕訳入力に関する追加情報をエンド・ユーザーが取得できます。

固定資産アプリケーションでは、固定資産の説明を追加できるようにするために、付加フレックスフィールドを使用します。また、資産のフレックスフィールドの構造を資産タイプ・フィールドの値によって変更できます。たとえば資産タイプが「机」の場合、付加フレックスフィールドとしてスタイル、サイズおよび素材である木の種類が表示され、資産タイプが「コンピュータ」の場合、付加フレックスフィールドとしてCPUチップおよびメモリー容量が表示されます。

容易なカスタマイズ

エンド・ユーザーに必要なすべてのフォームおよびデータベース・フィールドや、エンド・ユーザーの要求が変わったときのフィールド構成は予測できないので、フィールドをいつでも自由に変更できることは重要です。キーおよび付加フレックスフィールドを使用すると、エンド・ユーザーがプログラムを変更することなくアプリケーションを業務ニーズに合わせてカスタマイズできるようになります。柔軟なデータ構造が必要な場合は、アプリケーションにフレックスフィールドを組み込むことが必要です。

フレックスフィールドのカスタマイズとは、各フレックスフィールド・セグメントのプロンプト、長さおよびデータ・タイプを指定することです。また、各セグメントの有効な値やユーザー・アプリケーションでの各値の意味を指定することも含まれます。ユーザーまたはエンド・ユーザーは、セグメント値の有効な組合せを指定する相互検証ルールを定義することもできます。

通常、フレックスフィールドのカスタマイズは、エンド・ユーザーがアプリケーション・インストール時に行いますが、開発者がアプリケーション作成時にフレックスフィールドをカスタマイズすることもできます。開発者がカスタマイズした後にエンド・ユーザーがフレックスフィールドを変更することがない場合でも、自動によるセグメント検証、自動によるセグメント相互検証、複数のセグメント体系などのフレックスフィールド機能は、エンド・ユーザーが有効に活用できる機能です。

単一フレックスフィールドに対する複数の体系

アプリケーションの中には、複数のユーザーが1つのフレックスフィールドに対して異なるセグメント体系を必要とするものがあります。また、フレックスフィールドのセグメントを他のフォームやデータベース・フィールドの値などに従って決定することが必要になる場合もあります。

フレックスフィールドでは、1つのフレックスフィールドに複数のセグメント体系を定義できます。フレックスフィールドには、エンド・ユーザーにより異なるプロンプトおよびフィールドをフォームまたはアプリケーションのデータの条件に基づいて表示できます。

たとえば、Oracle General Ledgerでは、会計フレックスフィールド体系を様々な会計帳簿のユーザーに提供しています。Oracle General Ledgerでは、会計帳簿ユーザー・プロファイル・オプションの値に基づき使用対象のフレックスフィールド体系を決定します。

標準要求発行パラメータ

フレックスフィールド・セグメントで使用する機能のほとんどは、標準要求発行プログラムのパラメータ・ウィンドウにも適用されます。たとえば、セキュリティ・ルールおよび特別な値セットを実行パラメータに定義できます。

定義

フレックスフィールドの機能および概念の詳細は、『Oracle Applicationsフレックスフィールド・ガイド』を参照してください。

セグメント

キー・フレックスフィールドの場合、セグメントは完全なコードの一部分です。付加フレックスフィールドの場合、セグメントはそのエンティティの1つのフィールドまたは属性です。セグメントは表内の単一列で表されます。

組合せ

キー・フレックスフィールドで、完全なコードまたはキーを構成するセグメント値の組合せのことです。キー・フレックスフィールドをカスタマイズするときに、単純な相互検証ルールによって有効な組合せを定義できます。一連の有効な組合せは、範囲で表現することもできます。

体系

フレックスフィールド体系は、フレックスフィールド・セグメントの特定の組合せです。体系の最大サイズは、個々のフレックスフィールドによって異なります。フレックスフィールドは、1つ以上の体系で構成されます。キーおよび付加フレックスフィールドは両方とも複数の体系で構成可能です。ユーザーは、要求に応じて体系をカスタマイズできます。

組合せ表

キー・フレックスフィールドで、キー・フレックスフィールド・セグメント値の有効な組合せを保存するために、アプリケーションに追加するデータベース表のことです。各キー・フレックスフィールドには、組合せ表を設定する必要があります。この表は、各フレックスフィールド・セグメント用の列とその他の列で構成され、エンティティ表として使用する表と同じです。

組合せフォーム

組合せフォームとは、キー・フレックスフィールドで実表(またはビュー)が組合せ表になっているフォームのことです。組合せフォームの目的は、組合せ表を保守することのみです。大部分のキー・フレックスフィールドには、組合せフォームが1つありますが、組合せフォームがないキー・フレックスフィールドもあります。組合せフォームがないキー・フレックスフィールドは、他のフォームから動的挿入によって保守します。

動的挿入

動的挿入とは、新規の有効な組合せを組合せフォーム以外のフォームからキー・フレックスフィールド組合せ表に挿入することです。

キー・フレックスフィールドの組合せ表にフレックスフィールドおよびWHO列以外の必須列がない場合は、キー・フレックスフィールドの設定時に動的挿入を許可するように選択できます。動的挿入を許可することによって、エンド・ユーザーが組合せフォーム以外のフォームからフレックスフィールド・ウィンドウを使用して、セグメント値の新規の組合せを入力できるようになります。エンド・ユーザーの入力した新規の組合せが相互検証ルールに適していると、フレックスフィールドによって動的に組合せ表に挿入されます。相互検証ルールに適していないと、セグメント値を変更するようにエラー・メッセージが表示されます。

フレックスフィールドまたはWHO列以外の必須列を含む組合せ表を使用してキー・フレックスフィールドを作成する場合、動的挿入を許可できないため、エンド・ユーザーが組合せフォーム以外のフォームからフレックスフィールド・ウィンドウを介して新規の組合せを入力することはできません。

フレックスフィールド・クオリファイア

フレックスフィールド・クオリファイアによって、エンド・ユーザーがキー・フレックスフィールドのカスタマイズ時に定義する必要があるセグメントを特定します。開発者は、アプリケーション作成時にフレックスフィールド・クオリファイアを指定することによって、エンド・ユーザーがフレックスフィールドをカスタマイズしてアプリケーションに必要なキー・セグメントを必ず追加できるようにします。

たとえば、キー・フレックスフィールドによって勘定科目を一意に識別する一般会計アプリケーションを作成するとします。アプリケーションでは、勘定科目セグメントにするキー・セグメントと貸借一致セグメントにするキー・セグメントが必要です。開発者は、勘定科目および貸借一致という2つのフレックスフィールド・クオリファイアを定義することによって、エンド・ユーザーが必ずこれらのキー・セグメントを設定できるようにします。エンド・ユーザーは、勘定科目フレックスフィールドのカスタマイズ時に、勘定科目および貸借一致フレックスフィールド・クオリファイアを各キー・セグメントに結び付けます。勘定科目および貸借一致の情報をアプリケーションに実行時に返す処理はキー・フレックスフィールドが行うため、開発者は、どのキー・セグメントが勘定科目または貸借一致セグメントになるかを理解する必要がありません。

セグメント・クオリファイア

セグメント・クオリファイアは、キー・セグメント値の特性を表しています。開発者は、セグメント・クオリファイアを使用することによって、エンド・ユーザーがアプリケーション使用中に入力するセグメント値に関する情報を取得します。

たとえば、エンド・ユーザーがGL勘定科目を一意に識別するフレックスフィールドの勘定科目セグメントに値を入力する場合を考えます。開発者はどのセグメントが勘定科目を表しているかを理解していないため、アプリケーションから勘定科目の値を直接参照できません。けれども、アプリケーションから簡単に参照できる「勘定科目タイプ」というセグメント・クオリファイアをアプリケーション作成時に各勘定科目の値に関連付けることができます。

勘定科目の値1000(現金を表す)が「資産」という勘定科目タイプであるとします。アプリケーションでは、開発者が汎用組合せ表で指定した列にキー・フレックスフィールドから勘定科目タイプが返るので、勘定科目タイプを参照できます。このため、アプリケーションに勘定科目タイプによる条件分岐ロジックを作成することが可能になります。

セグメント・クオリファイアは、フレックスフィールド・クオリファイアを定義するときに指定します。各フレックスフィールド・クオリファイアには、1つ以上のセグメント・クオリファイアを指定できます。

体系定義列

フレックスフィールドで複数のセグメント体系をサポートするために組合せ表またはエンティティ表に追加する列のことです。アプリケーション作成時に、体系定義列に値を設定することによって、エンド・ユーザーが参照するフレックスフィールド・セグメント体系を指定できます。

たとえば、Oracle General Ledgerでは、会計フレックスフィールド用の組合せ表の体系定義列に「勘定体系」識別子を設定します。このため、Oracle General Ledgerでは、様々なユーザーに異なる会計フレックスフィールド体系(勘定体系)を提供できます。

アプリケーションへのフレックスフィールドの組込み

作成中のアプリケーションにフレックスフィールドを組み込むには、次の手順を実行します。

最初に、キーまたは付加フレックスフィールドを必要とするアプリケーション・エンティティを決定します。キー・フレックスフィールドを使用することによって、インテリジェント・キーを必要とするエンティティを一意に識別します。

重要: 本書では組合せ表構造やフォーム構文などのキー・フレックスフィールドに関する情報を提供します。この情報を利用すると、カスタム・フォームおよびアプリケーションをOracle Applicationsの提供するキー・フレックスフィールドによって統合できます。たとえば、Oracle Applicationsキー・フィールドを呼び出す外部キー・フォームを作成できます。ただし、キー・フレックスフィールド用APIはOracle Applicationsの今後のリリースで変更される可能性があるため、Oracle Applicationsによって提供されるキー・フレックスフィールド以外のキー・フレックスフィールドを新規に作成しないことをお薦めします。

エンティティに関する情報を追加するために状況依存型の拡張領域を設定する場合は、付加フレックスフィールドを使用します。ユーザーができるだけ自由に変更できるようにするには、アプリケーション内のすべてのエンティティに付加フレックスフィールドを定義することを検討する必要があります。

フレックスフィールドを必要とするアプリケーション・エンティティを決定した後、フレックスフィールドをアプリケーション・データベースに設計します。フレックスフィールドをOracle Application Object Libraryに登録し、必要な場合は、フレックスフィールドおよびセグメント・クオリファイアをキー・フレックスフィールドに指定します。次に、フレックスフィールドを含むアプリケーション・フォームを開発し、Oracle Application Object Libraryルーチンを呼び出してフレックスフィールドを有効にします。

フレックスフィールドを定義した後でも、ユーザーまたはエンド・ユーザーはセグメントの特定のセットを追加してカスタマイズできます。

アプリケーション・データベースでのフレックスフィールドの設計

フレックスフィールドを定義するアプリケーション・エンティティを表すデータベース表にフレックスフィールド列を追加します。ユーザーまたはエンド・ユーザーがカスタマイズする各フレックスフィールド・セグメントに対して、1列ずつ追加します。単一フレックスフィールド体系には、少なくともユーザーが必要とするセグメントの最大数と同じ数の列が必要です。フレックスフィールド・ウィンドウをオープンしたときに画面上にセグメントをすべて表示できない場合は、縦にスクロールできます。

キー・フレックスフィールドの場合、組合せ表はそのアプリケーション・エンティティを表します。組合せ表には、フレックスフィールド・セグメント列の他に、キー・フレックスフィールドに必要なその他の列も含まれます。Oracle Applicationsの提供するキー・フレックスフィールドには、組合せ表があらかじめ定義されています。

別のアプリケーション・フォームからフレックスフィールドの組合せを使用することを許可するには、組合せ表の一意ID列への外部キー参照をそのアプリケーション表に指定する必要があります。これによって、組合せ表ではなくてフォームを使用して有効な組合せを表示または入力できるようになります。Oracle Applicationsキー・フレックスフィールドを使用するカスタム・アプリケーションを作成する場合は、フレックスフィールドを参照するカスタム・アプリケーション表に外部キー参照を指定します。

付加フレックスフィールドを定義するには、選択したアプリケーション表に付加セグメント列を指定します。エンド・ユーザーが複数のセグメント体系を定義する場合には、体系定義列(コンテキスト列と呼ぶこともある)も指定します。

関連項目: キー・フレックスフィールドの実装および付加フレックスフィールドの実装

フレックスフィールドの登録

フレックスフィールドをデータベースに設計した後に、フレックスフィールドをOracle Application Object Libraryに登録します。フレックスフィールドを登録することによって、データベースに存在するフレックスフィールドをObject Libraryに知らせ、そのフレックスフィールドに関する基本的な情報を提供します。

フレックスフィールドの登録時に、エンド・ユーザーがフレックスフィールド・ポップアップ・ウィンドウを開いたときに表示される名前(「会計フレックスフィールド」、「仕入先フレックスフィールド」など)を付けます。エンド・ユーザーは、フレックスフィールドをカスタマイズするときに、ユーザーが付けたフレックスフィールド名を変更できます。

フォームへのフレックスフィールドの組込み

フォームにフレックスフィールドを追加する場合は、アプリケーション表に定義したフレックスフィールド列(一意ID、体系定義、セグメントおよびその他の列)を表すために、非表示のフォーム・フィールドを定義します。また、エンド・ユーザーのセグメント値入力後にフォームに表示される連結セグメント値文字列を表すために、表示されるフォーム・フィールドも定義します。さらに、各セグメントの意味の連結文字列を表すために、表示されるフォーム・フィールドを追加することもできます。

フレックスフィールドを有効にするには、Oracle Application Object Libraryルーチンをフォームのトリガーから呼び出します。

関連項目: キー・フレックスフィールドの実装および付加フレックスフィールドの実装

フレックスフィールドおよびアプリケーションのアップグレード

アプリケーションをアップグレードしても、ユーザーが定義またはカスタマイズしたフレックスフィールドに影響はありません。ただし、アプリケーションの中にはフレックスフィールドを再コンパイルする必要があるものもあります。キー・フレックスフィールドを再コンパイルには、キー・フレックスフィールド・セグメント・フォームを使用し、付加フレックスフィールドを再コンパイルするには、付加フレックスフィールド・セグメント・フォームを使用します。フレックスフィールドを定める各行をスクロールして保存すると、フォームによって自動的にフレックスフィールドが再コンパイルされます。

すべての確定済フレックスフィールドをオペレーティング・システムから1回の操作で再コンパイルすることもできます。アプリケーションのアップグレード後にすべてのフレックスフィールドを1回の操作でコンパイルする方法の詳細は、インストレーション・マニュアルを参照してください。

関連項目:

キー・フレックスフィールドの実装

『Oracle Applicationsフレックスフィールド・ガイド』

キー・フレックスフィールドの実装

キー・フレックスフィールドを実装するには、次の項目を実行する必要があります。

キー・フレックスフィールドは、次の3種類のフォームに実装可能で、各フォームに別々の方法で実装されます。

様々なアプリケーションに対して、キー・フレックスフィールドを保守するために1つの組合せフォームを使用することがあります。この場合、キー・フレックスフィールドはアプリケーション内のエンティティを表します。また、同じキー・フレックスフィールドへの外部キー参照を持つフォームを1つ以上使用することもあります。たとえば、注文入力/在庫アプリケーションでは、新規の部品を部品番号用キー・フレックスフィールドで指定するために組合せフォームを使用します。さらに、注文を構成する部品を示すキー・フレックスフィールドによって、部品の注文を入力するための外部キー参照を持つフォームを使用します。

この他に、キー・フレックスフィールド範囲を持つフォームを設定して、部品番号の範囲を操作できます。このフレックスフィールド・フォームは、組合せフォームと外部キー・フォームの両方と同じキー・フレックスフィールドを参照しますが、セグメント値の範囲(各セグメントの最小値と最大値)は、範囲フォームの実表として機能する範囲フレックスフィールド表に保存されます。

キー・フレックスフィールド範囲

各キー・セグメントに対して1つの値ではなくて最大値と最小値を設定するためにアプリケーションに追加する特別な種類のキー・フレックスフィールドです。通常、キー・フレックスフィールド範囲は、フォーム上で横に並ぶ2つのフレックスフィールドとして表示されます。左側のフレックスフィールドが範囲の最小値で、右側のフレックスフィールドが最大値です。

Oracle Application Object Libraryでは、キー・フレックスフィールド範囲を使用して、有効な組合せの相互検証ルールを指定できます。

キー・フレックスフィールドのデータベース列の定義

アプリケーションに設計した各キー・フレックスフィールドに対して、エンド・ユーザーの入力するフレックスフィールドの組合せを保存するために、組合せ表を作成する必要があります。エンド・ユーザーが有効な組合せ(組合せフォーム)を定義できるようにするために特別なフォームを作成するか、または、Oracle Application Object Libraryによって、エンド・ユーザーが最初に使用するときに組合せ表が動的に作成されるようにします(外部キー参照を持つフォームから作成)。組合せ表を保守する組合せフォームを作成しない場合でも、組合せ表は作成する必要があります。Oracle Applicationsの提供するキー・フレックスフィールドには、あらかじめ組合せ表が定義されています。

キー・フレックスフィールド用の組合せ表に加えて、外部キー参照を持つフォームとキー・フレックスフィールド範囲を持つフォームのために1つ以上の表を作成する必要があります。

組合せ表

キー・フレックスフィールドでは、1つの組合せ表に最大70のセグメント列をサポートしています。たとえば、組合せ表には、キー・フレックスフィールドでそれぞれの有効な組合せに指定した一意のID用の列を作成します。また、エンド・ユーザーが複数の体系を定義する場合には、体系定義列も追加します。アプリケーションでセグメント・クオリファイアを使用する場合は、定義対象の各セグメント・クオリファイアに対して表に導出列を追加する必要があります。

アプリケーション・エンティティ用のキー・フレックスフィールド組合せ表を作成するには、次の作業を実行します。

アプリケーションで、外部キー参照を持つフォームから有効な新規組合せの動的挿入を許可する場合は、必須のアプリケーション固有列を組合せ表に指定しないでください。組合せ表には、一意ID、体系定義、セグメント列などキー・フレックスフィールドの定義に必要な列のみを指定します。ただし、必須でないアプリケーション固有列および導出セグメント・クオリファイアの列であれば指定できます。必須のアプリケーション固有列が組合せ表に含まれる場合は、外部キー参照を持つフォームから新規の有効な組合せを動的に挿入できません。表で動的挿入が許可されていない場合は、組合せ表に基づいて、エンド・ユーザーが有効な組合せを作成するための組合せフォームを作成する必要があります。

新規の有効な組合せを動的に挿入する必要がこれからもない場合は、エンド・ユーザーが有効な組合せを組合せ表(組合せフォーム)で直接表示、入力またはメンテナンスできる単一のフォームを開発する必要があります。動的挿入を実行できる場合でも、動的挿入を許可しないようにキー・フレックスフィールドを体系ごとに設定できます。

警告: Oracle Application Object Libraryフレックスフィールド・ルーチン以外の機能では、決してコード組合せ表にレコードを挿入しないでください。これを実行すると、重大なデータ破損の問題が発生したり、アプリケーションを破壊したりする可能性があります。

外部キー参照を持つ表

外部キー参照(組合せ表の一意ID列への)を持つフォーム用の実表として使用する各表には、対応する組合せ表の一意ID列と同じ名前のデータベース列を1つ定義します(型NUMBER、長さ38、アプリケーションの要件によりNULLまたは非NULLが決まる)。

組合せ表に体系列がある場合は、外部キー表の体系列を対応するフォーム・フィールドとともに追加するか、キー・フレックスフィールド・ルーチンへのコール内のNUMパラメータに体系ID番号を渡す別の方式を用意する必要があります。たとえば、体系番号をプロファイル・オプションに保存し、オプション値をNUMパラメータ内で使用できます。

この種類の表には、SEGMENTn列またはその他のキー・フレックスフィールド列は不要です。

キー・フレックスフィールド範囲を持つ表

単一の組合せへの外部キー参照ではなくてキー・フレックスフィールド範囲をサポートする表を作成するには、組合せ表内の各SEGMENTn列に対して1組のSEGMENTn_LOWおよびSEGMENTn_HIGH列を定義します(型VARCHAR2、長さ1から60、列はすべて同じ長さ、NULL)。

組合せ表に体系列がある場合は、範囲表の体系列を対応するフォーム・フィールドとともに追加するか、キー・フレックスフィールド・ルーチンへのコール内のNUMパラメータに体系ID番号を渡す別の方式を用意する必要があります。たとえば、体系番号をプロファイル・オプションに保存し、オプション値をNUMパラメータ内で使用できます。

この表には、その他のフレックスフィールド列は不要です。

キー・フレックスフィールド表の登録

組合せ表を作成した後は、表登録APIによってOracle Application Object Libraryに表を登録する必要があります。

キー・フレックスフィールドの登録

表の登録を正常に実行した後に、キー・フレックスフィールドをOracle Application Object Libraryに登録します。キー・フレックスフィールドの登録には、「キー・フレックスフィールド」ウィンドウを使用します。

キー・フレックスフィールドを登録するときに、キー・フレックスフィールドが存在する組合せ表に加えて、一意IDおよび体系定義列の名前も確認します。Oracle Applicationsの提供するキー・フレックスフィールドはあらかじめ登録されています。

キー・フレックスフィールドのクオリファイアの定義

キー・フレックスフィールドを登録するときに、キー・フレックスフィールドのフレックスフィールドおよびセグメント・クオリファイアを指定します。

エンド・ユーザーがキー・フレックスフィールドをカスタマイズしてアプリケーションに必要なセグメントを必ず追加できるようにする場合は、フレックスフィールド・クオリファイアを定義する必要があります。たとえば、Oracle General Ledgerでは、会計フレックスフィールドに勘定科目および貸借一致フレックスフィールド・クオリファイアを指定して、エンド・ユーザーが勘定科目および貸借一致セグメントを必ず定義できるようにしています。

アプリケーションでエンド・ユーザーの入力するキー・セグメント値の意味特性を認識する必要がある場合は、セグメント・クオリファイアを定義する必要があります。各フレックスフィールド・クオリファイアには、1つ以上のセグメント・クオリファイアを指定します。たとえば、Oracle General Ledgerでは、会計フレックスフィールドで「勘定科目タイプ」のセグメント・クオリファイアをフレックスフィールド・クオリファイア「勘定科目」に割り当てています。このため、エンド・ユーザーは、勘定科目の値1000を「現金」と意味するように定義し、「資産」のセグメント・クオリファイア値を割り当てることができます。

フレックスフィールド・クオリファイアには、「一意」または「グローバル」、「必須」または任意と設定できます。フレックスフィールド・クオリファイアは、エンド・ユーザーを1セグメントにのみ結び付ける場合は「一意」と設定します。すべてのセグメントに適用する場合は、フレックスフィールド・クオリファイアを「グローバル」と設定します。フレックスフィールドのセグメントにそれぞれセグメント・クオリファイアの標準セットを簡単な方法で割り当てるには、グローバル・フレックスフィールド・クオリファイアを使用します。エンド・ユーザーを少なくとも1セグメントに結び付ける場合、フレックスフィールド・クオリファイアを「必須」と設定します。

Oracle General Ledgerの会計フレックスフィールドでは、1つの勘定科目セグメントのみを必要とするため、「勘定科目」フレックスフィールド・クオリファイアは必須でかつ一意です。Oracle General Ledgerでは、フレックスフィールド・クオリファイアが「グローバル」と定義されているので、セグメント・クオリファイア「detailed posting allowed」および「detailed budgeting allowed」が各会計フレックスフィールド・セグメントに適用されます。詳細は、『Oracle General Ledgerユーザーズ・ガイド』および『Oracle Applicationsフレックスフィールド・ガイド』を参照してください。

導出列

フレックスフィールドがセグメント・クオリファイアの値を導出する組合せ表に追加する列です。セグメント・クオリファイアを定義するときに導出列の名前を指定します。

フォームへのフレックスフィールドの追加

適切な表列を作成してフレックスフィールドを登録した後に、フレックスフィールドをアプリケーション・フォームに組み込むことができます。

関連項目: フォームへのフレックスフィールドの追加

付加フレックスフィールドの実装

カスタマイズ可能な拡張領域をエンティティに設定するには、付加フレックスフィールドを追加します。たとえば、小売アプリケーションで顧客エンティティの記録を取る場合を考えます。通常、エンティティ表CUSTOMERSは、名前、住所、州、性別、顧客番号などの列で構成されます。顧客の服のサイズ、色の好みまたは担当の販売員を記録する追加の列は、これらの顧客エンティティ属性がエンド・ユーザーのアプリケーション使用方法により異なるため、表に含まれません。また、エンド・ユーザーが記録対象にする顧客属性が後で明らかになる場合もあります。このためには、付加フレックスフィールド列をエンティティ表(CUSTOMERS)に追加して、エンド・ユーザーが必要な拡張領域を使用できるようにします。付加フレックスフィールドは状況依存型にできるため、アプリケーションで保存する情報が「顧客」フォームに入力した値によって異なる場合にも有効に活用できます。

付加フレックスフィールドを実装するには、次の項目を実行する必要があります。

参照フィールドの計画

参照フィールドは、付加フレックスフィールドがコンテキスト・フィールド値を取得するフィールドです(オプションですが、設定することを推奨します)。参照フィールドは、体系定義フィールド(通常はATTRIBUTE_CATEGORY)と異なるフィールドにする必要があります。多くの場合、フォーム内の大部分の既存(非フレックスフィールド)フィールドも参照フィールドとして機能します。通常、参照フィールドとして適切なフィールドは、可能な値の完全に静的な短いリストが格納されるフィールドです。「付加フレックスフィールドの登録」フォームに付加フレックスフィールドを登録するときに、フィールドを参照フィールドとして指定します。エンド・ユーザーは、フレックスフィールドの設定時に参照フィールドの使用有無を選択できます。

たとえば、小売アプリケーションで顧客エンティティの記録を取る場合を考えます。通常、「顧客」フォームは、「名前」、「住所」、「州」、「性別」、「顧客番号」などのフィールドで構成されます。エンド・ユーザーは、「州」フィールドにユーザーが入力した値によって変わる状況依存型の付加フレックスフィールドを設定できます(たとえばコロラド州なら顧客のスキーウェアの好みについて記録し、フロリダ州なら暖かい気候向けの衣服の好みについて記録できます)。あるいは、「性別」フィールドにユーザーが入力した値によって変わる状況依存型の付加フレックスフィールドを設定できます(たとえば女性の顧客には女性の標準サイズに応じてサイズの選択を記録し、男性の顧客には男性の標準サイズに応じてサイズの選択を記録できます)。「付加フレックスフィールドの登録」フォームへの付加フレックスフィールド登録時に「州」フィールドと「性別」フィールドの両方を参照フィールドとして指定することによって、エンド・ユーザーはフレックスフィールドの設定方法のいずれかを選択できます。

ヒント: 付加フレックスフィールドでは、参照フィールドとしてフォーム・フィールドを1つのみ使用できます。1つのフォーム・フィールドに複数のフィールドの値を連結し、この連結フォーム・フィールドを参照フィールドとして使用することによって、複数フィールドに基づく付加フレックスフィールドにコンテキスト・フィールド値を導出します。

付加フレックスフィールドのデータベース列の定義

アプリケーションに柔軟性を持たせるには、すべてのエンティティ表に付加フレックスフィールド列を追加する必要があります。

Oracle Application Object Libraryでは、「_SRS_」という文字列を含む表名が標準要求発行機能用に予約されているので、この文字列を含む名前を付加フレックスフィールド表に付けないでください。

付加フレックスフィールド列をデータベース表に追加するには、次の項目を実行します。

フレックスフィールドに後から追加セグメント列を設定することはできないので、付加フレックスフィールド用に将来使用する分を含む十分なセグメントを最初に設定しておく必要があります。

ATTRIBUTEn列を表に定義するときに、単一体系内に設定可能な最大セグメント数を指定します。1つの表には、最大200のATTRIBUTEn列を定義できます。経験則として、1つの付加フレックスフィールド体系用に必要になると考えられる数の約2倍のセグメント列を作成する必要があります。

既存データのある表への付加フレックスフィールドの追加

これまでにフレックスフィールド列が定義されたことがなくデータが保存されている表に、フレックスフィールド列を追加できます。これを行うときには、アプリケーションの一貫性を損なわないように十分に注意してください。フレックスフィールドを追加するには、最初から付加フレックスフィールドを作成するときとまったく同じように、列およびフォーム・フィールドを追加し、付加フレックスフィールド・ルーチンを呼び出します。ただし、付加フレックスフィールド・セグメント・フォームによってフレックスフィールドを定義するには、値を必要とする値セットの使用有無を検討する必要があります。値を必要とする新規のセグメントがない場合は、エンド・ユーザーが既存レコードを問い合せたときに、空白の付加フレックスフィールドが表示されます。これについては、何も対処する必要がありません。

1つ以上のセグメントで値が必要になる場合は、データの一貫性を保つための追加手順を実行する必要があります。これを最も簡単な方法で行うには、セグメント体系をすべて定義し、新規の付加フレックスフィールドでフォームにナビゲートし、表内で各レコードを問い合せ、各レコード用の付加フレックスフィールドに値を入力します。変更はレコードごとに保存します。この方法は単調ですが、体系定義列(コンテキスト列)などのエンティティ表内の適切な列にすべての値を確実に入れることができます。

表が非常に大きい場合は、SQL*Plusによって表に値を直接追加できます。コンテキスト・フィールド値(体系定義列)とともにセグメント値を含むように表内の各行を更新することが必要であり、最初に体系のセグメント/列の対応を指定する必要があります。コンテキスト(体系)の値は、付加フレックスフィールド・セグメント・フォームのコンテキスト・フィールド値と正確に一致する必要があります。たとえば、コンテキスト・フィールド値に大文字と小文字が混在している場合、体系列には大文字と小文字を区別して入れる必要があります。無効なコンテキスト値を体系列に入れると、完全に状況依存型のフレックスフィールドはそのレコードに対してポップアップ表示されません。グローバル・セグメントを有効にしている場合は、フレックスフィールド・ウィンドウが開きます。上書き許可をYesに設定している場合、ウィンドウのコンテキスト・フィールドに不適切なコンテキスト・フィールド値が表示されます。

Oracle Application Object Library表のデータを変更するために、決してSQL*Plusを使用しないでください。

保護付加フレックスフィールド

場合によって、インストーラまたはユーザーが誤って変更することのない付加フレックスフィールドの作成が必要になることがあります。この種類のフレックスフィールドを保護付加フレックスフィールドと呼びます。保護付加フレックスフィールドは、通常の付加フレックスフィールドと同じ方法で作成します。主な違いは、セグメント体系の定義後に付加フレックスフィールド・フォームの「保護付き」チェック・ボックスをオンにすることです。付加フレックスフィールドに保護を付けると、付加フレックスフィールド・セグメント・フォームによって問い合せたり変更したりすることができなくなります。必ず付加フレックスフィールド・セグメントを定義してから、付加フレックスフィールド・フォームの「保護付き」チェック・ボックスをオンにしてください。

データベース表に付加フレックスフィールドがすでに存在する場合、ATTRIBUTEn以外の名前のセグメント列を定義する必要があります。保護付き付加フレックスフィールドなど特別な目的を持つフレックスフィールドであっても、自由に名前を付けることができます。付加フレックスフィールドを登録するときに、これらの列を付加フレックスフィールド・セグメント列として明示的に有効にします。2番目のフレックスフィールドには、体系定義列を作成する必要があります。フレックスフィールドでは体系列を共有できません。

データベース表にATTRIBUTEn以外の名前のセグメント列が含まれる場合、それらの列に対応する非表示のフィールドをかわりに作成します。

付加フレックスフィールド表の登録

付加フレックスフィールド列を表に登録した後は、表登録APIによってOracle Application Object Libraryに表を登録する必要があります。

関連項目: 表登録API

付加フレックスフィールドの登録

付加フレックスフィールドをOracle Application Object Libraryに登録する必要があります。付加フレックスフィールドは、「付加フレックスフィールドの登録」フォームによって登録します。付加フレックスフィールドの登録時には、付加フレックスフィールドが存在するアプリケーション表と体系定義列の名前を特定します。参照フィールドをフォームに作成してある場合は、フレックスフィールド登録時にその名前をコンテキスト・フィールドとして入力します。

フォームへのフレックスフィールドの追加

適切な表列を作成してフレックスフィールドを登録した後に、フレックスフィールドをアプリケーション・フォームに組み込むことができます。

関連項目: フォームへのフレックスフィールドの追加

フォームへのフレックスフィールドの追加

フレックスフィールドをOracle Formsウィンドウから呼び出す方法は、基本的に4つの手順で構成されます。これらの手順は、フレックスフィールドのOracle Application Object Libraryへの登録および定義が実行済で、フレックスフィールド表および列がすでに存在することが前提になります。これらの手順は、キーおよび付加フレックスフィールドの両方に適用されます。

フレックスフィールドをフォームに追加するには、次の手順を行います。

非表示フィールドの作成

通常、非表示フレックスフィールド・フィールドは、デフォルトのフォーム・ブロックをデータベース表(またはビュー)から作成する作業の一部として作成します。フレックスフィールド・フィールドのキャンバス・プロパティをNULLに設定します(これによりキャンバスに表示されません)。

非表示ID(キー・フレックスフィールド専用)、体系フィールド、セグメントまたは属性のフィールドは、NULLキャンバス上でテキスト項目にする必要があります。これらの項目は、表示項目でなくてテキスト項目にするため、TEXT_ITEMプロパティ・クラスを使用する必要があります。ほとんどのフィールドには問合せの長さを255に設定し、非表示IDフィールドには問合せの長さを2000に設定します。

重要: 決して、非表示フィールドに直接値を書き込むロジックを作成しないでください。フレックスフィールドではレコードの挿入、更新などの実行有無を記録しているため、フレックスフィールド(またはデータベースからの問合せ)以外の方法でこれらのフィールドに値を入れると、エラーおよびデータ破壊を引き起こす可能性があります。

キー・フレックスフィールド用の外部キーの中には、組合せ表内のセグメント列(SEGMENT1からSEGMENTn)を表す非データベース・フィールドを追加することが必要になるものがあります。SEGMENT1からSEGMENTnフィールドは、NULLキャンバスに設定します(フィールド長はSEGMENTn列と同じ長さ)。これらのフィールドによって、Oracle Application Object Libraryでは、外部キー参照を持つフォームから新規のコード組合せを作成します(動的挿入を使用)。

通常、Oracle Application Object Libraryでは、外部キー参照を持つフォームから連結セグメント値フィールドのみを使用して新規のコード組合せ(動的挿入)を作成できます。ただし、連結済のフレックスフィールドの長さ(定義されたセグメントの値セットの最大サイズ合計とセグメント・セパレータ)を2000よりも大きい値に設定する場合、これらの非データベース・フィールドを作成して、新規組合せをフォームから動的に作成することをサポートする必要があります。

これらのフィールドを定義せず、エンド・ユーザーが長いフレックスフィールド(>2000文字)を指定している場合、エンド・ユーザーが新規の組合せを作成するときにキー・フレックスフィールド・データの切捨てが発生します。

キー・フレックスフィールドの「動的挿入可能」が「No」と登録されている場合、これらのフィールドを追加する必要はありませんが、追加することをお薦めします。これらのフィールドを作成しないときにエンド・ユーザーが長いフレックスフィールドを定義すると、問合せ後のフレックスフィールド・ポップアップ・ウィンドウへの入力時に空白のフレックスフィールド・セグメントが表示されます。空白のセグメントは、基礎となるデータに悪影響を及ぼすことはありません。また、エンド・ユーザーが問合せ後にこれらのセグメントを更新してもフレックスフィールドの変更に悪影響を及ぼすこともありません。

これらのフィールドを使用し、さらにフォームのブロック内の同一行に複数のキー・フレックスフィールドを設定している場合は、フレックスフィールドごとに1つの非データベース・セグメント・フィールドの追加セットを作成する必要があります。つまり、ブロック内に3つの外部キー参照フレックスフィールドがある場合、セグメント・フィールドが4セット必要です(たとえば、SEGMENT1からSEGMENTnが主要セットであり、SEGMENT1_AからSEGMENTn_A、SEGMENT1_BからSEGMENTn_B、SEGMENT1_CからSEGMENTn_Cが追加セットです)。また、フレックスフィールド定義ルーチン・コールにUSEDBFLDS="Y"引数を使用する必要があります。この場合、フレックスフィールド・ルーチン・コールの前に、適切な値とこれらのフィールドとの間で明示的にコピーするためのトリガー・ロジックを記述する必要があります。適切な追加セットから主要セットに値をコピーする場合は、WHEN-NEW-ITEM-INSTANCE、PRE-INSERTおよびPRE-UPDATEフレックスフィールド・イベント・コールの前に実行する必要があります。主要セットから適切な追加セットに値をコピーする場合は、POST-QUERY、WHEN-NEW-ITEM-INSTANCE、WHEN-VALIDATE-ITEM、PRE-INSERTまたはPRE-UPDATEコールより後に実行する必要があります。

付加フレックスフィールドの場合、付加フレックスフィールド列を含む表がフォームの実表にならない(またはベース・ビューに含まれる)ようなフォームを作成することが可能です(ただし、これはお薦めしません)。このためには、すべての非表示フィールド(ATTRIBUTEnフィールドおよび体系定義フィールド)をNULLキャンバス上の非データベース・フィールドとして作成します。次に、2つの表内のデータを同期化するコード・トリガーと表ハンドラ・ロジックを作成します。たとえば、フォームが実表を更新するとき、ON_UPDATE表ハンドラが付加フレックスフィールド表のATTRIBUTEnと体系定義列を更新する必要があります。同様に、フォームで新規レコードを挿入する場合は、付加フレックスフィールド表に挿入するON_INSERT表ハンドラにロジックが必要です。付加フレックスフィールドでは、直接表(実表またはその他)に書き込むことはなく、必ず非表示セグメント・フィールドに書き込みます。

表示フィールドの作成

2000文字表示される、キーまたは付加フレックスフィールド用の非データベース・テキスト項目として、連結セグメント・フィールドを作成します。範囲フレックスフィールドの場合、2つの非データベース・フィールドを作成し、同じ名前を付けて接尾辞を_LOWと_HIGHにします。

キーおよび範囲フレックスフィールドに対して、TEXT_ITEMプロパティ・クラスを使用します。付加フレックスフィールドの場合、プロパティ・クラスTEXT_ITEM_DESC_FLEXを使用し、フィールド名をDESC_FLEXにします。

ダミーLOV(値リスト)をTEMPLATEフォーム、ENABLE_LIST_LAMPから表示済のキーまたは付加フレックスフィールド・フィールドに連結します。「リストで妥当性チェック」プロパティが「No」に設定されていることを確認します。これにより、「リスト」ランプがフレックスフィールドのために正しく機能するようになります。

LOVの動作に問題が発生する場合(唯一の有効な選択としてLOVにNULLが表示される)や、フレックスフィールドの更新不可または不正値を示すメッセージが表示される場合は、「リストで妥当性チェック」が「No」に設定されていることを確認してください。

フレックスフィールド定義の作成

フレックスフィールド定義プロシージャをWHEN-NEW-FORM-INSTANCEトリガーから呼び出して、フレックスフィールドを設定します。このプロシージャによって、フレックスフィールドと関連フィールド用のブロックおよびフィールド、必要なフレックスフィールド、その他の引数を指定します。関連項目: フレックスフィールド定義プロシージャ

フレックスフィールド定義は、フォーム内の条件によって有効化、無効化または変更する必要があります。たとえば、ある条件ではフレックスフィールドを更新可能にして、他の条件では更新不可にします。またこの場合、適切なDEFINEプロシージャを呼び出した後にUPDATE_DEFINITIONプロシージャを呼び出す必要があります。関連項目: フレックスフィールド定義の更新

複数イベント・トリガーからのフレックスフィールド定義の呼出し

複数のフォーム・レベル・トリガーに特別なプロシージャ用のハンドラを記述します。これらのプロシージャは、WHEN-NEW-ITEM-INSTANCE、WHEN-VALIDATE-ITEMおよびPRE-INSERTなどの特定イベントでフレックスフィールドを起動します。

フレックスフィールドは、FND_FLEX.EVENT(EVENT)プロシージャによってフォーム・レベル・トリガーから呼び出します。このプロシージャを使用して、ユーザーのプロシージャ内部からフレックスフィールドを呼び出すこともできます。このプロシージャはイベント名を引数とします。FND_FLEX.EVENTを呼び出し、次の表に記載されるトリガーからトリガー名を受渡します。

トリガー プロシージャ
PRE-QUERY FND_FLEX.EVENT('PRE-QUERY');
POST-QUERY FND_FLEX.EVENT('POST-QUERY');
PRE-INSERT FND_FLEX.EVENT('PRE-INSERT');
PRE-UPDATE FND_FLEX.EVENT('PRE-UPDATE');
WHEN-VALIDATE- RECORD FND_FLEX.EVENT('WHEN-VALIDATE- RECORD');
WHEN-NEW-ITEM- INSTANCE FND_FLEX.EVENT('WHEN-NEW-ITEM-INSTANCE');
WHEN-VALIDATE- ITEM FND_FLEX.EVENT('WHEN-VALIDATE-ITEM');

これらのコールは通常、フォーム・レベル・トリガーとしてフォームに記述されます。これらのトリガーのいずれかをブロックまたはフィールド・レベルで定義するには、フォームレベル・フレックスフィールド・コールを実行するためにブロックまたはフィールド・レベル・トリガーの実行スタイルを必ず「前」に設定することが必要です。あるいは、これらのプロシージャ・コールをトリガーにも同様に追加する必要があります。

利便性と一貫性を持たせるために、すべてのフレックスフィールド・トリガーをフォーム・レベルで記述することをお薦めしますが、トリガーをフォーム・レベルにすることによって、大規模または複雑なフォームでパフォーマンスの問題が発生する場合があります。その場合は、フレックスフィールド(キーまたは付加)を持つすべてのブロックに対して、PRE-QUERY、POST-QUERY、PRE-INSERT、PRE-UPDATEおよびWHEN-VALIDATE-RECORDトリガーをブロック・レベルで記述します。次に、フレックスフィールドが定義された項目に対して、WHEN-NEW-ITEM-INSTANCEおよびWHEN-VALIDATE-ITEMを項目レベルで記述します。

フォーム内に多くのフレックスフィールドがあったとしても、これらのトリガーの1つのセットのみを記述することが必要です(これらのトリガーがフォーム・レベルであることが前提です)。

TEMPLATEフォーム、KEY-EDIT、KEY-LISTVALおよびPOST-FORM内の3つのフォームレベル・トリガーには、APP_STANDARD.EVENT('trigger_name')ルーチンによってAPPCOREライブラリの一部として実行される適切なFND_FLEX.EVENTコールがあらかじめ定義されています。これらのAPP_STANDARD.EVENTコールがブロックまたは項目レベルのトリガーによってオーバーライドされないよう確認する必要があります。

重要: レコードの問合せステータスをリセットする、ブロックまたは項目レベルPOST-QUERYトリガーがある場合、そのブロックまたは項目レベルPOST-QUERYトリガーの実行スタイルを「後」と設定する必要があります。POST-QUERYロジックによってフレックスフィールド用フィールド値が更新されるので、そのロジックを実行した後にレコードをリセットすることが必要です。

フレックスフィールド・ウィンドウの自動オープン

デフォルトで、プロファイル・オプション「フレックスフィールド: 付加ウィンドウをオープン」を「No」に設定しなければ、特別なコードを記述することなく、付加フレックスフィールドが自動的に開きます。

通常、キー・フレックスフィールドは自動で開くことはありません。ただし、ユーザーがプロファイル・オプション「フレックスフィールド: キー・ウィンドウをオープン」を「Yes」に設定することによって、すべてのキー・フレックスフィールドを自動で開くことができます。ウィンドウを自動で開くためのコードは、ウィンドウを2回開くことになるので、フォームに記述しないでください。

キー・フレックスフィールドを自動的に開く既存のコードは、削除する必要があります。そのようなコードは、多くの場合、フォーム・レベルではなくて、フレックスフィールドを含むフィールド上のフィールド・レベルのWHEN-NEW-ITEM-INSTANCEトリガーにあります。フレックスフィールドを自動的に開く「FND_FLEX.EVENT('KEY-EDIT');」コールを削除してください。

フレックスフィールド定義プロシージャ

フレックスフィールドのパッケージおよびプロシージャは、FNDSQFライブラリに含まれています。項目ハンドラをWHEN-NEW-FORM-INSTANCEトリガーから呼び出し、キー、範囲または付加フレックスフィールドを定義します。

これらのプロシージャを呼び出すときには、次の3種類の引数を指定します。

複数のフレックスフィールドがある場合、同一のWHEN-NEW-FORM-INSTANCEトリガーのハンドラから、各フレックスフィールド用の完全なフレックスフィールド定義プロシージャを呼び出します。

キー・フレックスフィールド定義構文

外部キーまたは組合せフォーム上のキー・フレックスフィールドには、FND_KEY_FLEX.DEFINEを使用します。

重要: 本書に記載する組合せフォーム構文を使用すると、SQL*Forms 2.3から使用した既存の非Oracle Applicationsの組合せフォームをOracle Forms 4.5に変換できます。ただし、キー・フレックスフィールド用APIはOracle Applicationsの将来リリースで変更される可能性があるため、Oracle Applicationsによって提供されるキー・フレックスフィールド以外のキー・フレックスフィールドを新規に作成しないことをお薦めします。

 FND_KEY_FLEX.DEFINE(

  /* Arguments that specify flexfield location */

     BLOCK=>'block_name',  FIELD=>'concatenated_segments_field_name',

 [DESCRIPTION=>'description_field_name',]

     [ID=>'Unique_ID_field',]

     [DATA_FIELD=>'concatenated_hidden_IDs_field',]

 /* Arguments that specify the flexfield */

   APPL_SHORT_NAME=>'application_short_name',

     CODE=>'key_flexfield_code',

     NUM=>'structure_number',

 /* Other optional parameters */

    [VALIDATE=>'{FOR_INSERT|FULL|PARTIAL|NONE|

              PARTIAL_IF_POSSIBLE}',]

    [VDATE=>'date',]

    [DISPLAYABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [INSERTABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [UPDATEABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [VRULE=>'flexfield qualifier\\n

           segment qualifier\\n

           {I[nclude]|E[xclude]}\\n

           APPL=application_short_name;

           NAME=Message Dictionary message name\\n

           validation value1\\n

           validation value2...

           [\\0flexfield qualifier\\n

           segment qualifier\\n

           {I[nclude]|E[xclude]}\\n

           APPL=application_short_name;

           NAME=Message Dictionary message name\\n

           validation value1\\n

           validation value2...]',]

    [COPY=>'block.field\\n{ALL | flexfield

           qualifier | segment_number}

           [\\0block.field\\n{ALL | flexfield

           qualifier | segment_number}]',]

    [DERIVED=>'block.field\\nSegment qualifier',]

    [DERIVE_ALWAYS=>'{Y|N}',]

    [DINSERT=>'{Y|N}',]

    [VALATT=>'block.field\\n

           flexfield qualifier\\n

           segment qualifier',]

    [TITLE =>'Title',]

    [REQUIRED=>'{Y|N}',]

    [AUTOPICK=>'{Y|N}',]

    [USEDBFLDS=>'{Y|N}',]

    [ALLOWNULLS=>'{Y|N}',]

    [DATA_SET=>'set number',]

    [COLUMN=>'{column1(n) | column1 alias(n) [, column2(n), ...] [INTO block.field]}',]

    [WHERE_CLAUSE=>'where clause',]

    [COMBQP_WHERE=>'{where clause|NONE}',]

    [WHERE_CLAUSE_MSG=>'APPL=application_short_

           name;NAME=message_name',]

    [QUERY_SECURITY=>'{Y|N|}',]

    [QBE_IN=>'{Y|N}',]

    [READ_ONLY=>'{Y|N}',]

    [LONGLIST=>'{Y|N}',]

    [NO_COMBMSG=>'APPL=application_short_

           name;NAME=message_name',]

    [AUTOCOMBPICK=>'{Y|N}',]

    [LOCK_FLAG=>'{Y|N}',]

    [HELP=>'APPL=application_short_name;

            TARGET=target_name']

   );

ブロック・フィールド参照でVALATT、COPYまたはDERIVED引数にコロン(:)を使用しないでください。これらのルーチンの引数は、Oracle Application Object Libraryカバー・ルーチンに渡されるので、直接PL/SQLに解析されることはありません。

範囲(タイプ)フレックスフィールド定義構文

範囲フレックスフィールドには、FND_RANGE_FLEX.DEFINEを使用します。関連キー・フレックスフィールドの各セグメントに対応する追加フィールドを含むタイプ・フレックスフィールド(範囲フレックスフィールド・セグメントを含む場合もある)にも、同じプロシージャを使用します。たとえば、会計フレックスフィールド用のタイプ・フレックスフィールドが各会計フレックスフィールド・セグメントにフィールド1つずつを含むことがありますが、これらのフィールドには、通常のセグメント値ではなく「Yes」または「No」の値のみを入力します。機能パラメータの割当フォームでは、セグメント使用フィールドにタイプ・フレックスフィールドを使用します(値を使用するセグメントに対して「Yes」を入力します)。複数のタイプ列(実際のセグメント・フィールドに対応するフレックスフィールド・ポップアップ・ウィンドウ内のフィールドの列)で構成されるタイプ・フレックスフィールドを作成することもできます。これを行う場合、値を分割するために\\0を使用し、TYPE_引数値を複数回指定できます。

重要: FIELD、DESCRIPTION、DATA_FIELDまたはその他の値には、このプロシージャによって自動的に「_LOW」または「_HIGH」が追加されるので、「_LOW」または「_HIGH」を追加しないでください。複数のタイプ列を使用する場合は、すべてのTYPE_引数で同じ順序でタイプ列を指定していることを確認して、引数値を不正なタイプ列に適用しないようにしてください。

 FND_RANGE_FLEX.DEFINE(

  /* Arguments that specify flexfield location */

     BLOCK=>'block_name',  FIELD=>'concatenated_segments_field_name',

 [DESCRIPTION=>'description_field_name',]

     [DATA_FIELD=>'concatenated_hidden_IDs_field',]

 /* Arguments that specify the flexfield */

   APPL_SHORT_NAME=>'application_short_name',

     CODE=>'key_flexfield_code',

     NUM=>'structure_number',

 /* Other optional parameters */

    [VALIDATE=>'{PARTIAL|NONE}',]

    [VDATE=>'date',]

    [DISPLAYABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [INSERTABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [UPDATEABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [VRULE=>'flexfield qualifier\\n

           segment qualifier\\n

           {I[nclude]|E[xclude]}\\n

           APPL=application_short_name;

           NAME=Message Dictionary message name\\n

           validation value1\\n

           validation value2...

           [\\0flexfield qualifier\\n

           segment qualifier\\n

           {I[nclude]|E[xclude]}\\n

           APPL=application_short_name;

           NAME=Message Dictionary message name\\n

           validation value1\\n

           validation value2...]',]

    [TITLE =>'Title',]

    [REQUIRED=>'{Y|N}',]

    [AUTOPICK=>'{Y|N}',]

    [USEDBFLDS=>'{Y|N}',]

    [ALLOWNULLS=>'{Y|N}',]

    [DATA_SET=>'set number',]

    [READ_ONLY=>'{Y|N}',]

 /* Parameters specific to type flexfields */

    [TYPE_FIELD=>'block.concatenated_type_values_

           field\\ntype field suffix',]

    [TYPE_VALIDATION=> 'Value set name\\n

           Required\\nDefault value',]

    [TYPE_SIZES=>'type_value_display_

           size\\nDescription_display_size',]

    [TYPE_HEADING=>'type column heading',]

    [TYPE_DATA_FIELD=>'block.type_data_field',]

    [TYPE_DESCRIPTION=>'block.type_

           description_field',]

    [SCOLUMN=>'single column title',]

    [HELP=>'APPL=application_short_name;

            TARGET=target_name']

);

重要: TYPE_FIELD、TYPE_DATA_FIELDおよびTYPE_DESCRIPTIONでは、block.fieldnameの構成が必要です。ブロック名なしのフィールド名を指定するその他のフレックスフィールド引数では必要ありません。

付加フレックスフィールド定義構文

付加フレックスフィールドには、FND_DESCR_FLEX.DEFINEを使用します。

 FND_DESCR_FLEX.DEFINE(

  /* Arguments that specify the flexfield location */

    BLOCK=>'block_name',  FIELD=>'field_name',

    [DESCRIPTION=>'description_field_name',]

    [DATA_FIELD=>'concatenated_hidden_IDs_field',]

  /* Arguments that specify the flexfield */

 APPL_SHORT_NAME=>'application_short_name',

    DESC_FLEX_NAME=>'descriptive flexfield_name'

 /* Other optional parameters  */

    [VDATE=>'date',]

    [TITLE =>'Title',]

    [AUTOPICK=>'{Y|N}',]

    [USEDBFLDS=>'{Y|N}',]

    [READ_ONLY=>'{Y|N}',]

    [LOCK_FLAG=>'{Y|N}',]

    [HELP=>'APPL=application_short_name;

            TARGET=target_name',]

    [CONTEXT_LIKE=>'WHERE_clause_fragment'}

     );

フレックスフィールド定義の引数

次の引数は、特に記述のないかぎり、すべての種類のフレックスフィールドに適用されます。引数を複数回指定する場合は、記載されているように\\0によって複数の引数値を区切ります。

フレックスフィールドの位置を指定する引数

変数 説明
BLOCK フレックスフィールドが含まれるブロックの名前。値フィールド、IDフィールド(ある場合)および説明フィールド(ある場合)は、すべて同一ブロックに設定する必要があります。
FIELD フレックスフィールドを設定するフィールドの名前。これは、連結セグメント値とデリミタを含む、非データベースの表示フォーム・フィールドです。
DESCRIPTION フレックスフィールドの説明フィールド。これは、セグメント値の連結済の説明を含む、非データベースで入力不可の表示フィールドです。DESCRIPTIONパラメータを指定しないと、フォームに連結セグメントの説明が表示されません。
ID キー・フレックスフィールド専用。ある場合は、キー・フレックスフィールドの一意ID(CCID)を含むフィールドを指定します。
DATA_FIELD 連結非表示IDフィールドは、連結セグメントの非表示IDを含む非表示フォーム・フィールドです。

使用するフレックスフィールドを指定する引数

変数 説明
APPL_SHORT_ NAME フレックスフィールドを登録したアプリケーションの短縮名。
CODE キーまたは範囲フレックスフィールド専用。フレックスフィールドを識別する短いコード。キー・フレックスフィールド・フォームに指定されたフレックスフィールド・コードです。このコードは、Oracle Applicationsの会計フレックスフィールドのGL#など、登録済コードと必ず一致する必要があります。
NUM キーまたは範囲フレックスフィールド専用。キー・フレックスフィールド体系を識別する体系番号(または体系番号を含む:block.field参照)。
フレックスフィールド体系の識別番号を格納する非表示データベース:block.fieldを指定できます。また、:$PROFILES$.your_profile_option_nameを指定して、ユーザー・プロファイル・オプションに設定する値を取得することもできます。フィールド参照を提供するかわりに、101などの体系番号をこのパラメータにハードコードできますが、ハードコードされた番号が原因でフレックスフィールドに複数の体系を使用できなくなります。このオプションは、複数の体系を使用する場合に指定する必要があります。
次のSQL文によって、フレックスフィールドの体系識別番号を取得します。
SELECT ID_FLEX_NUM, ID_FLEX_STRUCTURE_NAME

                        FROM FND_ID_FLEX_STRUCTURES

                        WHERE ID_FLEX_CODE = 'flexfield code';


ここで、flexfield codeは、フレックスフィールドの登録時に指定するコードです。
NUMのデフォルト値は101です。
DESC_FLEX_ NAME 付加フレックスフィールド専用。付加フレックスフィールドを識別する登録済の名前。

その他のオプション引数

特定のオプション引数を指定しないと、フレックスフィールド・ルーチンではその引数の通常のデフォルト値が使用されます。

変数 説明
VALIDATE キーまたは範囲フレックスフィールド専用。キー・フレックスフィールドでは、通常、組合せフォームにFOR_INSERTを使用し、外部キー・フォームにFULLを使用します。範囲フレックスフィールドでは、通常、セグメントへの値入力をユーザーに許可するにはNONEを使用し、実際には有効な組合せを必要としない個々の有効なセグメント値をユーザーが必ず入力できるようにするにはPARTIALを使用します。
すべてのセグメント値を検証して、新規のコード組合せを生成し、必要な場合はそれを動的に組合せ表に挿入するには、外部キー・フォームの検証タイプにFULLを使用します。FULLを指定すると、フレックスフィールドでエンド・ユーザーの入力値がコード組合せ表内にある既存のコード組合せとチェックされます。組合せが存在する場合、フレックスフィールドによってコード組合せIDが取得されます。組合せがない場合、フレックスフィールドによってコード組合せIDが作成され、その組合せが組合せ表に挿入されます。開発者(またはインストーラ)が「動的挿入可能 」を「No」に設定してフレックスフィールド体系を定義すると、存在しない組合せをエンド・ユーザーが入力したときに、フレックスフィールドからエラー・メッセージが出力されます。この場合、フレックスフィールドによって新規のコード組合せは作成されません。FULLは、外部キー参照を持つフォーム用の通常の引数です。
フォームで個々のセグメント値の検証を実行しても、有効な新規組合せの作成または既存の組合せに対する組合せ表のチェックを実行しない場合は、PARTIALを使用します。PARTIALは、フレックスフィールド・セグメント値を必要とするが実際のコード組合せを必要としないアプリケーション・ロジックを作成する場合に使用します。たとえば、Oracle Applications短縮別名フォームでは、ユーザーが各セグメントに有効な値を入力する必要はありますが、実際のコード組合せが組合せ表に存在する必要はなく、チェックもされません。短縮別名フォームでは組合せ表も作成されません。PARTIAL_IF_POSSIBLEは、PARTIALの特別な例です。PARTIALでは、フレックスフィールドに非依存セグメントとともに依存セグメントがある場合、非依存の関連セグメントにユーザーが値を入力していないと、依存セグメントの値リストは表示されません。一方PARTIAL_IF_POSSIBLEでは、依存セグメント上に値リストが提供されます。この値リストには、非依存の関連セグメントの値すべてに対する全依存値が含められます(このため、000がデフォルトの依存値であれば複数の値000が表示されます)。
検証をまったく行わない場合は、NONEを使用します。
キー・フレックスフィールドのデフォルト値はFULLです。範囲フレックスフィールドのデフォルト値はNONEです。
VDATE dateは、個々のセグメント値の開始日および終了日をチェックする検証日です。セグメント値フォームを使用して、定義対象の各セグメント値に開始日および終了日を入力します。
たとえば、すでに受け渡された日付(会計期間の終了日など)と値を照合するには、その日付をフィールド参照を使用してVDATEとして指定し(VDATE=>':block.field')、セグメント値をその日付と比較します。
デフォルト値は現在の日付(SYSDATE)です。
DINSERT キー・フレックスフィールド専用。このフォームに対して動的挿入をオフまたはオンにするために、DINSERTを使用します。
デフォルト値はY(フォームで動的挿入が可能)です。
DISPLAYABLE キーまたは範囲フレックスフィールド専用。DISPLAYABLEパラメータを使用すると、指定のフレックスフィールド・クオリファイアまたは指定のセグメント番号を表すセグメントを表示できます。セグメント番号は、キー・フレックスフィールド・セグメント・フォームに指定されたセグメント番号ではなくて、フレックスフィールド・ウィンドウにセグメントが表示される順番です。たとえば、セグメント番号1のみを表示するように指定すると、フレックスフィールドにはポップアップ・ウィンドウ(NUMに指定する体系用)に通常表示される最初のセグメントのみが表示されます。
DISPLAYABLEのデフォルト値はALLであり、フレックスフィールドにすべてのセグメントが表示されます。あるいは、フレックスフィールド・クオリファイア名またはセグメント番号を指定することもできます。
DISPLAYABLEは、複数の値を\\0デリミタで区切って指定することによって、トグル・スイッチとして使用できます。たとえば、最初のセグメントを除くすべてをフレックスフィールドに表示する場合、次のように指定します。
DISPLAYABLE=>'ALL\\01'


\\0によってALLと1が区切られている点に注意してください。
セグメントをすべて表示するのではなく、デフォルト値を使用して非表示セグメントに入力するには、フォームに非表示のSEGMENT1からSEGMENTnフィールドを設定することも必要です。フレックスフィールドでは、すべての表示フィールドの値を連結値のフィールドに書き込みますが、非表示のデフォルト・フィールドの値は書き込まないので、これらの非表示フィールドが必要になります。フレックスフィールドでは通常、連結値のフィールドの値を使用してデータベースに更新および挿入を実行するため、非表示フィールドのデフォルト値はコミットされません。ただし、追加の非表示フィールドを設定すると(組合せフォームと同様に)、フレックスフィールドで追加のフィールドとともに連結セグメント値フィールドにフレックスフィールド値を書き込みます。非表示の値は、非表示フィールドにのみ書き込まれますが、データベースへの更新および挿入に使用されます。
UPDATEABLE/INSERTABLE キーまたは範囲フレックスフィールド専用。UPDATEABLE/INSERTABLEパラメータでは、指定した一意のフレックスフィールド・クオリファイアまたはセグメント番号に相当するセグメントをユーザーが更新または挿入できるかどうかを決定します。セグメント番号は、キー・フレックスフィールド・セグメント・フォームに指定されたセグメント番号ではなくて、フレックスフィールド・ウィンドウにセグメントが表示される順番です。
それぞれのデフォルト値はALLであり、ユーザーはすべてのセグメントの更新および挿入を実行できます。あるいは、フレックスフィールド・クオリファイア名またはセグメント番号を指定することもできます。UPDATEABLE=>''またはINSERTABLE=>''(2つの一重引用符)を入力すると、ユーザーがあらゆるセグメントの値を更新不可または挿入不可にできます。
これらのパラメータは、複数の値を\\0デリミタで区切って指定することによって、トグル・スイッチとして使用できます。たとえば、最初のセグメントを除くすべてをエンド・ユーザーが更新できるようにする場合、次のように指定します。
UPDATEABLE=>'ALL\\01'


\\0によってALLと1が区切られている点に注意してください。
INSERTABLE=>''を使用してあらゆるセグメントの値をエンド・ユーザーが挿入できないようにするには、そのフォームの「短縮フレックスフィールド入力」を使用不可にします。
TITLE ポップアップ・ウィンドウの上部に表示するウィンドウ・タイトルを指定します。キー・フレックスフィールドのデフォルト値は、キー・フレックスフィールド・セグメント・フォームによってこのフィールドを設定したときに指定した体系名です。付加フレックスフィールドの場合、デフォルト値は、付加フレックスフィールド・セグメント・フォームによってこのフィールドを設定したときに指定したフレックスフィールド・タイトルになります。
REQUIRED キーまたは範囲フレックスフィールド専用。エンド・ユーザーがセグメント値を入力せずにフレックスフィールド・ウィンドウを終了できるかどうかを指定します。
デフォルト値はYです。
Yを指定すると、フレックスフィールドで、エンド・ユーザーが必須セグメント(値セットの「値必須」が「Yes」に設定されているセグメント)に有効な値を入力しないでおくことができなくなります。また、エンド・ユーザーがフレックスフィールド・ポップアップ・ウィンドウに入力せずに行を保存しようとすると、フレックスフィールドによって、必須セグメントに入力するためにデフォルト値が使用され、すべての必須セグメントに入力できなかった場合はエラー・メッセージが発行されます。
REQUIREDにYを指定してVALIDATEにFULLを指定すると、エンド・ユーザーが関連フレックスフィールドなしで行の問合せを実行したときに(外部キー・フレックスフィールドID列にNULLを含む)、必須フレックスフィールドにNULL IDが返されたことをエンド・ユーザーに警告するエラー・メッセージがフレックスフィールドによって発行されます。
Nを指定すると、フレックスフィールドでエンド・ユーザーがフレックスフィールド・ポップアップ・ウィンドウに入力せずに行を保存できるようになります。Nを指定すると、エンド・ユーザーが値を入力または変更することなくフレックスフィールド・ウィンドウで直接停止せずにナビゲートできるようになります。ただし、エンド・ユーザーがフレックスフィールド内のいずれかのセグメント値を入力または変更すると、すべての必須セグメントに有効な値を入力するまでフレックスフィールド・ウィンドウを閉じることができません。Nを指定してエンド・ユーザーがウィンドウ内に値を開いたり入力したりしない場合は、エンド・ユーザーはフレックスフィールド内の必須セグメントの有無にかかわらず、行を保存できます。この場合、フレックスフィールドに必須セグメントのセグメント値としてデフォルト値が保存されず、エラー・メッセージも発行されません。
REQUIREDにNを指定してVALIDATEにFULLを指定すると、エンド・ユーザーが関連フレックスフィールドなしで行の問合せを実行したときに(外部キー・フレックスフィールドID列にNULLを含む)、フレックスフィールドでは問合せから返された個別のセグメント値が検証されます。エラー・メッセージを出力せずに必須でないフレックスフィールドを問い合せるには、Nを指定します。
REQUIREDにNを設定している場合でも、このフレックスフィールドでセグメント値の入力を開始したユーザーは、フレックスフィールドを完全に入力するか、フレックスフィールドを中止する必要があります。
AUTOPICK エンド・ユーザーが無効なセグメント値を入力したときに値リスト・ウィンドウを表示するかどうかを決定します。デフォルト値はYです。
COPY
キー・フレックスフィールド専用。フレックスフィールド・ウィンドウがポップアップする前に、指定のフレックスフィールド・クオリファイアまたはセグメント番号に相当するセグメントにblock.fieldから非NULL値をコピーします。ALLを指定すると、COPYによって、block.field内にある非NULLの連結セグメント値のセット(およびセグメント・セパレータ)がすべてのセグメントにコピーされます。たとえば、3セグメントのフレックスフィールドがあり、block.fieldに001.ABC.05が入っている場合、COPYによって、001が最初のセグメントにコピーされ、ABCが2番目のセグメントにコピーされ、05が3番目のセグメントにコピーされます。
セグメントにCOPYする値は、そのセグメントにとって有効な値であることが必要です。COPYする値は、キー・フレックスフィールド・フォームによりセグメントに設定したデフォルト値を上書きします。一方、短縮フレックスフィールド・エントリの値は、COPYの値を上書きします。COPYは、既存(デフォルト)値にNULL値をコピーすることはありません。ただし、コピーする値がそのセグメントにとって無効な値である場合は、デフォルト値がNULL値で上書きされたように見えます。つまり、無効な値がデフォルト値を上書きした後、コピーされたその値が無効なため、フレックスフィールドによって消去されます。コピー元のフィールドには有効な値があることを確認する必要があります。
フレックスフィールド・ウィンドウを閉じると、フレックスフィールドによって、指定のフレックスフィールド・クオリファイアまたはセグメント番号に相当するセグメント内の値がblock.fieldに自動的にコピーされます。ALLを指定すると、フレックスフィールドによって、セグメントすべての連結値がblock.fieldに自動的にコピーされます。
\\0デリミタで区切ることによって、1つ以上のCOPYパラメータ値を指定できます。後ろにあるCOPY値は、前にあるCOPY値を上書きします。たとえば、連結フレックスフィールド値を格納するConcatenated_fieldという名前のフィールドがあり、そこに文字列01-ABC-680が格納されているとします。また、2番目のセグメントにコピーする単一の値が格納されるValue_fieldというフィールドがあり、そこにはXYZという値が指定されています。この場合、次のように指定します。
COPY=>'block.Concatenated_field\\nALL\\0

      block.Value_field\\n2'

\\0が異なるパラメータの値を区分けする点に注意してください。
エンド・ユーザーがフレックスフィールド・ウィンドウを開くと、Oracle Application Object Libraryによって2つのCOPYパラメータが順番に実行され、ウィンドウ内に次のように値が表示されます。
01

XYZ

680


フレックスフィールド・ウィンドウが閉じると、フレックスフィールドによって、値が2つのフィールドにそれぞれ01-XYZ-680、XYZと戻されます。この例では、XYZがABCを上書きしていることに注目してください。
DERIVED キー・フレックスフィールド専用。DERIVEDを使用して、エンド・ユーザーが入力する組合せに対してセグメント・クオリファイアの導出値を取得します。フレックスフィールドで導出値をロードするブロックおよびフィールドを指定するには、block.fieldを使用します。必要なセグメント・クオリファイア名を指定するには、「セグメント・クオリファイア」を使用します。注意: \\nの前後に空白を入れないでください。また、\\nは小文字にする必要があります。
フレックスフィールドでは、次の規則を使用して、クオリファイアの導出値を個々のセグメント・クオリファイアの値から取得します。セグメント・クオリファイアが一意である場合、導出値はセグメント・クオリファイアの値になります。セグメント・クオリファイアが一意でない場合、いずれかのセグメントでqualifier value = Nであるときに導出値がNになり、それ以外のときにYになります。この規則の唯一の例外は、内部SUMMARY_FLAGセグメント・クオリファイアです。この例外では、いずれかのセグメント値が親である場合にSUMMARY_FLAGの導出値はYになります。フレックスフィールドでは、クオリファイアを定義するときに指定した導出値を組合せ表のクオリファイア列にロードします。
\\0(ゼロ)で区切られたDERIVEDパラメータのグループを1つ以上指定できます。
DERIVE_ ALWAYS キー・フレックスフィールド専用。DERIVEDパラメータとともに使用します。Yを指定すると、ユーザーが値を変更することなくフレックスフィールドでナビゲートする場合であっても、導出値が算出されます(セグメント内にすでにある同じ値を選択することによって、フレックスフィールドが変更済と見なされます)。
デフォルト値はNであり、フレックスフィールドが変更されたときにのみ導出値が算出されます。
VRULE キーまたは範囲フレックスフィールド専用。VRULEを使用して、エンド・ユーザーがセグメント・クオリファイアの値に基づいてフレックスフィールド・セグメントに入力できる値に追加の制限を設定します(個々のセグメントに追加されます)。フレックスフィールド・クオリファイアおよびセグメント・クオリファイアの名前、検証値を含むか含まないか、エンド・ユーザーが不適切な値を入力したときにフレックスフィールドで表示するメッセージのメッセージ・ディクショナリ・アプリケーション短縮名およびメッセージ名を指定できます。デリミタ\\nは小文字にする必要があり、アプリケーション名はセミコロンによってメッセージ名と区切ります。
たとえば、Oracle General Ledgerの会計フレックスフィールドの全セグメントについて、詳細転記が許可されないセグメント値をユーザー入力不可にするフォームを作成するとします。DETAIL_POSTING_ALLOWEDは、グローバル・フレックスフィールド・クオリファイアGL_GLOBALに基づくセグメント・クオリファイアであり、このセグメント・クオリファイアを規則に使用します。DETAIL_POSTING_ALLOWEDの値がN(No)になっているすべての値を対象外にします。メッセージ名は「GL Detail Posting Not Allowed」で、「詳細転記が許可されない値は使用できません」というメッセージに対応します。この場合、次のように規則を指定します。
VRULE='GL_GLOBAL\\nDETAIL_POSTING_ALLOWED\\nE

                                \\nAPPL=SQLGL;

                                NAME=GL Detail Posting Not Allowed\\nN'


VRULE引数には、改行(改行文字)を使用しないでください。前述の例では、見やすくするために改行を使用していますが、コードでは1行に記述する必要があります。1行にできない場合は、次の書式を使用してください。
vrule => 'first line' ||

         'second line'; 

このクオリファイアの影響を受けるセグメントの1つにエンド・ユーザーが除外する値を入力すると、指定したメッセージが表示されます。また、除外する値はセグメント上の値リストに表示されません。除外するように指定されていないその他すべての値は対象に含められます。
\\0(ゼロ)で区切られたVRULEパラメータのグループを1つ以上指定できます。Oracle Application Object Libraryでは、複数のVRULEパラメータを記載順で下から上に向かってチェックします。このため、最も役に立つエラー・メッセージが最初に表示されるように注意して規則を並べる必要があります。
VALATT キー・フレックスフィールド専用。VALATTは、フレックスフィールド・ウィンドウを閉じるときに、一意のフレックスフィールド・クオリファイアを表すセグメントのセグメント・クオリファイアの値をblock.fieldにコピーします。デリミタ\\nは小文字にする必要があります。
USEDBFLDS 組合せフォームでは、組合せ表にキー・フレックスフィールド列の完全セット(主フレックスフィールド)と、他のキー・フレックスフィールドへの外部キー参照(異なる組合せ表対象)となる列を両方含む場合にのみ、このパラメータを指定します。このパラメータにNを設定すると、外部キー・フレックスフィールドで、主フレックスフィールド(組合せフォームの保守対象)に属するデータベース・セグメント・フィールドが使用できなくなります。
外部キー・フォームでは、フォームが2つ以上のフレックスフィールドへの外部キー参照を持つ表に基づく場合、または非データベースSEGMENT1からN(Nは組合せ表内のセグメントの番号)フィールドがフォームにある場合、このパラメータを指定します。このようなフィールドが存在すると、フレックスフィールドはデフォルトで、現行フレックスフィールド内のセグメント値の組合せに該当する値をそれらのフィールドにロードします。このパラメータにNを設定すると、フレックスフィールドは現行フレックスフィールド用にセグメント・フィールドをロードしません。複数のフレックスフィールドがフォームにある場合、このパラメータを使用して、セグメント・フィールドを使用する必要があるフレックスフィールドを指定します(1つのフレックスフィールド・ルーチン・コールにYを指定し、それ以外のフレックスフィールドのルーチン・コールにNを指定します)。
付加フレックスフィールドでは、このパラメータにNを指定し、付加フレックスフィールドで非表示セグメント・フィールド(ATTRIBUTEnなど)を使用不可にします。
デフォルト値はYです。
COLUMN キー・フレックスフィールド専用。COLUMNを使用して、組合せ表から現行セグメント列とともにその他の列を表示します。n は列の表示幅です。その他の列の値は、現行フォーム上のフィールドに配置できます。ユーザーが既存のフレックスフィールド組合せを選択すると、その値がフィールドに自動的にコピーされます。
たとえば、SEG_DESCという説明列とE_FLAGのエラー・メッセージを列ヘッダーDESCRIPTIONおよびERROR FLAGとともに表示するには、次のように設定できます。
COLUMN=>'SEG_DESC DESCRIPTION(15),

                                        E_FLAG \"ERROR_FLAG\"(*)'


(*)は、選択した値によってサイズが決定される動的な列幅を設定します。
説明をfield block_1.field_1に格納し、エラー・メッセージをblock_1.field_2に格納するには、次のように設定します。
COLUMN=>'SEG_DESC DESCRIPTION(15)

                                        INTO BLOCK_1.FIELD_1,

                                        E_FLAG \"ERROR_FLAG\" (*)

                                        into BLOCK1_FIELD_2'


COLUMN=句には、32の別個のINTO列のみ使用できます。追加列の最大幅は、240文字です。
WHERE_ CLAUSE キー・フレックスフィールド専用。WHERE句を指定して、値リスト・ウィンドウに表示するコード組合せを制限します。また、この引数を使用すると、WHERE句に適合しない組合せをエンド・ユーザーが入力できなくなります。通常は組合せフォームにすべての組合せを表示するため、この引数は組合せフォームのフレックスフィールドに対して使用しないでください。
このWHERE句の引数では、「WHERE」という語句を指定しないでください。このトークンは、DINSERTSにNを使用するか体系レベルでの動的挿入を回避して、動的挿入が禁止されているフレックスフィールドで使用する必要があります。
動的挿入が許可されたフレックスフィールドでは、WHERE_CLAUSE引数を使用しないでください。
WHERE_CLAUSE_MSG引数を使用して、組合せがWHERE句に違反するときにエンド・ユーザーに表示する適切なメッセージを指定します。
COMBQP_ WHERE キー・フレックスフィールド専用。この引数の主な使用目的は、このフォーム上でフレックスフィールドの値の組合せリストを使用不可にすることです。NONEを指定すると、値の組合せリストが使用不可になります。
また、この引数を使用して、値リスト・ウィンドウに表示するコード組合せをさらに制限する追加のWHERE句を指定することもできます。このWHERE句は、AND式でWHERE_CLAUSE引数を使用して追加します。影響を受けるのは組合せ値リストのみであり、ユーザーが手動で入力する組合せには影響しません。
このWHERE句の引数では、「WHERE」という語句を指定しないでください。
WHERE_ CLAUSE_MSG キー・フレックスフィールド専用。WHERE_CLAUSE引数とともに使用します。WHERE句で制限された無効な組合せをエンド・ユーザーが入力したときにユーザー作成メッセージを表示する場合は、アプリケーション短縮名およびメッセージ名をここに指定します。それ以外の場合、フレックスフィールドでは、WHERE句全体をエンド・ユーザーに表示する標準のOracle Applicationsメッセージを使用します(この方法はお薦めしません)。
DATA_SET キーまたは範囲フレックスフィールド専用。フレックスフィールドのセット識別子を格納する:block.fieldを指定します。DATA_SETでは、このフレックスフィールドに使用するコード組合せのセットを指定します。各フレックスフィールド体系に対して、組合せ表内のコード組合せを複数のセット(高価格、中価格、低価格など)に分割できます。
体系定義列を実装する場合には、DATA_SETのみを使用できます(つまり、NUMを指定する必要があります)。DATA_SETのデフォルトは、体系番号です(NUMで指定)。DATA_SETを使用するには、セットとキー・フレックスフィールド体系の対応関係を記述する単独の表をアプリケーションで保守する必要があります。たとえば、この対応表には、この項の最後の表に示すような値を含めることができます。
DATA_SETを使用する場合、フレックスフィールドでは、体系番号ではなくて体系定義列のセット番号を保存します。指定した体系番号に重複したセット番号を設定できますが、対応表ではセット番号が重複しないようにしてください。DATA_SETおよびNUMは、別々の:block.fields(または、プロファイル・オプションかハードコードされた番号)から導出する必要があります。理由は、それらがまったく異なる番号であるためです。
ALLOWNULLS セグメントにNULLを許可するかどうかを決定します。ALLOWNULLSは、VALIDATEパラメータにPARTIALまたはNONEを指定した場合に、各セグメントのセグメント定義(Value RequiredがYes)のみを上書きします。
QUERY_ SECURITY キー・フレックスフィールド専用。フレックスフィールド値セキュリティが、挿入および更新と同じように問合せにも適用されるか決定します。Yを指定すると、エンド・ユーザーは制限された値を含む既存のコード組合せの問合せができなくなります。Nを指定すると、エンド・ユーザーは制限された値を含むコード組合せの問合せおよび検索を実行できますが、制限された値を更新することはできません。デフォルト値はNです。このオプションは、エンド・ユーザーがフレックスフィールド値セットに対してフレックスフィールド値セキュリティを有効化し定義していないかぎり、影響を与えません。
QBE_IN キー・フレックスフィールド専用。フレックスフィールドquery-by-example内の必要な行を選択するために、フレックスフィールドで使用する副問合せのタイプを制御します。
デフォルト値はNです。
Nを指定すると、フレックスフィールドによって相関副問合せが生成されます。この問合せは、主問合せ(フォームのその他の部分で生成される)から戻された各行に対して実質上1回処理され、一意索引としてコード組合せIDを使用します。主問合せから少数の行を戻し、フレックスフィールドquery-by-exampleから多数の行を戻すようにする場合は、Nを選択します。
Yを指定すると、フレックスフィールドで「IN」SQL句を使用して非相関副問合せが生成されます。問合せは1回のみ処理されますが、フレックスフィールドquery-by-exampleの基準に適合する組合せ表内のすべての行が戻されます。主問合せから多数の行を戻し、フレックスフィールドquery-by-exampleから少数(約100未満)の行を戻すようにする場合は、Yを選択します。このような条件は通常、組合せ表内の少数の行とアプリケーション表内の多数の行に該当します。たとえば、限定数(75など)の部品のみを扱う会社の部品フレックスフィールドがあり、その部品に数千の注文(および対応する大規模な注文表)があるとします。この場合にYを選択すると、フレックスフィールドquery-by-exampleでのアプリケーションのパフォーマンスが大幅に向上します。
LONGLIST キー・フレックスフィールド専用。YまたはNを指定して、このフレックスフィールドでのLongList使用を許可または禁止します。LongListを使用すると、エンド・ユーザーが組合せ値リスト(LOV)によってフレックスフィールド組合せを問い合せるときに部分値を指定できるようになります。
NO_COMBMSG キーまたは範囲フレックスフィールド専用。エンド・ユーザーが無効な組合せを入力したときにユーザー作成メッセージを表示する場合は、メッセージ名をここに指定します。それ以外の場合、フレックスフィールドでは標準Oracle Applicationsメッセージが使用されます。
WHERE_CLAUSE引数を使用する場合、NO_COMBMSGではなくてWHERE_CLAUSE_MSG引数を使用することによって、組合せがWHERE句に違反するときにエンド・ユーザーに表示する適切なメッセージを指定します。
READ_ONLY 短縮別名、コピーまたはその他の方法によってフレックスフィールドセグメント値を更新できないようにするには、Yを指定します。
AUTO- COMBPICK キー・フレックスフィールド専用。エンド・ユーザーが存在しないコード組合せを入力したときに動的挿入が許可されていない直接入力フレックスフィールドに対して値の組合せリストの動作を決定します。Yを指定すると、エンド・ユーザーが無効な値を単一のセグメント・フレックスフィールドに入力した場合、または非定数値(%)やNULLセグメントが複数セグメント・フレックスフィールドにある場合、値の組合せリストが表示されます。Nを指定すると、値の組合せリストが表示されず、「この組合せは存在しません」という意味のエラー・メッセージが生成されます。デフォルト値はYです。
LOCK_FLAG 通常、エンド・ユーザーがフレックスフィールド・セグメントに文字を入力すると、その操作によってフォームの実表がロックされます。ただし、1つの実表を使用する複数の問合せフォームがあって、表がロック解除されるまで他のユーザーが待機する必要がないようにする場合などは、表ロックを実行しないようにすることもあります。デフォルト値はYです。Nを指定するとロック動作が無効になり、Dを指定すると、フレックスフィールド関連フィールドがデータベース・フィールドの場合のみ、表ロックを実行します。
HELP HELP引数を使用して、このフレックスフィールドのこのインスタンス固有のオンライン・ヘルプのターゲット名を指定します。ヘルプ・ファイルを所有するアプリケーションのアプリケーション短縮名を指定します(フレックスフィールドまたはフォームを所有するのと同一のアプリケーションとはかぎりません)。また、ヘルプが存在するヘルプ・ファイルのターゲット名を指定します。該当するヘルプのターゲット名が見つからない場合は、エラー・メッセージが表示されます。HELP引数を指定しないと、オンライン・ヘルプに汎用フレックスフィールド・ヘルプが表示されます。たとえば、Oracle General Ledgerヘルプ・ファイルの会計フレックスフィールド固有のヘルプを表示するには、次のように指定します。
HELP=>'APPL=SQLGL;TARGET=FLEX.GL#' 
CONTEXT_LIKE 付加フレックスフィールド専用。WHERE句の一部を指定して、コンテキスト・フィールドの値リスト・ウィンドウに表示するコンテキスト・コードを制限します。また、この引数は、エンド・ユーザーがWHERE句に適合しないコンテキストを入力できないようにします。コンテキスト・フィールドのLOVに対する結果のWHERE句は、次のようになります。
WHERE ...

AND DESCRIPTIVE_FLEX_CONTEXT_CODE LIKE

<CONTEXT_LIKE>...      

デフォルト値は、「%」です。この引数を使用してコンテキスト値を制限する場合は、上書き許可(表示コンテキスト)を付加フレックスフィールド定義で有効にする(選択する)必要があります。
フレックスフィールドでは、POST-QUERYイベント内でこの制限を使用しません。そのため、エンド・ユーザーは、WHERE句のCONTEXT_LIKE部分に従い無効になる既存データの問合せを実行できます。ただし、エンド・ユーザーが現在無効なフレックスフィールド・データの問合せを実行するすべてのフレックスフィールドと同様に、エンド・ユーザーが「OK」を押すと(フレックスフィールド値の変更有無にかかわらず)、フレックスフィールドが変更済とマークされ、無効な値を修正する必要があります。エンド・ユーザーが「取消」ボタンを押すと、データは影響を受けず、修正の必要がありません(エンド・ユーザーがレコードのその他の非フレックスフィールド部分を変更している場合でも)。
付加フレックスフィールド用参照フィールドは通常、新規レコードに対して付加フレックスフィールドを初めて開いたときにのみ評価されます(エンド・ユーザーがコミット前にフレックスフィールドを開かない場合はコミット時に検証されます)。エンド・ユーザーがフレックスフィールドを開くと、コンテキスト・フィールドが参照フィールドの値で移入されます。エンド・ユーザーがフレックスフィールド・ウィンドウを閉じるために「OK」を押すと、参照フィールドに戻り、その値が変更されますが、コンテキスト・フィールド値は参照フィールド内の新規の値を反映するように変更されません。さらに、既存のコンテキスト・フィールド値は、そのときのCONTEXT_LIKE引数の値に従って再評価されることはありません。明らかに一貫性のない動作を作成しないためには、フォーム起動時にフレックスフィールド定義に最初に設定した後は決してCONTEXT_LIKE引数を変更しないようにする必要があります(たとえば、この値がエンド・ユーザーによって変更可能なフィールドの値に基づくことがないようにします)。
たとえば、この引数は、指定した国での国固有のコンテキストを制限するために使用できます。
SELECT_COMB_ FROM_VIEW キー・フレックスフィールド専用。フレックスフィールドでは、コード組合せ表名を使用して、検証および値リストのためのSELECT文を作成します。キー・フレックスフィールドのコード組合せ表が変換済エンティティの実表(_B表)であり、変換済の表(_TL表)からCOLUMNトークンによって追加列を取得する場合は、SELECT_COMB_FROM_VIEWトークンを使用して変換済のビュー名(_VLビュー)を指定します。
SELECT_COMB_FROM_VIEWに指定した値がキー・フレックスフィールドのコード組合せ表名と異なる場合は、動的挿入が自動的に無効になります。
対応例の表
体系 セット セットの説明
101 1 低価格トラック部品
101 2 中価格トラック部品
101 3 高価格トラック部品
102 4 低価格自動車部品
102 5 高価格自動車部品
103 6 低価格バイク部品
103 7 高価格バイク部品

タイプ・フレックスフィールドで追加されるオプション引数

タイプ・フレックスフィールドを作成する場合、これらの引数を他のオプションまたは必須の引数に追加して使用します。特定のオプション引数を指定しないと、フレックスフィールド・ルーチンでは引数の通常のデフォルト値が使用されます。複数の「タイプ列」(実際のセグメント・フィールドに対応するフレックスフィールド・ポップアップ・ウィンドウ内のフィールドの列)から構成されるタイプ・フレックスフィールドを作成できます。その場合は\\0を使用して値を区切り、複数のTYPE_引数値を指定します。ただし、SCOLUMNでは1つの値のみを指定できます。

変数 説明
TYPE_FIELD 範囲(タイプ)フレックスフィールド専用。「タイプ」・フレックスフィールドを設定するフィールドの名前。これは、連結セグメント・タイプ値とデリミタを含む、非データベースの表示フォーム・フィールドです。
タイプ・フィールドに関連するすべてのフィールドに共通の接尾辞を付けることができます。たとえばTYPE1という接尾辞を指定した場合、フレックスフィールドはすべてのフィールド名に自動的にこの接尾辞を付けます。接尾辞を指定した場合は、FND_RANGE_FLEX.DEFINEコールのタイプ関連フィールド名には接尾辞を付けないでください。接尾辞を指定した場合、フレックスフィールドは各タイプ値を個別のフォーム・フィールドに格納しようとするため(各セグメントごとに1個のタイプ・フィールド)、これらのフィールドを使用するときは接尾辞を指定する必要がありますが、連結フィールドのみ使用するときは接尾辞を指定しないでください。
TYPE_FIELDを指定すると、TYPE_HEADING、TYPE_VALIDATIONおよびTYPE_SIZESも指定する必要があります。TYPE_DESCRIPTIONおよびその他のタイプ引数はオプションです。
タイプ・フィールドおよび接尾辞は、複数指定できます。各フィールドおよび接尾辞は一意にする必要があり、異なるタイプで同じ基礎となるフィールドおよび列は共有できません。最初のフィールドおよび接尾辞と2番目のフィールドおよび接尾辞(以下同様)は、\\0によって区切ります。
TYPE_ DESCRIPTION 範囲(タイプ)フレックスフィールド専用。タイプ・フレックスフィールドの説明フィールド。これは、タイプ・セグメント値の連結済の説明を含む、非データベースで入力不可の表示フィールドです。このパラメータを指定しないと、フォームで連結タイプ・セグメントの説明を表示できません。TYPE_FIELDの接尾辞を指定した場合は、TYPE_DESCRIPTION用に接尾辞を指定しないでください。
TYPE_DATA_ FIELD 範囲(タイプ)フレックスフィールド専用。連結タイプ・セグメント非表示IDを含む非表示フォーム・フィールドの名前。TYPE_FIELDの接尾辞を指定した場合は、この引数に接尾辞を指定しないでください。
TYPE_ VALIDATION 範囲(タイプ)フレックスフィールド専用。タイプ列(タイプ列内のすべてのフィールド)に使用する値セットの名前(Yes_Noなど)を指定します。エンド・ユーザーがタイプ列の各フィールド用の値を入力する必要がある場合はYを指定し、値が不要であればNを指定します。最後に、タイプ列のすべてのフィールド用に単一のデフォルト値を指定します。このデフォルト値は、ポップアップ・ウィンドウが開くと、各タイプ・フィールドに表示されます。デフォルト値には、ハードコードされた定数値またはフィールド参照(:block.field)のいずれかを使用します。
タイプ列が複数ある場合、\\0デリミタで区切って次の値グループを指定します。
TYPE_SIZES 範囲(タイプ)フレックスフィールド専用。タイプ・フィールドで使用する値セットの最大表示サイズとともに、値説明の最大表示サイズを指定します。値表示サイズは、1以上にする必要があります。また、該当する値セットの最大サイズよりも小さくする必要があります(この最大サイズは基礎となるデータベース列のサイズより大きくしないでください)。説明表示サイズには、0以上を指定します。
タイプ列が複数ある場合は、値サイズと説明サイズの組合せごとに\\0デリミタで区切って指定します。
TYPE_HEADING 範囲(タイプ)フレックスフィールド専用。フレックスフィールド・ポップアップ・ウィンドウ内のタイプ・セグメントの上部に表示するタイトルを指定します。
タイプ列が複数ある場合は、\\0デリミタで区切って追加のヘッダーを指定します。
SCOLUMN 範囲(タイプ)フレックスフィールド専用。SCOLUMN引数を指定するということは、単一の列タイプ・フレックスフィールド(SEGMENTn_LOWフィールドと複数のタイプ列のみを使用し、SEGMENTn_HIGHを使用しないフレックスフィールド)であることを示しています。フレックスフィールド・ポップアップ・ウィンドウに表示するSEGMENTn_LOWフィールドにタイトルを指定します。フレックスフィールドでは、指定したタイトルにかかわらず、引き続き_LOW接尾辞が各SEGMENTnフィールドおよび連結済の関連フィールドに適用されることが想定されています。

フレックスフィールド定義例

単純なキー・フレックスフィールドの例

単純なキー・フレックスフィールド定義の例を示します。この定義では、会計フレックスフィールドのデフォルト体系(101)を設定しています。

 FND_KEY_FLEX.DEFINE(

      BLOCK=>'ORDERS',

      FIELD=>'KFF_CONCATENATED_VALUES',



      APPL_SHORT_NAME=>'SQLGL',

      CODE=>'GL#',

      NUM=>'101');

追加引数を指定するキー・フレックスフィールドの例

複雑なキー・フレックスフィールド定義の例を示します。この定義では、会計フレックスフィールドのデフォルト体系(101)を設定しています。

 FND_KEY_FLEX.DEFINE(

      BLOCK=>'ORDERS',

      FIELD=>'KFF_CONCATENATED_VALUES',



      APPL_SHORT_NAME=>'SQLGL',

      CODE=>'GL#',

      NUM=>'101',



      DISPLAYABLE=>'ALL'

      INSERTABLE=>'ALL'

      UPDATEABLE=>'');

変数の引数を指定するキー・フレックスフィールドの例

短縮別名フォームの例を示します。この例では、複数の引数を上書きし、:block.field 参照によってフィールド値をプロシージャに渡しています。また、フレックスフィールドに関連する3つのフィールド(FIELD、DESCRIPTIONおよびDATA_FIELD)の例も示します。

FND_KEY_FLEX.DEFINE(

     BLOCK=>'ALIASES',

     FIELD=>'SEGMENTS',

     DESCRIPTION=>'SEGMENT_DESCRIPTIONS',

     DATA_FIELD=>'CONCATENATED_SEGMENTS',



     APPL_SHORT_NAME=>':FLEX.APPLICATION_SHORT_NAME',

     CODE=>':FLEX.ID_FLEX_CODE',

     NUM=>':FLEX.ID_FLEX_NUM',



     REQUIRED=>'Y',

     USEDBFLDS=>'N',

     VALIDATE=>'PARTIAL',

     ALLOWNULLS=>'Y');

この例では、引数REQUIRED、USEDBFLDS、VALIDATEおよびALLOWNULLSのデフォルト値を上書きしています。

付加フレックスフィールドの例

単純な付加フレックスフィールド定義の例を示します。この定義では、Oracle Applicationsの短縮別名フォームに付加フィールドを設定しています。

 FND_DESCR_FLEX.DEFINE(

      BLOCK=>'ALIASES',

      FIELD=>'DF',



      APPL_SHORT_NAME=>'FND',

      DESC_FLEX_NAME=>'FND_SHORTHAND_FLEX_ALIASES');

範囲フレックスフィールドの例

単純な範囲フレックスフィールド定義の例を示します。

 FND_RANGE_FLEX.DEFINE(

      BLOCK=>'RANGES',

      FIELD=>'SEGMENTS',

      DESCRIPTION=>'DESCRIPTIONS'



      APPL_SHORT_NAME=>'SQLGL',

      CODE=>'GL#',

      NUM=>'101',



      VALIDATE=>'PARTIAL');

FIELDおよびDESCRIPTIONに対応する実際のフォーム・フィールドは、SEGMENTS_LOW、SEGMENTS_HIGH、DESCRIPTIONS_LOWおよびDESCRIPTIONS_HIGHです。

タイプ付き範囲フレックスフィールドの例

2つのタイプ・フィールドを持つ会計フレックスフィールドを使用する例を示します。

FND_RANGE_FLEX.DEFINE(

  BLOCK=>'RANGES',

  FIELD=>'SEGMENTS',

  DESCRIPTION=>'DESCRIPTIONS',



  APPL_SHORT_NAME=>'SQLGL',

  CODE=>'GL#',

  NUM=>'101',



  VALIDATE=>'PARTIAL',

  TYPE_FIELD=>'RANGES.SEGMENTS\\n_TYPE1\\0

       RANGES.SEGMENTS\\n_TYPE2',

  TYPE_DATA_FIELD=>'RANGES.TYPE_DATA\\0

       RANGES.TYPE_DATA',

  TYPE_DESCRIPTION=>'RANGES.TYPE_DESC\\0

       RANGES.TYPE_DESC',

  TYPE_HEADING=>'Type 1\\0Type 2',

  TYPE_VALIDATION=>'Yes_No\\nN\\nYes\\0

       Yes_No\\nN\\nNo',

  TYPE_SIZES=>'4\\n4\\04\\n4');

タイプ付き単一範囲列フレックスフィールドの例

SCOLUMN引数は、単一列フレックスフィールドを定義するために使用します。Low、HighおよびType列を設定するのではなくSCOLUMNに値を指定する場合は、このフレックスフィールドにLowおよびType列のみが設定されます。ここでは、「Low」というタイトルが適切ではないので(High列がないため)、SCOLUMN引数によって渡される値が列タイトルとして使用されます。範囲フレックスフィールドは、接尾辞_LOWが追加された基礎のセグメントに書込みを続行し、連結セグメント、説明およびdata_fieldフィールドに_LOW接尾辞が追加されるとみなします。

前述と同じフレックスフィールドで列が1つしかないフレックスフィールドが使用されます。

FND_RANGE_FLEX.DEFINE(

  BLOCK=>'RANGES',

  FIELD=>'SEGMENTS',

  DESCRIPTION=>'DESCRIPTIONS',



  APPL_SHORT_NAME=>'SQLGL',

  CODE=>'GL#',

  NUM=>'101',



  VALIDATE=>'PARTIAL',

  SCOLUMN=>'Accounting Flexfield',

  TYPE_FIELD=>'RANGES.SEGMENTS\\n_TYPE1\\0

       RANGES.SEGMENTS\\n_TYPE2',

  TYPE_DATA_FIELD=>'RANGES.TYPE_DATA\\0

       RANGES.TYPE_DATA',

  TYPE_DESCRIPTION=>'RANGES.TYPE_DESC\\0

       RANGES.TYPE_DESC',

  TYPE_HEADING=>'Type 1\\0Type 2',

  TYPE_VALIDATION=>'Yes_No\\nN\\nYes\\0

       Yes_No\\nN\\nNo',

  TYPE_SIZES=>'4\\n4\\04\\n4');

フレックスフィールド定義の更新

通常、フレックスフィールドは、起動イベント時にフォーム内に1回定義します。ただし、この定義を後で変更する必要が生じる場合があります。たとえば、フレックスフィールドを更新不可および挿入不可に設定するとします。UPDATEABLE=>''、INSERTABLE=>''および前回同様その他すべての引数でフレックスフィールド全体を再定義するのではなく、次の更新プロシージャによって変更が必要な引数のみを変更できます。

更新プロシージャによって、フレックスフィールド定義プロシージャに指定した「その他のオプション引数」のいずれかを制御できます。フレックスフィールド使用フィールドなどの引数は、基本的にフレックスフィールドを変更するのではなく識別するためのものなので、これらのプロシージャによって変更することはできません。たとえば、VALIDATE引数には新規の値を指定できますが、DESCRIPTIONまたはDATA_FIELD引数には新規の値を指定できません。

フレックスフィールドの有効化または無効化

フォームにフレックスフィールドが定義されると、様々なブロックまたはフォーム・レベルのトリガーによってFND_FLEX.EVENTコールが発生したときに、これらのイベントがブロックまたはフォームに定義されたすべてのフレックスフィールドに必ず適用されます。このため、一部のフレックスフィールドにのみFND_FLEX.EVENTコールすることが難しくなります。たとえば、PRE-UPDATE内の特定キー・フレックスフィールドにVALIDを呼び出さず、ブロック内のその他すべてのフレックスフィールドに呼び出す場合が該当します。更新プロシージャを使用すると、フレックスフィールド定義を有効または無効にして、無効にされたフレックスフィールド定義にはFND_FLEX.EVENTコールを適用しないようにすることができます。

更新プロシージャには、指定可能なオプション引数の他にENABLEという特別な引数があります。この引数にNを指定すると、フレックスフィールドが無効になり、Yを指定すると、フレックスフィールドが有効になります。通常のフレックスフィールド定義プロシージャ・コールでは、フレックスフィールドが自動的に有効になるため、ENABLEDを使用しないでください。

キー・フレックスフィールド定義構文の更新

FND_KEY_FLEX.UPDATE_DEFINITIONを使用すると、外部キーまたは組合せフォーム上にあるキー・フレックスフィールドの定義を更新できます。更新プロシージャにのみ使用できるENABLED引数を除き、引数はフレックスフィールド定義プロシージャに使用する引数と同じです。

 FND_KEY_FLEX.UPDATE_DEFINITION(

  /* Arguments that specify flexfield location and

           thus identify the flexfield */

     BLOCK=>'block_name',  FIELD=>'concatenated_segments_field_name',



 /* Argument to enable or disable flexfield */  [ENABLED=>'{Y|N}',] 
 /* Other optional parameters */

    [VALIDATE=>'{FOR_INSERT|FULL|PARTIAL|NONE|

              PARTIAL_IF_POSSIBLE}',]

    [VDATE=>'date',]

    [DISPLAYABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [INSERTABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [UPDATEABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [VRULE=>'flexfield qualifier\\n

           segment qualifier\\n

           {I[nclude]|E[xclude]}\\n

           APPL=application_short_name;

           NAME=Message Dictionary message name\\n

           validation value1\\n

           validation value2...

           [\\0flexfield qualifier\\n

           segment qualifier\\n

           {I[nclude]|E[xclude]}\\n

           APPL=application_short_name;

           NAME=Message Dictionary message name\\n

           validation value1\\n

           validation value2...]',]

    [COPY=>'block.field\\n{ALL | flexfield

           qualifier | segment_number}

           [\\0block.field\\n{ALL | flexfield

           qualifier | segment_number}]',]

    [DERIVED=>'block.field\\nSegment qualifier',]

    [DINSERT=>'{Y|N}',]

    [VALATT=>'block.field\\n

           flexfield qualifier\\n

           segment qualifier',]

    [TITLE =>'Title',]

    [REQUIRED=>'{Y|N}',]

    [AUTOPICK=>'{Y|N}',]

    [USEDBFLDS=>'{Y|N}',]

    [ALLOWNULLS=>'{Y|N}',]

    [DATA_SET=>'set number',]

    [COLUMN=>'{column1(n) | column1 alias(n) [, column2(n), ...]}',]

    [WHERE_CLAUSE=>'where clause',]

    [COMBQP_WHERE=>'{Y|N}',]

    [WHERE_CLAUSE_MSG=>'APPL=application_short_

           name;NAME=message_name',]

    [QUERY_SECURITY=>'{Y|N}',]

    [QBE_IN=>'{Y|N}',]

    [READ_ONLY=>'{Y|N}',]

    [LONGLIST=>'{Y|N}',]

    [NO_COMBMSG=>'{Y|N}',]

    [LOCK_FLAG=>'{Y|N}',]

    [AUTOCOMBPICK=>'{Y|N}',]

    [DERIVE_ALWAYS=>'{Y|N}',]

    [HELP=>'APPL=application_short_name;

            TARGET=target_name']

   );

範囲(タイプ)フレックスフィールド定義構文の更新

範囲フレックスフィールドの場合は、FND_RANGE_FLEX.UPDATE_DEFINITIONを使用します。関連キー・フレックスフィールドの各セグメントに対応する追加フィールドを含むタイプ・フレックスフィールド(範囲フレックスフィールド・セグメントも含むことがある)にも、同じプロシージャを使用します。

更新プロシージャにのみ使用できるENABLED引数を除き、引数はフレックスフィールド定義プロシージャに使用する引数と同じです。関連項目: フレックスフィールド定義の引数

重要: FIELD、DESCRIPTION、DATA_FIELDまたはその他の値には、このプロシージャによって自動的に「_LOW」または「_HIGH」が追加されるので、「_LOW」または「_HIGH」を追加しないでください。複数のタイプ列を使用する場合は、すべてのTYPE_引数で同じ順序でタイプ列を指定していることを確認して、引数値を不正なタイプ列に適用しないようにしてください。

 FND_RANGE_FLEX.UPDATE_DEFINITION(



  /* Arguments that specify flexfield location */

     BLOCK=>'block_name',  FIELD=>'concatenated_segments_field_name', 
 /* Argument to enable or disable flexfield */  [ENABLED=>'{Y|N}',] 
 /* Other optional parameters */

    [VALIDATE=>'{PARTIAL|NONE}',]

    [VDATE=>'date',]

    [DISPLAYABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [INSERTABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [UPDATEABLE=>'{ALL | flexfield_qualifier |

           segment_number}[\\0{ALL |

           flexfield_qualifier | segment_number}]',]

    [VRULE=>'flexfield qualifier\\n

           segment qualifier\\n

           {I[nclude]|E[xclude]}\\n

           APPL=application_short_name;

           NAME=Message Dictionary message name\\n

           validation value1\\n

           validation value2...

           [\\0flexfield qualifier\\n

           segment qualifier\\n

           {I[nclude]|E[xclude]}\\n

           APPL=application_short_name;

           NAME=Message Dictionary message name\\n

           validation value1\\n

           validation value2...]',]

    [TITLE =>'Title',]

    [REQUIRED=>'{Y|N}',]

    [AUTOPICK=>'{Y|N}',]

    [USEDBFLDS=>'{Y|N}',]

    [ALLOWNULLS=>'{Y|N}',]

    [DATA_SET=>'set number',]

    [READ_ONLY=>'{Y|N}',]



 /* Parameters specific to type flexfields */

    [TYPE_FIELD=>'block.concatenated_type_values_

           field\\ntype field suffix',]

    [TYPE_VALIDATION=> 'Value set name\\n

           Required\\nDefault value',]

    [TYPE_SIZES=>'type_value_display_

           size\\nDescription_display_size',]

    [TYPE_HEADING=>'type column heading',]

    [TYPE_DATA_FIELD=>'block.type_data_field',]

    [TYPE_DESCRIPTION=>'block.type_

           description_field',]

    [SCOLUMN=>'single column title']

    [HELP=>'APPL=application_short_name;

            TARGET=target_name']

);

重要: TYPE_FIELD、TYPE_DATA_FIELDおよびTYPE_DESCRIPTIONでは、blockの構成が必要です。ブロック名なしのフィールド名を指定するその他のフレックスフィールド引数では必要ありません。

付加フレックスフィールド定義構文の更新

付加フレックスフィールドの場合、FND_DESCR_FLEX.UPDATE_DEFINITIONを使用します。更新プロシージャにのみ使用できるENABLED引数を除き、引数はフレックスフィールド定義プロシージャに使用する引数と同じです。関連項目: フレックスフィールド定義の引数

 FND_DESCR_FLEX.UPDATE_DEFINITION(

  /* Arguments that specify the flexfield location */

    BLOCK=>'block_name',  FIELD=>'field_name',

 /* Argument to enable or disable flexfield */  [ENABLED=>'{Y|N}',] 
 /* Other optional parameters  */

    [VDATE=>'date',]

    [TITLE =>'Title',]

    [AUTOPICK=>'{Y|N}',]

    [USEDBFLDS=>'{Y|N}',]

    [READ_ONLY=>'{Y|N}',]

    [LOCK_FLAG=>'{Y|N}',]

    [HELP=>'APPL=application_short_name;

            TARGET=target_name',]

    [CONTEXT_LIKE=>'WHERE_clause_fragment'}

     );

フレックスフィールド定義の更新例

PRE-UPDATE内の特定キー・フレックスフィールドにはVALIDを呼び出さず、ブロック内のその他のフレックスフィールドにVALIDを呼び出す場合を考えます。次に、単純なキー・フレックスフィールド定義を無効および有効にする例を示します。この定義では、会計フレックスフィールドのデフォルト体系(101)を設定しています。ブロックへのPRE-UPDATEトリガーを次のように記述します。

 FND_KEY_FLEX.UPDATE_DEFINITION(

      BLOCK=>'ORDERS',

      FIELD=>'KFF_CONCATENATED_VALUES',

      ENABLED=>'N');



    FND_FLEX.EVENT('PRE-UPDATE');



    FND_KEY_FLEX.UPDATE_DEFINITION(

      BLOCK=>'ORDERS',

      FIELD=>'KFF_CONCATENATED_VALUES',

      ENABLED=>'Y');

「検索」ウィンドウでのキー・フレックスフィールドの使用

問合せを特定のセグメント値に制限するには、キー・フレックスフィールドを「検索」ウィンドウで使用できます。「検索」ウィンドウに2000文字表示のテキスト項目として、連結セグメント・フィールドを作成します。「検索」ウィンドウでは、個々のSEGMENTnフィールドは不要です。このフィールドに必要なキー・フレックスフィールドをFND_KEY_FLEX.DEFINEプロシージャを使用して定義します。この定義は、ベース・ブロック内でフレックスフィールドを定義した箇所と同一箇所で行います。ID、DESCRIPTIONおよびDATA_FIELD引数の値は渡さないでください。引数は、次のように値を設定する必要があります。

VALIDATE   => 'PARTIAL_IF_POSSIBLE',

REQUIRED   => 'N',

USEDBFLDS  => 'N',

ALLOWNULLS => 'Y'

INSERTABLE => 'ALL', -- Default value

UPDATEABLE => 'ALL', -- Default value

重要: DISPLAYABLEには、ベース・ブロックのフレックスフィールドの定義に使用した値と同じ値を設定する必要があります。

前述の定義を使用すると、エンド・ユーザーが一部のセグメントに値を選択してその他のセグメントを空白のまま残すことができます。

次の手順で「検索」ウィンドウの作成を説明します。ベース・ブロックのPRE-QUERYトリガー内で、プロシージャFND_FLEX_FIND.QUERY_KFLEXを呼び出します。この機能への引数は、ベース・ブロック内の連結セグメント・フィールドのアプリケーション短縮名、フレックスフィールド・コード、体系番号、連結セグメント値および名前です。次に、プロシージャ仕様を示します。

 PROCEDURE query_kflex(appl_short_name VARCHAR2,

                        code            VARCHAR2,

                        num             NUMBER,

                        segments        VARCHAR2,

                        segments_field  VARCHAR2);

重要: FND_FLEX.EVENT('PRE-QUERY')へのコールは、FND_FLEX_FIND.QUERY_KFLEXプロシージャを呼び出した後に作成する必要があります。

キー・フレックスフィールドを使用する「問合せ検索」ウィンドウの例

次の例は、「検索」ウィンドウで会計フレックスフィールドを使用する方法を示しています。

FND_KEY_FLEX.DEFINE(

                  BLOCK           => 'MY_BLOCK_QF',

                  FIELD           => 'SEGMENTS',

                  APPL_SHORT_NAME => 'SQLGL',

                  CODE            => 'GL#',

                  NUM             => 101,

                  VALIDATE        => 'PARTIAL_IF_POSSIBLE',

                  REQUIRED        => 'N',

                  USEDBFLDS       => 'N',

                  ALLOWNULLS      => 'Y');

MY_BLOCK上のPRE-QUERYトリガーは次に示すとおりです。

...

        IF (:parameter.G_query_find = 'TRUE') THEN

            ...

            fND_FLEX_FIND.QUERY_KFLEX('SQLGL', 'GL#', 101,

                                    :MY_BLOCK_QF.SEGMENTS,

                                    'MY_BLOCK.SEGMENTS');

            ...

            :parameter.G_query_find = 'FALSE';

        END IF;

        ...

        FND_FLEX.EVENT('PRE-QUERY');

「問合せ検索」ウィンドウでの範囲フレックスフィールドの使用

多くの場合、「検索」ウィンドウで範囲フレックスフィールドを指定することは、エンド・ユーザーが単一の値ではなくフレックスフィールド・セグメントの値範囲を指定できるので、役に立ちます。「検索」ウィンドウに2000文字表示のテキスト項目として、2つの連結セグメント・フィールド(最小値および最大値用)を作成します。フィールド名は、フォームXXXX_LOWおよびXXXX_HIGHにする必要があります。「検索」ウィンドウでは、個々のSEGMENTnフィールドは不要です。このフィールドに必要な範囲フレックスフィールドをFND_RANGE_FLEX.DEFINEプロシージャによって定義します。この定義は、ベース・ブロック内のフレックスフィールドを定義した箇所と同一箇所で行います。ID、DESCRIPTIONおよびDATA_FIELD引数の値は渡さないでください。定義コールへの引数には次のように値を設定する必要があります。

VALIDATE   => 'NONE',

REQUIRED   => 'N',

USEDBFLDS  => 'N',

ALLOWNULLS => 'Y'

INSERTABLE => 'ALL', -- Default value

UPDATEABLE => 'ALL', -- Default value

重要: DISPLAYABLEには、ベース・ブロックのフレックスフィールドの定義に使用した値と同じ値を設定する必要があります。

問合せを実行する範囲の上限および下限として有効なセグメント値をエンド・ユーザーに入力させるよう、VALIDATE引数の値を「PARTIAL」にできます。

前述の定義を使用すると、エンド・ユーザーが一部のセグメントに値を選択してその他のセグメントを空白のまま残すことができます。また、最大または最小のセグメント値の一方を空白にして、セグメント値の上限または下限の一方を設定できます。最大および最小フィールドの両方に同じ値を入力し、特定セグメント値に問合せを実行することも可能です。

「検索」ウィンドウの作成手順を実行します。ベース・ブロックのPRE-QUERYトリガー内で、プロシージャFND_FLEX_FIND.QUERY_KFLEX_RANGEを呼び出します。この機能への引数は、ベース・ブロック内の連結セグメント・フィールドのアプリケーション短縮名、フレックスフィールド・コード、体系番号、連結の最小セグメント値、連結の最大セグメント値および名前です。次に、プロシージャ仕様を示します。

 PROCEDURE query_kflex_range(appl_short_name VARCHAR2,

                              code            VARCHAR2,

                              num             NUMBER,

                              low_segments    VARCHAR2,

                              high_segments   VARCHAR2,

                              segments_field  VARCHAR2);

重要: FND_FLEX.EVENT('PRE-QUERY')へのコールは、FND_FLEX_FIND.QUERY _KFLEX_RANGEプロシージャを呼び出した後に作成する必要があります。

範囲フレックスフィールドを使用する「問合せ検索」ウィンドウの例

前述の例でキー・フレックスフィールドではなくて範囲フレックスフィールドの使用を選択すると、フレックスフィールド定義およびPRE-QUERYトリガーは次のようになります。

FND_RANGE_FLEX.DEFINE(

                  BLOCK           => 'MY_BLOCK_QF',

                  FIELD           => 'SEGMENTS',

                  APPL_SHORT_NAME => 'SQLGL',

                  CODE            => 'GL#',

                  NUM             => 101,

                  VALIDATE        => 'NONE',

                  REQUIRED        => 'N',

                  USEDBFLDS       => 'N',

                  ALLOWNULLS      => 'Y');

MY_BLOCK上のPRE-QUERYトリガーは次に示すとおりです。

...

        IF (:parameter.G_query_find = 'TRUE') THEN

            ...

            FND_FLEX_FIND.QUERY_KFLEX_RANGE('SQLGL', 'GL#', 101,

                                 :MY_BLOCK_QF.SEGMENTS_LOW,

                                 :MY_BLOCK_QF.SEGMENTS_HIGH,

                                 'MY_BLOCK.SEGMENTS');

            ...

            :parameter.G_query_find = 'FALSE';

        END IF;

        ...

        FND_FLEX.EVENT('PRE-QUERY');

フレックスフィールドのトラブルシューティング

フレックスフィールドの不正な動作

フレックスフィールドの動作に問題が発生した場合、各フレックスフィールド・トリガーが適切なイベント名をフレックスフィールド・ルーチンに渡しているかどうかを最初に確認します。フレックスフィールド・ルーチンは、様々なイベント引数に対応して異なる動作を実行するので、不適切な引数によって、予測できない異常な結果が発生することがあります。

たとえば、WHEN-NEW-ITEM-INSTANCEトリガー内のFND_FLEX.EVENTコールでは、「WHEN-NEW-ITEM-INSTANCE」をフレックスフィールド・ルーチンに渡す必要があります。ところが、WHEN-NEW-ITEM-INSTANCEまたはWHEN-NEW-RECORD-INSTANCEトリガー内の「POST-QUERY」引数を渡すと、セグメント値のデフォルト設定動作が機能しません。必ずフレックスフィールド・トリガー内の適切なイベント名を渡してください。

フレックスフィールドのポップアップ表示が失敗する

エンド・ユーザーがフィールド内にカーソルを置いていると、フレックスフィールドが自動的にポップアップ表示されないのは、フレックスフィールドの標準動作であり(プロファイル・オプション「フレックスフィールド: 付加ウィンドウをオープン」および「フレックスフィールド: キー・ウィンドウをオープン」でポップアップ表示しないように設定されている場合を除く)、必ずしもこの動作に関するコーディング上の問題とはかぎりません。ただし、エンド・ユーザーがツールバーで「編集」ボタンまたは値リスト・ボタンを選択しても、フレックスフィールドが開かない場合は、次の2つのトリガー内のAPP_STANDARD.EVENTコードが適切であることと、2つのトリガーが下位レベルのトリガーによって上書きされていないことを確認する必要があります。

フレックスフィールドFNDSQFデバッガ

フレックスフィールドFNDSQFライブラリ・コール(FND_FLEX.EVENT、FND_KEY_FLEX.DEFINEなど)のいずれかがエラーを返した(未処理例外の発生)場合、フレックスフィールドFNDSQFデバッガを使用してデバッグ情報を取得できます。デバッガはグローバル変数GLOBAL.FND_FLEX_FNDSQF_DEBUGによって制御されています。

グローバル変数GLOBAL.FND_FLEX_FNDSQF_DEBUGは、「OFF」、「EXCEPTION」、「FAILURE」、「DEBUG」のいずれかの値を取ります。

フォームを開く前に、「検査」ウィンドウでGLOBAL.FND_FLEX_FNDSQF_DEBUGを設定します。

  1. 「ヘルプ」メニューで、「診断」>「検査」にナビゲートします。

  2. 「ブロック」にGLOBALを入力し、「フィールド」にFND_FLEX_FNDSQF_DEBUGを入力します。[Tab]キーで「値」フィールドに移動します。(「variable doesn't exist」エラーが表示された場合は無視してください。)後述の値のいずれかを入力し、「OK」をクリックします。

次に、GLOBAL.FND_FLEX_FNDSQF_DEBUGの有効な値を示します。

キー・フレックスフィールドの登録

本文の説明内容に関するイメージ

フレックスフィールド組合せ表をデータベースに定義した後と表登録APIによって表を登録した後に、キー・フレックスフィールドを登録します。

重要: Oracle Applicationsによって提供されたキー・フレックスフィールドの登録を変更しないでください。変更すると、重大なアプリケーション・エラーが発生する可能性があります。Oracle Applicationsのキー・フレックスフィールドを有効にするには、「キー・フレックスフィールド・セグメント」ウィンドウで定義および確定します。

重要: Oracle Applicationsキー・フレックスフィールドは、重複するとこれらのフレックスフィールドを呼び出すフォームにエラーが発生する場合があるので、コピーを作成(同一表、同一タイトルまたは同一フレックスフィールド・コードを使用)しないでください。

フレックスフィールドでセグメント・クオリファイアを使用する場合、「参照」ウィンドウを使用してセグメント・タイプにクイックコード値を定義する必要があります。

フレックスフィールドに名前を付け、アプリケーションおよびデータベース表に関連づけます。また、一意ID列として使用する表列と、体系列として使用する表列を指定します。

『Oracle Applicationsフレックスフィールド・ガイド』のキー・フレックスフィールドの定義に関する項を参照してください。

『Oracle Applicationsフレックスフィールド・ガイド』のキー・フレックスフィールドの体系の定義に関する項を参照してください。

『Oracle Applicationsフレックスフィールド・ガイド』の「キー・フレックスフィールド・セグメント」ウィンドウに関する項を参照してください。

表登録API

キー・フレックスフィールド・ブロックの登録

アプリケーション

このアプリケーション名は、「キー・セグメントの定義」ウィンドウ内でフレックスフィールド・セグメントを定義するときに、アプリケーション・インストーラによって確認されます。フォームおよびフレックスフィールド・ルーチンでは、フレックスフィールドを一意に識別するために、アプリケーションおよびフレックスフィールド名の組合せを使用します。フレックスフィールド・ルーチンによってフォームまたはプログラムからキー・フレックスフィールドを呼び出す場合は、このアプリケーション名を使用します。

コード

フォーム・トリガーからキー・フレックスフィールドを呼び出すには、この短い一意のコードを使用します。

タイトル

インストーラは、「キー・セグメントの定義」フォームを使用してユーザーにとってわかりやすいフレックスフィールドのタイトルを変更できます。このタイトルは、フレックスフィールド・ウィンドウ内で該当フレックスフィールドを選択すると必ず表示されます。

表アプリケーション

フレックスフィールド組合せ表を登録したアプリケーションの名前を入力します。

表名

組合せ表の名前を入力します。組合せ表は、データベース内にすでに存在し、適切なフレックスフィールド列が設定されている必要があります。

このフィールドで使用する前に、組合せ表をOracle Applicationsに登録する必要があります。

一意ID列

このフレックスフィールドの一意IDを含む、組合せ表内の列の名前を入力します。このフィールドを参照するその他の表では、この列を外部キーとして使用する必要があります。

体系列

フレックスフィールド体系間でフレックスフィールドを識別するために使用する、組合せ表内の列の名前を入力します。このフィールドに列を入力すると、フォーム内のすべてのフレックスフィールド・コールでNUM=パラメータを使用する必要があります。

動的挿入可能

このキー・フレックスフィールドに対して動的挿入が実行可能かどうかを指定します。動的挿入は、組合せ表に必須の非フレックスフィールド列が含まれない場合のみ、実行可能です。

アプリケーションで新規のセグメント組合せに対して特別な検証が必要な場合には、動的挿入を実行可能にできません。

ID値セットの許可

フレックスフィールド内で非表示IDを使用する値セットを許可するかどうかを指定します。

「詳細」ボタン

変数 説明
クオリファイア このボタンを選択すると、フレックスフィールドおよびセグメント・クオリファイアを定義する「クオリファイア」ウィンドウが開きます。
このボタンを選択すると、フレックスフィールド・セグメントで使用する列を有効化する「列」ウィンドウが開きます。

「クオリファイア」ウィンドウ

本文の説明内容に関するイメージ

フレックスフィールドおよびセグメント・クオリファイアを定義します。フレックスフィールド・クオリファイアはエンド・ユーザーが定義する特定のセグメントに適用され、セグメント・クオリファイアはフレックスフィールド・セグメント内の特定の値に適用されます。フレックスフィールド・クオリファイアは、セグメント・クオリファイアを定義する前に定義する必要があります。

クオリファイア名

キー・フレックスフィールド体系情報を参照するには、この一意の名前を使用します。

プロンプト

キー・セグメント設定時に、このプロンプトによって、キー・フレックスフィールドのクオリファイア情報が要求されます。フレックスフィールド・クオリファイアで「キー・セグメントの定義」フォームのチェック・ボックスを使用するため、「Yes/No」フィールドのプロンプトとして意味をなすようにプロンプトを指定する必要があります。

キー・セグメント設定時に、このプロンプトによってキー・フレックスフィールドのクオリファイア情報が要求されます。フレックスフィールド・クオリファイアで「キー・セグメントの定義」フォームのチェック・ボックスを使用するため、チェック・ボックスのプロンプトとして意味をなすようにプロンプトを指定する必要があります。

グローバル

グローバル・フレックスフィールド・クオリファイアは、すべてのセグメントに適用され、すべてのセグメントにセグメント・クオリファイアのグループを割り当てるための便利な機構を備えています。

必須

必須フレックスフィールド・クオリファイアは、少なくとも1つのセグメントに適用することが必要です。

一意

一意のフレックスフィールド・クオリファイアは、1つのセグメントのみに適用されます。

セグメント・クオリファイア

セグメント・クオリファイアは、エンド・ユーザーが「キー・セグメント値の定義」ウィンドウで定義する特定の値に適用されます。セグメント・クオリファイアには、クイックコード値を指定します。

名前

フレックスフィールド・ルーチン・コールおよびアプリケーション・ロジックでキー・セグメント値の情報を参照するには、この一意の名前を使用します。

プロンプト

キー・セグメント値の定義時に、各セグメント値に関する情報を要求するこのプロンプトが「セグメント値」ウィンドウに表示されます。セグメント・クオリファイアは「セグメント値」ウィンドウでクイックコード値を受け取るので、プロンプトをエンド・ユーザーにとって意味がわかりやすいように指定する必要があります。

導出列

このセグメント・クオリファイアの導出値を格納する組合せ表のデータベース列の名前を入力します。フレックスフィールドでは、エンド・ユーザーが新規の有効な組合せを入力したときに必ずこの列にセグメント・クオリファイアの値を自動で導出します。

クイックコード・タイプ

このセグメント・クオリファイアのスペシャル・クイックコード・タイプを入力します。スペシャル・クイックコード・タイプでは、このセグメント・クオリファイアに許可する値のグループを定義します。たとえば、「会計タイプ」という名前のセグメント・クオリファイアがある場合、複数のコードおよび意味を持つ「ACCOUNT_TYPE」という名前のスペシャル・クイックコード・タイプが必要になります。スペシャル・クイックコードの値は、「スペシャル・クイックコードの定義」フォームで定義します。

デフォルト値

デフォルト値は、「クイックコード・タイプ」フィールドで選択したスペシャル・クイックコード・タイプに対して定義されたスペシャル・クイックコードの値のいずれかを指定する必要があります。

「列」ウィンドウ

本文の説明内容に関するイメージ

キー・フレックスフィールドでセグメント列として使用できる列を指定します。このウィンドウでは、表登録時に登録した大部分の列を自動で問い合せます。最近表に列を追加した場合は、すべての列を表示できるように、表を再登録します。キー・フレックスフィールドの一意ID列または体系列として指定した表列は、表示されません。

フォームSEGMENT1、SEGMENT2、SEGMENT3などの名前の列が表にある場合、これらの列はフレックスフィールドに対して「使用可能」が自動で設定されます。セグメント列に使用するその他すべての列を有効にするには、「使用可能」チェック・ボックスの値を変更する必要があります。

たとえば、キー・フレックスフィールドが複数ある場合、2番目のキー・フレックスフィールドはTAX1、TAX2、TAX3およびTAX4など違うセグメント列名になります。この場合、2番目のキー・フレックスフィールドに対して、TAX1、TAX2、TAX3およびTAX4を使用可能にし、SEGMENT1、SEGMENT2、SEGMENT3などを使用不可にします。

警告: Oracle General Ledgerの会計フレックスフィールド(このキー・フレックスフィールドは大部分のOracle Applications製品で使用されます)を再定義する場合、必ずSEGMENT1からSEGMENT30という名前の列を使用してください。これ以外の名前はOracle Applications製品で使用されているため、これ以外の名前の列を使用すると、要約などのアプリケーション機能に悪影響を及ぼすことがあります。

使用可能

この列をキー・フレックスフィールドのセグメント列として使用するかどうかを指定します。キー・フレックスフィールドのセグメント列として列を有効化するには、同じ表を使用する別のキー・フレックスフィールドに対して、同じ列を有効化しないでください。

付加フレックスフィールドの登録

本文の説明内容に関するイメージ

付加フレックスフィールド列を表に追加し、表を登録した後に、フレックスフィールドを登録します。アプリケーション内でフレックスフィールドを使用する前には、付加フレックスフィールドを登録する必要があります。

このウィンドウを使用して、付加フレックスフィールドに関する情報を入力します。フレックスフィールドに名前を付けて、アプリケーションおよびデータベース表に関連づけます。また、体系列として使用する表列を指定します。

付加フレックスフィールド・ブロックの登録

フォームおよびフレックスフィールド・ルーチンでは、フレックスフィールドを一意に識別するために、アプリケーション名およびフレックスフィールド名の組合せを使用します。

アプリケーション

このアプリケーション名は、「付加セグメントの定義」ウィンドウ内で付加フレックスフィールドを定義するときに、アプリケーション・インストーラによって確認されます。フレックスフィールド・ルーチンによってフォームまたはプログラムから付加フレックスフィールドを呼び出す場合は、このアプリケーション名を使用します。

名前

フレックスフィールド・ルーチンを使用してフォームまたはプログラムから付加フレックスフィールドを呼び出す場合に、この名前を使用します。

タイトル

エンド・ユーザーが付加フレックスフィールドを入力するときに、フレックスフィールドによってこの一意のタイトルがフレックスフィールド・ウィンドウの上部に表示されます。アプリケーション・インストーラは、「付加セグメントの定義」ウィンドウによってこのタイトルを変更できます。

表名

付加フレックスフィールド列を含む表の名前を入力します。表がデータベースにすでに存在し、付加フレックスフィールド・セグメント用の列とともに体系列の列が定義済である必要があります。これらのセグメント列は通常、ATTRIBUTE1、ATTRIBUTE2、...、ATTRIBUTEnと呼ばれます。

このフィールドで使用する前に、表をOracle Applicationsに登録する必要があります。

体系列

フレックスフィールド体系間でフレックスフィールドを識別するために使用する、表内のATTRIBUTE_CATEGORYなどの列名を入力します。付加フレックスフィールドでは、この列を使用し、フォームまたはエンド・ユーザーが入力するデータに基づく様々な付加フレックスフィールド体系をエンド・ユーザーが確認できるようにします。体系列は、1つの付加フレックスフィールド体系のみを使用する場合でも定義する必要があります。

コンテキスト・プロンプト

表示対象の付加フレックスフィールド体系をエンド・ユーザーに要求するデフォルト・コンテキスト・フィールド・プロンプトを入力します。アプリケーション・インストーラが付加フレックスフィールドを定義する内容によって、コンテキスト・フィールドを付加フレックスフィールド・ポップアップ・ウィンドウの一部として表示するかどうかが決まります。インストーラがエンド・ユーザーにデフォルト・コンテキスト・フィールド値の上書きを許可すると、このコンテキスト・フィールド・プロンプトが付加フレックスフィールド・ウィンドウに表示されます。

アプリケーション・インストーラがこれを定義すると、コンテキスト・フィールドがまったく別のフレックスフィールド・セグメントのように表示されます(ここに指定するプロンプトも表示されます)。エンド・ユーザーがコンテキスト・フィールドに値を入力すると、その値に基づいてその他の付加フレックスフィールド・セグメントがポップアップ表示されます。インストーラは、「付加セグメントの定義」ウィンドウによってコンテキスト・フィールド・プロンプトを変更できます。

保護付き

場合によって、インストーラまたはユーザーが誤って変更することのないよう付加フレックスフィールドを作成する必要があります。この種類のフレックスフィールドを保護付加フレックスフィールドと呼びます。保護付加フレックスフィールドは、通常の付加フレックスフィールドと同じ方法で作成します。主な違いは、セグメント体系の定義後に「保護付き」チェック・ボックスを選択することです。付加フレックスフィールドに保護を付けると、「付加フレックスフィールド・セグメント」ウィンドウによって問い合せたり変更したりできなくなります。付加フレックスフィールド・セグメントは、必ず「保護付き」チェック・ボックスの変更より前に定義してください。詳細は、『Oracle Applicationsフレックスフィールド・ガイド』を参照してください。

「詳細」ボタン

変数 説明
参照フィールド このボタンを選択すると、付加フレックスフィールドの可能な値を選択する「参照フィールド」ウィンドウが開きます。
このボタンを選択すると、フレックスフィールド・セグメントの表列を有効化する「列」ウィンドウが開きます。

「参照フィールド」ウィンドウ

本文の説明内容に関するイメージ

このウィンドウを使用して、付加フレックスフィールド参照フィールドとして機能するフォーム・フィールドを指定します。フレックスフィールドでは、これらのフィールドのうち1つのフィールドの値(コンテキスト・フィールド値)を使用して、表示対象のフレックスフィールド体系を決定します。

インストーラは、「付加セグメントの定義」ウィンドウによって、これらのウィンドウ・フィールドのうち1つのウィンドウ・フィールドを使用して、付加フレックスフィールドのコンテキスト・フィールド値を取得できます。

コンテキスト・フィールド値を取得するためには、インストーラが使用する情報を含むすべてのフォーム・フィールドを指定する必要があります。たとえば、アプリケーション・フォーム内の付加フレックスフィールドは、そのフォームのフィールドに指定された国や他のフィールドに指定された名前に基づいて様々な情報を取得するために使用されます。この場合、国フィールドおよび名前フィールドの両方を可能な参照フィールドとして記載する必要があり、インストーラは使用対象の参照フィールドを決定できます。

インストーラは通常、参照フィールドに含まれる各値に対して、様々な付加フレックスフィールド・セグメントの体系を定義します。インストーラは参照フィールドに含まれるすべての値に必ずしも体系を定義するとはかぎりませんし、可能な値が何千もあるフィールドは参照フィールドとして適していません。通常は、国のリストが含まれるフィールドなど、比較的短い、可能な値の静的リストが含まれるフィールドのみを記載します。

参照フィールドとして適しているものには、値リストが定義されています。発注番号フィールドなど一意の値が非常に多く含まれるフィールドを記載しないでください。多くの場合、許容される参照フィールドは、フォームの業務用途によって決定されます。

フレックスフィールドを登録した後に、参照フィールドとして利用する追加のフィールドを指定できます。

重要: この箇所は、Oracle Applicationsの将来のリリースには含まれません。インストーラは、フォームのあらゆるフィールド(フレックスフィールドを含む)を参照フィールドとして使用できるようになります。

フィールド名

フレックスフィールドでコンテキスト・フィールド値を取得するために使用する参照フィールドの名前を入力します。

フィールドのボイラープレート名(フィールド・プロンプト)ではなくて、実際の(非表示の)Oracle Forms名を入力します。ブロック名を指定しないでください。「付加セグメントの定義」ウィンドウでは、付加フレックスフィールド・セグメント定義時にインストーラによって確認されるリストにこのフィールド名を表示します。

このフィールドは、付加フレックスフィールドと同じブロックに存在する必要があります。さらに、付加フレックスフィールドを複数の異なるフォームまたは箇所から呼び出す場合、この付加フレックスフィールドが含まれるすべてのフォーム・ブロックに同じフォームが存在する必要があります。

説明

実際のOracle Formsフィールド名は、フィールド用の定型挿入文プロンプトと一致しない場合が多いので、表示されるフィールド・プロンプトをコンテキスト参照フィールドの説明の一部に入力することをお薦めします。これによって、付加フレックスフィールド用の参照フィールドとして定義するフィールドをインストーラが容易に判別できます。

「列」ウィンドウ

本文の説明内容に関するイメージ

このウィンドウを使用して、付加フレックスフィールドがセグメント列として使用できる列を指定します。このブロックにナビゲートすると、このウィンドウによって、表の登録時に登録した大部分の列の問合せが自動で実行されます。

最近表に列を追加した場合は、この箇所にすべての列を表示できるように、表を再登録します。このウィンドウには、付加フレックスフィールドの体系列として指定した表列が表示されません。

名前がATTRIBUTE1、ATTRIBUTE2、ATTRIBUTE3などの列が表に含まれる場合、これらの列は自動で「使用可能」になります。フレックスフィールド・セグメントのその他の列を使用するには、明示的に使用可能にする必要があります。

たとえば、付加フレックスフィールドが複数ある場合、2番目の付加フレックスフィールドは、TAX1、TAX2、TAX3およびTAX4など違うセグメント列名の保護付き付加フレックスフィールドです。この場合、保護付き付加フレックスフィールドに対して、TAX1、TAX2、TAX3およびTAX4を使用可能にし、ATTRIBUTE1、ATTRIBUTE2、ATTRIBUTE3などを使用不可にします。

使用可能

この列を付加フレックスフィールドのセグメント列として使用するかどうかを指定します。付加フレックスフィールドのセグメント列として列を使用可能にするには、同じ表を使用する別の付加フレックスフィールドに対して、同じ列を使用可能にしないでください。

ここで使用可能にする列は、インストーラが「付加セグメントの定義」ウィンドウによってセグメントを定義するときに表示されます。