当前位置: 首页 > 知识库问答 >
问题:

Salesforce Apex-从SOQL查询填充对象

濮阳和泰
2023-03-14

我有一个简单的SOQL查询,它返回与联系人和活动成员相关的信息。我试图用SOQL查询的结果填充一个自定义对象。但是,在加载Visualforce页面时,我遇到以下错误:

无效的字段活动。活动成员名称

List campaignMembers = [select campaign.name, contact.id,contact.firstname, contact.lastname, status, campaignId from CampaignMember where contactId = '003U000000U0eNq' and  campaignId in :campaigns];

for (Integer i = 0; i < campaignMembers.size(); i++) {
    results.add(new CampaignMemberResult(
        (String)campaignMembers[i].get('CampaignId'), 
        (String)campaignMembers[i].get('campaign.name'),
        true
    ));
}

我已经在开发人员控制台中单独运行了SOQL查询,它成功地进行了查询。为什么我不能参加竞选呢。for循环中SOQL查询的名称?

共有1个答案

云文栋
2023-03-14

您看到的错误是由于您应该将其编写为活动成员[i]。运动名称。或者,如果您坚持getter语法,campaignMembers[i]。getSobject(“活动”)。获取('Name')

是否有任何特殊原因需要包装器对象(或任何活动成员结果)?我有一种奇怪的感觉,您编写的代码太多,无法实现简单的功能;)与campaignMembers[i]的语法。运动名称也意味着不必对字符串使用强制转换。

此外,如果您需要知道“此联系人在哪些活动中发生”,您有两种方法:

平的

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中直接使用“flat”结果(无活动成员结果):

顶点:

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页面,显示所有活动的列表,每个活动旁边都有一个复选框,指示联系人是否为成员。

你知道它能很快长成一张很长的桌子吗?可能会对活动进行一些筛选(如果您想阅读一些高级内容,请查看文档中的“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));
}

你应该已经准备好了;)如果只是为了显示——你甚至可能不需要包装类(也许是Visual alforce表达式中的一些技巧,或者使用Map

1000条记录是传递给Visualforce的集合限制(如果您的页面为只读,则为10K)。除此之外-分页,很可能与上述StandardSetController一起使用。

 类似资料:
  • 我看到了许多类似问题的答案,人们说为了获得组合框中加载的项目的值,需要使用 但这种东西不起作用…… 这是我所拥有的…… 我从表中选择了Code1和Code2,我希望能够显示Code1,当被选中时,我希望能有Code2的值,但对于displayMember和ValueMember,我看不到任何结果。 编辑:这是我的所有代码: 暗淡的行=dt. Load(com. Ex 错误提示:表达式不产生值 编辑

  • 我正在查询Sql Server并返回一个List-我想使用此List作为我的组合框的源。下面是我正在使用的代码,它运行时没有错误,但我的组合框始终为空并且从不填充。这里有什么不正确的? 主要的Java语言 样品fxml

  • 问题内容: 我有要查询的模型(称为“活动”)(使用Mongoose)。他们的架构如下所示: 当我询问他们,我填充,,,和字段(所有引用)。在那之后,我也深入了这个领域。这是我的查询代码: 这已经是一个相对复杂的查询,但是我需要做更多。如果它碰到了声明的一部分,我 还 需要确保的字段等于字符串。我尝试使用,但是由于必须先填充事件,因此无法查询其任何字段。我还需要在其他多个查询中实现相同的目标。 如我

  • 问题内容: 一般而言,我对Mongoose和MongoDB还是很陌生,所以我很难确定是否可以进行以下操作: 有更好的方法吗? 编辑 如有任何混淆,我们深表歉意。我想做的是获取所有包含有趣标签或政治标签的商品。 编辑 没有where子句的文档: 使用where子句,我得到一个空数组。 问题答案: 对于大于3.2的现代MongoDB,您可以在大多数情况下用作替代。这也有实际上做加盟,而不是什么“在服务

  • 问题内容: 这应该是程序员经常遇到的问题,但是我从来没有尝试过用这种方式来解决问题。 也就是说,我会解释。说,我需要像这样从表Zoo获取值: 现在,我可以将所有值都添加到列表中。我需要在网格中显示该查询的详细信息。现在已经有了z.predator和z.prey值(它们是时间上的整数,即它们各自的ID),我需要填充其有意义的值以将其显示给最终用户(我不能仅仅显示其ID)。所以现在我可能会做这样的事情

  • 我想用本机查询的结果填充数据传输对象类。但我收到以下错误: 这是我的DTO课 这是我的原生查询。这是一个简单的查询: 我使用的是Spring Data JPA,但我知道在hibernate中存在一个方法setResultTransformer,但我在JPA中找不到类似的方法。 在我的例子中,我需要使用本机查询,因为在其他查询中会使用表值函数。