如何将 soql 查询的结果放入 map<Id,String>
How to put result of soql query in map<Id,String>
我在 Salesforce 中创建了一个触发器,我正在通过 soql 查询获取结果并将结果存储在地图中,但它显示以下错误:
Error: Compile Error: Invalid initializer type List found for
Map: expected a Map with the same key and value types, or a
valid SObject List at line 7 column 25
trigger insertUpdateOwnerToSalesRep on Account (after insert, before update) {
if (trigger.IsAfter && trigger.IsUpdate) {
List<User> lstUser =[select id,name from User where Id in:(Trigger.NewMap).keySet()];
//Map<Id,String> ac=new Map<Id,String>([]);
Map<ID, String> m = new Map<ID, String>([select id,name from User where Id in:(Trigger.NewMap).keySet()]);
for(Account ac:Trigger.New) {
System.debug('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\t'+ac.ownerid);
if (ac.owner!=null) {
User user=ac.owner;
System.debug('!!!!!!!!!!!!!!\t'+user);
//ac.Sales_Rep__c=ac.owner.userName;
}
}
}
}
请帮忙,提前致谢。
首先,您尝试通过 ID 访问 select 用户,但是当您调用 Trigger.NewMap.keySet() 时,您将获得一组帐户 ID,而不是用户(因为在帐户对象上触发)。可能,您想获取与帐户相关的所有用户,因此在 'where' 条件下使用 AccountId。另外我想指出的是,您在获取后不使用 'lstUser' 变量。
至于从 select 获取地图,你应该使用 Map<Id, User>
而不是 Map<Id, String>
:
Map<Id, User> m = new Map<Id, User>([SELECT Id, Name FROM User where AccountId in :(Trigger.NewMap).keySet()]);
我在 Salesforce 中创建了一个触发器,我正在通过 soql 查询获取结果并将结果存储在地图中,但它显示以下错误:
Error: Compile Error: Invalid initializer type List found for Map: expected a Map with the same key and value types, or a valid SObject List at line 7 column 25
trigger insertUpdateOwnerToSalesRep on Account (after insert, before update) {
if (trigger.IsAfter && trigger.IsUpdate) {
List<User> lstUser =[select id,name from User where Id in:(Trigger.NewMap).keySet()];
//Map<Id,String> ac=new Map<Id,String>([]);
Map<ID, String> m = new Map<ID, String>([select id,name from User where Id in:(Trigger.NewMap).keySet()]);
for(Account ac:Trigger.New) {
System.debug('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\t'+ac.ownerid);
if (ac.owner!=null) {
User user=ac.owner;
System.debug('!!!!!!!!!!!!!!\t'+user);
//ac.Sales_Rep__c=ac.owner.userName;
}
}
}
}
请帮忙,提前致谢。
首先,您尝试通过 ID 访问 select 用户,但是当您调用 Trigger.NewMap.keySet() 时,您将获得一组帐户 ID,而不是用户(因为在帐户对象上触发)。可能,您想获取与帐户相关的所有用户,因此在 'where' 条件下使用 AccountId。另外我想指出的是,您在获取后不使用 'lstUser' 变量。
至于从 select 获取地图,你应该使用 Map<Id, User>
而不是 Map<Id, String>
:
Map<Id, User> m = new Map<Id, User>([SELECT Id, Name FROM User where AccountId in :(Trigger.NewMap).keySet()]);