我在Salesforce中创建了一个触发器,我通过soql查询获取结果并将结果存储在地图中,但它显示以下错误:
错误:编译错误:找到的初始化程序类型列表无效 Map:预期具有相同键和值类型的Map,或a 第7行第25列的有效SObject列表
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;
}
}
}
}
请帮助,提前致谢。
答案 0 :(得分:1)
首先,您尝试按Id选择用户,但是当您调用Trigger.NewMap.keySet()时,您将获得一组帐户ID,而不是用户(因为帐户对象上的触发器)。可能,您希望让所有用户都与帐户相关,因此请在&#39;其中&#39;中使用AccountId。条件。另外我还要注意,你没有使用过'用户&#39;获得后变量。
至于从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()]);