Salesforce 如何将soql查询结果放入映射<;Id,字符串>;

Salesforce 如何将soql查询结果放入映射<;Id,字符串>;,salesforce,apex,Salesforce,Apex,我在Salesforce中创建了一个触发器,我正在通过soql查询获取结果并将结果存储在映射中,但它显示以下错误: 错误:编译错误:为找到无效的初始值设定项类型列表 映射:应为具有相同键和值类型的映射,或 第7行第25列的有效SObject列表 trigger insertUpdateOwnerToSalesRep on Account(插入后,更新前){ if(trigger.IsAfter&&trigger.IsUpdate){ List lstUser=[选择id,id所在用户的名称:(T

我在Salesforce中创建了一个触发器,我正在通过soql查询获取结果并将结果存储在映射中,但它显示以下错误:

错误:编译错误:为找到无效的初始值设定项类型列表 映射:应为具有相同键和值类型的映射,或 第7行第25列的有效SObject列表

trigger insertUpdateOwnerToSalesRep on Account(插入后,更新前){
if(trigger.IsAfter&&trigger.IsUpdate){
List lstUser=[选择id,id所在用户的名称:(Trigger.NewMap).keySet();
//Map ac=新地图([]);
Map m=新映射([选择id,id所在用户的名称:(Trigger.NewMap).keySet());
对于(帐户ac:Trigger.New){
系统调试('^^^^^^^^^^^^^^^^^^^^^^^^^^^^\t'+ac.ownerid);
if(ac.owner!=null){
用户=ac.owner;
系统调试(“!!!!!!!!!!!!!\t”+用户);
//ac.Sales\u Rep\u c=ac.owner.userName;
}
}
}
}

请提供帮助,提前感谢。

首先,您尝试按Id选择用户,但当您调用Trigger.NewMap.keySet()时,您将获得一组帐户Id,而不是用户(因为触发器位于帐户对象上)。可能,您希望获取与帐户相关的所有用户,所以在“where”条件下使用AccountId。另外,我想指出的是,在获取后不使用'lstUser'变量

至于从select获取地图,您应该使用
Map
而不是
Map

Map m=NewMap([SELECT Id,Name FROM User where AccountId in:(Trigger.NewMap).keySet()]);

谢谢,由于编译时错误已被删除,因此工作正常。
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;
            }
        }
    }
}
Map<Id, User> m = new Map<Id, User>([SELECT Id, Name FROM User where AccountId in :(Trigger.NewMap).keySet()]);