如何在map <id,string>中输入soql查询的结果

时间:2017-09-22 13:25:48

标签: salesforce apex

我在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;
            }
        }
    }
}

请帮助,提前致谢。

1 个答案:

答案 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()]);