スクリプトでのオブジェクトの表示
ビュー・オブジェクトは、ビジネス・オブジェクト行の問合せおよび操作を簡略化するOracle ADFコンポーネントです。 ビュー・オブジェクトにアクセスするには、アプリケーション・コンポーザの式ビルダーを使用してGroovyスクリプトを記述します。
スクリプト内のビュー・オブジェクトにアクセスするには、オブジェクトAPI名にnewView()関数を使用します。 newView()関数は、カスタムまたは標準ビュー・オブジェクトにアクセスし、そのビジネス・オブジェクトの行にプログラムでアクセスする新しいビュー・オブジェクト・インスタンスを作成します。 たとえば、この新しいビュー・オブジェクト・インスタンスで実行する一般的なタスクは、データを問い合せることです。 これを行うには、ビュー・オブジェクトでfindByKey()関数をコールしてキーによる行を検索します。
ビュー・オブジェクトへのアクセスの詳細は、Groovyスクリプト・リファレンス・ガイドのビジネス・オブジェクトへのプログラム・アクセスのためのビュー・オブジェクトへのアクセスを参照してください。
このトピックには、次の内容が含まれます。
-
newView()関数がスクリプトで役立つ理由を説明します。
-
newView()関数を使用して、式ビルダーからビュー・オブジェクト(カスタムまたは標準)にアクセスする方法について説明します。
-
アプリケーション・コンポーザで提供される標準ビュー・オブジェクトのリストとコード・サンプルを提供します。
-
最適なパフォーマンスを得るためのベスト・プラクティスを提供します。
newView()関数
アプリケーション・コンポーザでGroovyスクリプトを記述する場合、通常は特定のオブジェクトからの特定のレコードのコンテキスト内にあります。 たとえば、単一の行"setAttribute('Name','Acme Widgets Inc.') "でトリガー・スクリプトを記述すると、スクリプトはユーザーの現在のレコードで実行されます。
一方、newView()関数を使用すると、現在のレコードとのコンテキスト関係を必要としないオブジェクトへの新しい参照を作成できます。 たとえば、"def myVO = newView('OpportunityVO') "という行は、スクリプトが問合せして読み取ることができる商談ビュー・オブジェクトのインスタンスを生成し、行を追加、削除または更新します。
ビュー・オブジェクトへのアクセス
ビュー・オブジェクトにアクセスするには、アプリケーション・コンポーザの式ビルダー内からオブジェクトAPI名にnewView()関数を使用します:
-
アプリケーション・コンポーザから式ビルダーにナビゲートします。
アプリケーション・コンポーザで式ビルダーを起動するには、いくつかの方法があります。 たとえば、フィールドの編集時に式ビルダーを起動して必須にします。
-
式ビルダー・パレットの関数タブで、その他カテゴリおよびnewView()関数を選択します。
-
「挿入」をクリックします。
スクリプトでコールできるビュー・オブジェクトをリストするウィンドウが表示されます。
このリストに表示されるオブジェクトは、現在のオブジェクトと関連している必要はありません。
標準ビュー・オブジェクトの例
アプリケーションに付属する標準オブジェクトでは、スクリプトで使用するビュー・オブジェクトが提供されます。 前の項では、これらのビュー・オブジェクトにアクセスする方法について説明します。 この項では、アプリケーション・コンポーザで提供される標準ビュー・オブジェクトの例と、それらをスクリプトで使用する方法について説明します。 通常はスクリプトの対象となる属性も含まれます。
拡張できないためアプリケーション・コンポーザで使用できないオブジェクトについては、クラウド・サービスのSOAP Webサービスのドキュメントを参照して、スクリプト化できる属性のリストを表示します。
標準ビュー・オブジェクト |
説明 |
標準属性 |
---|---|---|
Address |
現在のオブジェクトに住所オブジェクトへのビュー・リンクがない場合、このオブジェクトを使用して、スクリプト内の特定のパーティの住所にアクセスします。 アカウント、担当者または世帯オブジェクトの子として、この住所拡張可能オブジェクトにアクセスします。 |
アプリケーション・コンポーザのAddressオブジェクトを参照し、すべての属性について表示される説明を確認します。 |
CodeAssignment |
このオブジェクトを使用して、現在のオブジェクトにこのオブジェクトへのビュー・リンクがない場合、スクリプト内の特定のパーティに割り当てられた分類にアクセスします。 このオブジェクトには、アカウント・オブジェクトまたは担当者オブジェクトの子としてアクセスします。 |
クラウド・サービスのSOAP Webサービス・ドキュメントの取引先コミュニティ分類コード割当を参照してください。 |
CommonLookup |
スクリプトのアプリケーション共通参照にアクセスします。 |
LookupType、LookupCode、タグ、EnabledFlag、StartDateActive、EndDateActive、内容、説明 |
担当者 |
現在のオブジェクトにこのオブジェクトへのビュー・リンクがない場合、このオブジェクトを使用してスクリプトの顧客担当者情報にアクセスします。 アカウント、担当者または世帯オブジェクトの子として、この顧客担当者プロファイル拡張可能オブジェクトにアクセスします。 |
アプリケーション・コンポーザの顧客担当者プロファイル・オブジェクトを参照し、すべての属性について表示される摘要をレビューします。 |
FndTreeVersion |
スクリプトでこのオブジェクトを使用して、ツリー・バージョンにアクセスします。 顧客階層とパーティ階層はツリーとしてモデル化されます。 |
TreeStructureCode、TreeCode、TreeVersionID、ステータス、EffectiveStartDate、EffectiveEndDate、TreeVersionName |
FndTreeNode |
このオブジェクトを使用して、特定の階層の親子関係を決定します。 特定のバージョンの階層はこのオブジェクトに格納されます。 |
TreeStructureCode, TreeCode, TreeVersionID, TreeNodeID, ParentTreeNodeID, Depth, ChildCount, ParentPk1Value |
FndTreeNodeRf |
このオブジェクトをスクリプトで使用すると、指定した階層バージョンのフラット・バージョンに簡単にアクセスできます。 |
TreeStructureCode、TreeCode、TreeVersionID、TreeNodeID、Pk1Value、AncestorPk1Value、距離、IsLeaf |
事業所 |
このオブジェクトを使用して、物理的なロケーション・フィールドを更新または作成します。 住所は、事業所とパーティの交差です。 市区町村、都道府県、国などの住所フィールドは、その所在地に格納されます。 これらのフィールドは、読取り専用でAddressオブジェクトで使用可能になります。 このオブジェクトは、スクリプト内のロケーション・フィールドへの書込みアクセス権が必要な場合に使用します。 |
クラウド・サービスのSOAP Webサービス・ドキュメントの取引先コミュニティのロケーションSDOを参照してください。 |
OrganizationParty |
スクリプトに組織PartyIDがあり、現在のオブジェクトからアカウント・オブジェクトへのビュー・リンクがない場合、このオブジェクトを使用して、組織パーティおよびそのすべての子を取得します。 |
クラウド・サービスのSOAP Webサービス・ドキュメントの取引先コミュニティ組織詳細を参照してください。 |
OrganizationProfile |
このアカウント拡張可能オブジェクトにOrganizationParty行の子としてアクセスするか、PartyIDがある場合はプロファイルを直接取得します。 |
アプリケーション・コンポーザのアカウント・オブジェクトを参照し、すべての属性について表示される説明を確認します。 |
OriginalSystemReference |
このオブジェクトを使用して、ソース・システムとソース・システムのリファレンス情報に基づいて、指定されたTCAオブジェクトのIDを取得します。 |
クラウド・サービスのSOAP Webサービス・ドキュメントのTrading Community Original System Referenceを参照してください。 |
PersonParty |
スクリプトに個人PartyIDがあり、現在のオブジェクトからアカウント・オブジェクトへのビュー・リンクがない場合、このオブジェクトを使用して個人パーティおよびそのすべての子を取得します。 |
クラウド・サービスのSOAP Webサービス・ドキュメントの取引先コミュニティ個人詳細を参照してください。 |
PersonProfile |
PersonParty行の子としてこの連絡先拡張可能オブジェクトにアクセスするか、PartyIDがある場合はプロファイルを直接取得します。 |
アプリケーション・コンポーザの担当者オブジェクトを参照し、すべての属性について表示される摘要をレビューします。 |
関係 |
現在のオブジェクトにRelationshipIDがあり、そのオブジェクトにこのオブジェクトへのビュー・リンクがない場合、スクリプトでこのオブジェクトを使用します。 アカウント、担当者または世帯オブジェクトの子として、この関係拡張可能オブジェクトにアクセスします。 |
アプリケーション・コンポーザのRelationshipオブジェクトを参照し、すべての属性について提供された説明をレビューします。 |
リソース |
ユーザーまたはリソースPartyIDがあり、現在のオブジェクトIDがこのオブジェクトへのビュー・リンクを公開しない場合、スクリプトでこのリソース拡張可能オブジェクトを使用してリソース・オブジェクトの詳細を取得します。 |
クラウド・サービスのSOAP Webサービス・ドキュメントの取引先コミュニティ・リソース・プロファイルを参照してください。 |
リソースPartyIDの取得の例
この例では、リソース・オブジェクトを指すカスタム動的選択リスト・フィールドに移入します。 動的選択リスト・フィールドがノート詳細ページに表示されます。
Noteオブジェクトで、要件に応じて、After CreateまたはBefore Insertトリガーを作成します:
def partyID = oracle.apps.cdm.foundation.publicModel.common.util.HzSessionUtil.getUserPartyId()
def view_Resource = newView('Resource')
def view_Criteria = newViewCriteria(view_Resource)
def view_criteria_row = view_Criteria.createRow()
def view_condition = view_criteria_row.ensureCriteriaItem('PartyId')
view_condition.setOperator('=')
view_condition.setValue(partyID)
view_Criteria.insertRow(view_criteria_row)
view_Resource.appendViewCriteria(view_Criteria)
view_Resource.setMaxFetchSize(1)
view_Resource.executeQuery()
// Once found get access to the record attributes
def var_record = view_Resource.first()
// Printing the Resource Party Id in Runtime messages
println ("The value for Resource Party Id is "+ var_record.ResourceProfileId)
パフォーマンスの考慮事項
ベスト・プラクティスとして、newView()ファンクションは比較的コストがかかるため、不要なnewViewコールは避けてください。 関数が実行されるたびに、プログラムで使用するために予約されたビュー・オブジェクト・インスタンスが作成されます。 つまり、問合せを明示的にまたは暗黙的に実行し、Groovyスクリプトで使用するビューの行をフェッチする必要があります。
newViewおよびループに関連するいくつかの追加の推奨事項:
-
Groovyの実行中にすべてのスクリプトで作成できる同時ビュー・インスタンスの数には制限があります。 最大値を超えると、アプリケーションが例外をトリガーします。
ループ内でnewViewを無条件にコールすることは避け、最大値を超えることを心配する必要はありません。
-
ループ内のビューを再実行して行の異なるサブセットを取得する必要がある場合は、次の手順を実行します:
-
ループの外部で1回newViewをコールします。
-
ループ内で、適用されたビュー基準を更新し、既存のビューを再実行します。
「ビュー基準を使用したオブジェクトの検索」を参照してください。
-
-
ループ内で同じ結果セットを繰り返し反復する必要がある場合は、各反復の開始時にreset()メソッドをコールして、ビュー・オブジェクトの現在の行を最初の行の前に戻します。
各行に対して同じ属性を繰り返し取得する場合、最初の反復中に各行から値を取得し、マップ・キーとして行のキーを使用してMapオブジェクトに値を格納する方が、より適切な方法です(行のキーを取得するにはgetKey()メソッドを使用します)。
後続の反復では、行のキーを使用してMapオブジェクトから値を取得します。 この方法では、getAttributeメソッドの繰返し呼出しを回避できます。
-
ループ内で条件付きでnewViewをコールする必要がある場合は、「ループ、メソッドおよび文字列を使用するパフォーマンスのベスト・プラクティス」を参照してください。