0

SOQL クエリをページに渡したい、またはユーザが自分でページに SOQL クエリを入力して処理し、結果をテーブルに表示したい。

最大の問題は結果を表示することです。VF 動的バインディングは 1 レベルの深さでしか機能していないように見え、その後 null ポインター例外が発生します (SF のバグのようです)。

クエリから取得した複数の関連リストを含む動的なメイン オブジェクトがあります。たとえば、ユーザーは、関連するすべての取引先責任者とすべての関連する商談を含む取引先のリストを取得している可能性があります。クエリの例を次に示します。

「%Corp%」のような名前のアカウントから、ID、名前、BillingState、(連絡先から ID、名前、タイトルを選択)、(商談から ID、金額を選択) を選択します。

また、次のように、クエリがまったく異なる親オブジェクトにある場合もあります。

select id, name, accountId, (select id, Cost from OpportunityLineItems), (select id, name from Attachments) from Opportunity limit 20

クエリからフィールド名とオブジェクト名を解析することは問題ではありませんが、VF ページのテーブルにそれらの結果を表示するために動的バインディングを使用することは悪夢であり、私にとってはうまくいきません。何か案は?または、この特定の状況の VF コードをどこかで見たことがありますか?

補足として、以下は、動的バインディングを使用しようとしたときに VF ページで発生し続けるエラーです。

エラー: java.lang.NullPointerException
エラー: null

4

1 に答える 1

1

このような状況では、私は常にオブジェクト リレーショナル マッパー パターンに依存するか、単にラッパー クラスと呼ばれます。扱いにくい項目については、SOQL ステートメントの結果から直接取得した項目ではなく、単一レベルのクラスメンバーの抽象化を表示することになります。この利点の 1 つは、SOQL コールを数回実行し、ページを最適にサポートする方法でデータを準備し、スムーズにレンダリングできることです。この抽象化クラスを持つという追加の作業は、最終的には非常にうまくいきます-imo。

Apex でこれを行う方法を正確に示した関連記事を次に示します。あなたの場合、この例を拡張して、複数の SObject の値をこの「ORM スタイル」クラスの 1 つのインスタンスに追加し、Apex 内からそのインスタンスのリストを入力します。このカスタム オブジェクト インスタンスのリストは、Visualforce が使用するのに最適な食材となります。

于 2012-07-17T15:39:47.150 に答える