0

我有这个代码:

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 中传递字符串值时,即使 Map 中显然有一个帐户,它也会返回 Null?

非常感谢您的帮助!

谢谢

4

2 回答 2

1

问题是您的地图的键是 Id,不是字符串,您可以从第一条调试消息中看到它。

于 2013-08-23T14:33:11.083 回答
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 条件下,因此您最终将在地图上只有一个值包含最后加载的帐户。

于 2013-08-23T20:55:37.887 回答