表示されるエラーは、次のように記述しなければならないという事実が原因ですcampaignMembers[i].Campaign.Name
。または、getter 構文に固執する場合は、campaignMembers[i].getSobject('Campaign').get('Name')
.
ラッパー オブジェクト (または何でもCampaignMemberResult
) が必要な特別な理由はありますか? 簡単なことを達成するのにあまりにも多くのコードを書いているような気がします;) 構文はcampaignMembers[i].Campaign.Name
、String へのキャストを使用する必要がないことも意味します。
さらに、「このコンタクトがどのキャンペーンで発生するか」を知る必要がある場合は、次の 2 つの方法があります。
平らな
select contact.id,contact.firstname, contact.lastname,
campaignid, campaign.name,
status
from CampaignMember
where contactId = '003U000000U0eNq'
サブクエリ
連絡先からキャンペーンメンバーの関連リストに移動し、キャンペーンまで名前を取得します
SELECT Id, FirstName, LastName,
(SELECT CampaignId, Campaign.Name FROM CampaignMembers)
FROM Contact WHERE Id = '003U000000U0eNq'
「フラット」結果を visualforce で直接使用する方法の例 ( なしCampaignMemberResult
):
頂点:
public List<CampaignMember> flatMembers {get;set;} // insert dick joke here
flatMembers = [select contact.id,contact.firstname, contact.lastname,
campaignid, campaign.name,
status
from CampaignMember
where contactId = '003U000000U0eNq'];
VF:
<apex:pageBlockTable value="{!flatMembers}" var="cm">
<apex:column value="{!cm.Contact.LastName}" />
<apex:column value="{!cm.Status}" />
<apex:column value="{!cm.Campaign.Name}" />
編集
私の最終的な目標は、連絡先がメンバーであるかどうかを示すチェックボックスが横にあるすべてのキャンペーンのリストを表示する、連絡先レコードに表示される Visualforce ページです。
すぐにかなり長いテーブルに成長する可能性があることをご存知ですか? たぶん、キャンペーンのフィルターです (sth advanced について読みたい場合は、"StandardSetController" のドキュメントを確認してください)。また、キャンペーン レポートから連絡先/リードをキャンペーンに追加する方法がいくつかあると確信しています。
しかし、コード ソリューションは非常に簡単です。ヘルパー ラッパー クラスから始めます。
public class CampaignWrapper{
public Boolean selected {get;set;}
public Campaign c {get; private set;}
public CampaignWrapper(Campaign c){
this.c = c;
selected = !c.CampaignMembers.isEmpty();
}
}
次に、クエリを実行してラッパーのリストを作成します。
List<CampaignWrapper> wrappers = new List<CampaignWrapper>();
for(Campaign c : [SELECT Id, Name, (SELECT Id FROM CampaignMember WHERE ContactId = '...')
FROM Campaign
LIMIT 1000]){
wrappers.add(new CampaignMember(c));
}
あなたはすべて設定されているはずです;)それが表示のためだけの場合-ラッパークラスさえ必要ないかもしれません(おそらくvisualforce式のいくつかのトリックまたは使用Map<Campaign, Boolean>
さえ...
1000 レコードが Visualforce に渡されるコレクションの制限です (ページが読み取り専用の場合は 10K)。それを過ぎると-ページネーション、おそらく上記のStandardSetControllerで使用されます。