无法使用get </string,>返回Salesforce MAP <string,object =“”>

时间:2013-08-23 14:15:49

标签: maps salesforce

我有这段代码:

Map<String, Account> Map_Account = new Map<String,Account>( [SELECT Name,Id
                                                            FROM Account 
                                                            WHERE name = 'Any Company Name']);

System.debug('------Task Map List------' + Map_Task_Frequency);
System.debug('*****Task Map*****' + Map_Task_Frequency.get('Any Company Name'));

在Workbench中,我得到以下结果,我在Salesforce编码时也会遇到这些结果:

DEBUG|------Task Map List------{001g0000005PCWbAAO=Account:{Name=Any Company Name,
DEBUG|*****Task Map*****null

有人可以告诉我为什么当我在Map中传递字符串值时它会返回Null,即使Map中有明显的帐号吗?

非常感谢帮助!

由于

2 个答案:

答案 0 :(得分:1)

问题是你的地图的密钥是Id,不是String,你可以从第一个调试消息中看到它。

答案 1 :(得分:0)

不幸的是,对于您的用例,Pavel所描述的完全正确 http://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_collections_maps_from_SObjects.htm

让你的代码以你想要的方式工作,必须重写

Map<String, Account> Map_Task_Frequency = new Map<String,Account>();
for(Account a:  [SELECT Name,Id
                        FROM Account 
                        WHERE name = 'Any Company Name'] ){
  Map_Task_Frequency.put(a.Name, a);
}

System.debug('------Task Map List------' + Map_Task_Frequency);
System.debug('*****Task Map*****' + Map_Task_Frequency.get('Any Company Name'));

这没有多大意义,因为您将按名称引用您的帐户记录并且这是在您的WHERE条件下,因此您最终只会在地图上包含一个包含最后一个帐户的值。