1

最初のコントローラー拡張機能を作成しようとしていますが、エラーが発生しています:

エラー: コンパイル エラー: フィールド式の最初の用語は具体的な SObject である必要があります: 行 26 列 34 の LIST

これはエラーを生成したコードです:

public class CustFinAcctRelatedList{
private households__Household__c RG;

private List<households__HouseholdMember__c> RGMembs;
private List<Account> Accts;
private List<Financial_Account__c> finAccts;

//Get Household Record from VisualForce Page//
public CustFinAcctRelatedList(ApexPages.StandardController controller) {
    this.RG = (households__Household__c)controller.getRecord();
}

public List<Financial_Account__c> getFinAccts()
{
    //Get Household Members (junction object between Account and Household) from Household//
    RGMembs = [
        SELECT id, households__Household__c, households__Account__c
        FROM households__HouseholdMember__c 
        WHERE households__HouseholdMember__c.households__Household__c = :RG.id
    ];

    //Get Accounts from Household Members (junction object between Account and Household)//
    Accts = [
        SELECT id
        FROM Account
        //****THE FOLLOWING LINE IS CAUSING THE ERROR****//
        WHERE Account.id IN :RGMembs.households__Account__c.id
    ];

    //Get Financial Account from Accounts//
    finAccts = [
        SELECT id, name, Client__r.name, Current_Value__c, Account_Type__c
        FROM Financial_Account__c
        WHERE Financial_Account__c.Client__c IN :Accts.id
    ];

    return finAccts;
}
}

このエラーが生成される理由は何ですか?

返されたデータを使用して、Visualforce ページにカスタム関連リストを作成します。

ありがとう!

4

1 に答える 1

1

RGMembsこの時点ではリストなので、次のようなインデクサーを使用する必要がありますRGMembs[0].households__Account__c.id

LIMIT 1クエリの結果としてオブジェクトを割り当てるため、クエリで構文を使用することもできます。ただし、これには注意してください。クエリが 0 行を返すと、例外がスローされます。

また、RGMembs クエリで を選択する必要があります。households__Acount__c.idそうしないと、Accts クエリでクエリされていないフィールドを参照しようとしたときに問題が発生します。

クエリも確認finAcctsすると、前のクエリで発生したのと同じ具体的な SObject エラーが発生します。これを修正するに.idは、IN ステートメントの を削除するだけで、次のようになります。IN :Accts

うまくいけば、それは役に立ちます。

- アップデート -

コードを振り返ってみると、中間のクエリは必要ないと思います。最初のクエリは、世帯のメンバーに属するすべてのアカウントを提供します。次に、この口座のリストを使用して、それらの口座オブジェクトに関連するすべての金融口座を選択できます。私は次のようにそれを達成しようとします:

Set<Id> RGMembers = new Set<Id>();

for(households__HouseholdMember__c member :  [SELECT households__Account__c.id FROM households__HouseholdMember__c WHERE households__HouseholdMember__c.households__Household__c = :RG.id]){
    RGMembers.add(member.households__Account__c.id);
}

finAccts = [SELECT id, name, Client__r.name, Current_Value__c, Account_Type__c FROM Financial_Account__c WHERE Financial_Account__c.Client__c.id IN :RGMembers];

これはあなたが達成しようとしていることに近いですか?

于 2012-07-03T16:03:51.983 に答える