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フレックスフィールド・ガイド』
キー・フレックスフィールドを実装するには、次の項目を実行する必要があります。
データベースでのキー・フレックスフィールド列の定義
Oracle Application Object Libraryへの表の登録
Oracle Application Object Libraryへのキー・フレックスフィールドの登録
フォームでのキー・フレックスフィールド・フィールドの作成
フォームへのキー・フレックスフィールド・ルーチンの追加
キー・フレックスフィールドは、次の3種類のフォームに実装可能で、各フォームに別々の方法で実装されます。
組合せフォーム - 組合せフォームの目的は、コードの組合せを作成および保守することのみです。組合せ表(またはそのビュー)は、このフォームの実表であり、すべてのキー・フレックスフィールド・セグメント列が含まれます。また、組合せ表には一意ID列が含まれています。この種類のフォームは、コード組合せの保守フォームとも呼ばれます。任意のキー・フレックスフィールドに対して、1つの組合せフォームのみを指定します(まったく指定しない場合もあります)。組合せフォームの省略フレックスフィールド入力は、実装できません。
外部キー参照を持つフォーム - フォームの実表(またはビュー)は、実際のフレックスフィールド・セグメント列を含む組合せ表への外部キー参照で構成されます。フォームを使用して組合せIDを含む行を操作する場合は、外部キー参照を持つフォームを作成します。外部キー・フォームの主な目的は、キー・フレックスフィールドとなるフィールドがあるという事実とは通常無関係です。つまり、フォームの目的は、どのような業務機能(注文の入力、部品の受取りなど)であっても必要ならば実行することです。任意のキー・フレックスフィールドを使用する外部キー・フォームは、複数存在する場合があります。外部キー参照を持つフォームにのみ、省略フレックスフィールド入力を実装するように選択できます。
キー・フレックスフィールド範囲を持つフォーム - 実表は、各キー・フレックスフィールド・セグメントに2つの列が含まれる特別な組合せ表であり、キー・フレックスフィールドの各セグメントの最大および最小の値を両方サポートします。この種類のフォームはあまり多く見られません。
様々なアプリケーションに対して、キー・フレックスフィールドを保守するために1つの組合せフォームを使用することがあります。この場合、キー・フレックスフィールドはアプリケーション内のエンティティを表します。また、同じキー・フレックスフィールドへの外部キー参照を持つフォームを1つ以上使用することもあります。たとえば、注文入力/在庫アプリケーションでは、新規の部品を部品番号用キー・フレックスフィールドで指定するために組合せフォームを使用します。さらに、注文を構成する部品を示すキー・フレックスフィールドによって、部品の注文を入力するための外部キー参照を持つフォームを使用します。
この他に、キー・フレックスフィールド範囲を持つフォームを設定して、部品番号の範囲を操作できます。このフレックスフィールド・フォームは、組合せフォームと外部キー・フォームの両方と同じキー・フレックスフィールドを参照しますが、セグメント値の範囲(各セグメントの最小値と最大値)は、範囲フォームの実表として機能する範囲フレックスフィールド表に保存されます。
各キー・セグメントに対して1つの値ではなくて最大値と最小値を設定するためにアプリケーションに追加する特別な種類のキー・フレックスフィールドです。通常、キー・フレックスフィールド範囲は、フォーム上で横に並ぶ2つのフレックスフィールドとして表示されます。左側のフレックスフィールドが範囲の最小値で、右側のフレックスフィールドが最大値です。
Oracle Application Object Libraryでは、キー・フレックスフィールド範囲を使用して、有効な組合せの相互検証ルールを指定できます。
アプリケーションに設計した各キー・フレックスフィールドに対して、エンド・ユーザーの入力するフレックスフィールドの組合せを保存するために、組合せ表を作成する必要があります。エンド・ユーザーが有効な組合せ(組合せフォーム)を定義できるようにするために特別なフォームを作成するか、または、Oracle Application Object Libraryによって、エンド・ユーザーが最初に使用するときに組合せ表が動的に作成されるようにします(外部キー参照を持つフォームから作成)。組合せ表を保守する組合せフォームを作成しない場合でも、組合せ表は作成する必要があります。Oracle Applicationsの提供するキー・フレックスフィールドには、あらかじめ組合せ表が定義されています。
キー・フレックスフィールド用の組合せ表に加えて、外部キー参照を持つフォームとキー・フレックスフィールド範囲を持つフォームのために1つ以上の表を作成する必要があります。
キー・フレックスフィールドでは、1つの組合せ表に最大70のセグメント列をサポートしています。たとえば、組合せ表には、キー・フレックスフィールドでそれぞれの有効な組合せに指定した一意のID用の列を作成します。また、エンド・ユーザーが複数の体系を定義する場合には、体系定義列も追加します。アプリケーションでセグメント・クオリファイアを使用する場合は、定義対象の各セグメント・クオリファイアに対して表に導出列を追加する必要があります。
アプリケーション・エンティティ用のキー・フレックスフィールド組合せ表を作成するには、次の作業を実行します。
データベース表で一意に行を識別するためのID列を定義します(型NUMBER、長さ38、非NULL)。この列の名前は、XXX_ID(XXXはエンティティの名前、PART_IDなど)にする必要があります。この列には、セグメント値の特定の組合せ(コード組合せとも呼ばれる)に対する一意のID番号が格納されます。一意のID番号は、コード組合せIDまたはCCIDとも呼ばれます。この列はNUMBER(38)の列ですが、Oracle Application Object Libraryではコード組合せIDを20億までしかサポートしていません。
SEGMENT1からSEGMENTn までの各キー・セグメント用の列を定義します。n は、キー・フレックスフィールド(型VARCHAR2、長さ1から60、列はすべて同じ長さ、NULL許可)に必要なセグメント数です。セグメント数は、経験則として、エンド・ユーザーが単一キー・フレックスフィールド体系に対して要求すると考えられるセグメント列の約2倍作成する必要があります。Oracle Application Object Libraryが組合せ表でサポートしているキー・フレックスフィールド・セグメント列の最大数は、70です。ただし、外部キー参照を持つフォームとともに使用する組合せ表の場合、連結セグメントの値とセグメント・セパレータを格納するフィールドの最大サイズによって、セグメント数も限定されます。このフィールドは、通常2000文字であり、40のセグメントと40のセパレータがある場合、各セグメントの平均幅は約49文字のみです。必要になるセグメント列よりも多く設定しても、領域要件や性能に著しい影響を及ぼすことはありません。フレックスフィールドを登録した後でフレックスフィールド組合せ表にセグメント列を追加することはできないので、将来必要になる数を考慮に入れ、組合せ表には最初から、少なくともいくつかの追加セグメント列を設定しておく必要があります。
SUMMARY_FLAGおよびENABLED_FLAGの定義(型VARCHAR2、長さ1、非NULL)
START_DATE_ACTIVEおよびEND_DATE_ACTIVEの定義(型DATE、NULL)
複数の体系を実現するに体系定義列(体系ID列)を定義します(型NUMBER、長さ38、非NULL)。この列の名前は、XXX_STRUCTURE_ID(XXXは、エンティティの名前、PART_STRUCTURE_IDなど)にする必要があります。この列はオプションですが、できるかぎり設定してください。
一意ID列に一意の索引を定義します。
組合せ表と同じ権限およびシノニムを持つ列のために、ORACLE順序を作成します(挿入権限に対して)。順序の名前をYOUR_TABLE_NAME_Sにします。
WHO列であるLAST_UPDATE_DATE(型DATE、非NULL)およびLAST_UPDATED_BY(型NUMBER、長さ15、非NULL)を定義します。その他すべてのWHO列では、NULLが許可されています。
アプリケーションで、外部キー参照を持つフォームから有効な新規組合せの動的挿入を許可する場合は、必須のアプリケーション固有列を組合せ表に指定しないでください。組合せ表には、一意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)に追加して、エンド・ユーザーが必要な拡張領域を使用できるようにします。付加フレックスフィールドは状況依存型にできるため、アプリケーションで保存する情報が「顧客」フォームに入力した値によって異なる場合にも有効に活用できます。
付加フレックスフィールドを実装するには、次の項目を実行する必要があります。
データベースでの付加フレックスフィールド列の定義
Oracle Application Object Libraryへの表の登録
Oracle Application Object Libraryへの付加フレックスフィールドの登録
フォームでの付加フレックスフィールド・フィールドの作成
フォームへの付加フレックスフィールド・ルーチンの追加
参照フィールドは、付加フレックスフィールドがコンテキスト・フィールド値を取得するフィールドです(オプションですが、設定することを推奨します)。参照フィールドは、体系定義フィールド(通常はATTRIBUTE_CATEGORY)と異なるフィールドにする必要があります。多くの場合、フォーム内の大部分の既存(非フレックスフィールド)フィールドも参照フィールドとして機能します。通常、参照フィールドとして適切なフィールドは、可能な値の完全に静的な短いリストが格納されるフィールドです。「付加フレックスフィールドの登録」フォームに付加フレックスフィールドを登録するときに、フィールドを参照フィールドとして指定します。エンド・ユーザーは、フレックスフィールドの設定時に参照フィールドの使用有無を選択できます。
たとえば、小売アプリケーションで顧客エンティティの記録を取る場合を考えます。通常、「顧客」フォームは、「名前」、「住所」、「州」、「性別」、「顧客番号」などのフィールドで構成されます。エンド・ユーザーは、「州」フィールドにユーザーが入力した値によって変わる状況依存型の付加フレックスフィールドを設定できます(たとえばコロラド州なら顧客のスキーウェアの好みについて記録し、フロリダ州なら暖かい気候向けの衣服の好みについて記録できます)。あるいは、「性別」フィールドにユーザーが入力した値によって変わる状況依存型の付加フレックスフィールドを設定できます(たとえば女性の顧客には女性の標準サイズに応じてサイズの選択を記録し、男性の顧客には男性の標準サイズに応じてサイズの選択を記録できます)。「付加フレックスフィールドの登録」フォームへの付加フレックスフィールド登録時に「州」フィールドと「性別」フィールドの両方を参照フィールドとして指定することによって、エンド・ユーザーはフレックスフィールドの設定方法のいずれかを選択できます。
ヒント: 付加フレックスフィールドでは、参照フィールドとしてフォーム・フィールドを1つのみ使用できます。1つのフォーム・フィールドに複数のフィールドの値を連結し、この連結フォーム・フィールドを参照フィールドとして使用することによって、複数フィールドに基づく付加フレックスフィールドにコンテキスト・フィールド値を導出します。
アプリケーションに柔軟性を持たせるには、すべてのエンティティ表に付加フレックスフィールド列を追加する必要があります。
Oracle Application Object Libraryでは、「_SRS_」という文字列を含む表名が標準要求発行機能用に予約されているので、この文字列を含む名前を付加フレックスフィールド表に付けないでください。
付加フレックスフィールド列をデータベース表に追加するには、次の項目を実行します。
ATTRIBUTE1からATTRIBUTEn までの各付加セグメントに列を定義します(型VARCHAR2、長さ1から150、列はすべて同じ長さ、NULL許可)。
体系定義列(コンテキスト列)を定義して、付加フレックスフィールド体系を特定します(型VARCHAR2、長さ30、NULL許可)。この列には自由に名前を付けることができますが、ATTRIBUTE_CATEGORYと名前を付けることをお薦めします。
フレックスフィールドに後から追加セグメント列を設定することはできないので、付加フレックスフィールド用に将来使用する分を含む十分なセグメントを最初に設定しておく必要があります。
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トリガーから呼び出し、キー、範囲または付加フレックスフィールドを定義します。
キー・フレックスフィールドを定義するには、プロシージャFND_KEY_FLEX.DEFINEを使用します。
範囲またはタイプ・フレックスフィールドを定義するには、プロシージャFND_RANGE_FLEX.DEFINEを使用します。
付加フレックスフィールドを定義するには、プロシージャFND_DESCR_FLEX.DEFINEを使用します。
これらのプロシージャを呼び出すときには、次の3種類の引数を指定します。
フレックスフィールド(連結済の値フィールド、IDフィールド(存在する場合)、付加または関連フィールドなどのブロックおよびフィールド)の場所
対象となる登録済の特定フレックスフィールド(アプリケーション、フレックスフィールド、必要に応じて体系)
追加の引数(もしあれば)
複数のフレックスフィールドがある場合、同一の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文によって、フレックスフィールドの体系識別番号を取得します。 ここで、flexfield codeは、フレックスフィールドの登録時に指定するコードです。 NUMのデフォルト値は101です。 |
DESC_FLEX_ NAME | 付加フレックスフィールド専用。付加フレックスフィールドを識別する登録済の名前。 |
特定のオプション引数を指定しないと、フレックスフィールド・ルーチンではその引数の通常のデフォルト値が使用されます。
体系 | セット | セットの説明 |
---|---|---|
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つのトリガーが下位レベルのトリガーによって上書きされていないことを確認する必要があります。
KEY-EDIT
KEY-LISTVAL
フレックスフィールド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を設定します。
「ヘルプ」メニューで、「診断」>「検査」にナビゲートします。
「ブロック」にGLOBALを入力し、「フィールド」にFND_FLEX_FNDSQF_DEBUGを入力します。[Tab]キーで「値」フィールドに移動します。(「variable doesn't exist」エラーが表示された場合は無視してください。)後述の値のいずれかを入力し、「OK」をクリックします。
次に、GLOBAL.FND_FLEX_FNDSQF_DEBUGの有効な値を示します。
OFF - デフォルト値。デバッガが無効になります。デバッグ・メッセージが表示されません。
EXCEPTION - 例外デバッグ・メッセージのみ表示されます。これらのメッセージは、コードのEXCEPTION WHEN OTHERS THEN部に記述されます。フレックスフィールドでは、これらの例外も表示されます。つまり、これらの例外はフレックスフィールド・コードでは処理できません。
FAILURE - 障害および例外デバッグ・メッセージが表示されます。通常、これらのメッセージは、コードのIF (NOT FORM_SUCCESS) THEN部に記述されます。
DEBUG - すべてのデバッグ・メッセージが表示されます。
フレックスフィールド組合せ表をデータベースに定義した後と表登録APIによって表を登録した後に、キー・フレックスフィールドを登録します。
重要: Oracle Applicationsによって提供されたキー・フレックスフィールドの登録を変更しないでください。変更すると、重大なアプリケーション・エラーが発生する可能性があります。Oracle Applicationsのキー・フレックスフィールドを有効にするには、「キー・フレックスフィールド・セグメント」ウィンドウで定義および確定します。
重要: Oracle Applicationsキー・フレックスフィールドは、重複するとこれらのフレックスフィールドを呼び出すフォームにエラーが発生する場合があるので、コピーを作成(同一表、同一タイトルまたは同一フレックスフィールド・コードを使用)しないでください。
フレックスフィールドでセグメント・クオリファイアを使用する場合、「参照」ウィンドウを使用してセグメント・タイプにクイックコード値を定義する必要があります。
フレックスフィールドに名前を付け、アプリケーションおよびデータベース表に関連づけます。また、一意ID列として使用する表列と、体系列として使用する表列を指定します。
『Oracle Applicationsフレックスフィールド・ガイド』のキー・フレックスフィールドの定義に関する項を参照してください。
『Oracle Applicationsフレックスフィールド・ガイド』のキー・フレックスフィールドの体系の定義に関する項を参照してください。
『Oracle Applicationsフレックスフィールド・ガイド』の「キー・フレックスフィールド・セグメント」ウィンドウに関する項を参照してください。
このアプリケーション名は、「キー・セグメントの定義」ウィンドウ内でフレックスフィールド・セグメントを定義するときに、アプリケーション・インストーラによって確認されます。フォームおよびフレックスフィールド・ルーチンでは、フレックスフィールドを一意に識別するために、アプリケーションおよびフレックスフィールド名の組合せを使用します。フレックスフィールド・ルーチンによってフォームまたはプログラムからキー・フレックスフィールドを呼び出す場合は、このアプリケーション名を使用します。
フォーム・トリガーからキー・フレックスフィールドを呼び出すには、この短い一意のコードを使用します。
インストーラは、「キー・セグメントの定義」フォームを使用してユーザーにとってわかりやすいフレックスフィールドのタイトルを変更できます。このタイトルは、フレックスフィールド・ウィンドウ内で該当フレックスフィールドを選択すると必ず表示されます。
フレックスフィールド組合せ表を登録したアプリケーションの名前を入力します。
組合せ表の名前を入力します。組合せ表は、データベース内にすでに存在し、適切なフレックスフィールド列が設定されている必要があります。
このフィールドで使用する前に、組合せ表をOracle Applicationsに登録する必要があります。
このフレックスフィールドの一意IDを含む、組合せ表内の列の名前を入力します。このフィールドを参照するその他の表では、この列を外部キーとして使用する必要があります。
フレックスフィールド体系間でフレックスフィールドを識別するために使用する、組合せ表内の列の名前を入力します。このフィールドに列を入力すると、フォーム内のすべてのフレックスフィールド・コールでNUM=パラメータを使用する必要があります。
このキー・フレックスフィールドに対して動的挿入が実行可能かどうかを指定します。動的挿入は、組合せ表に必須の非フレックスフィールド列が含まれない場合のみ、実行可能です。
アプリケーションで新規のセグメント組合せに対して特別な検証が必要な場合には、動的挿入を実行可能にできません。
フレックスフィールド内で非表示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などを使用不可にします。
この列を付加フレックスフィールドのセグメント列として使用するかどうかを指定します。付加フレックスフィールドのセグメント列として列を使用可能にするには、同じ表を使用する別の付加フレックスフィールドに対して、同じ列を使用可能にしないでください。
ここで使用可能にする列は、インストーラが「付加セグメントの定義」ウィンドウによってセグメントを定義するときに表示されます。