代码之家  ›  专栏  ›  技术社区  ›  shriram

如何将soql查询结果放入map<Id,String>

  •  0
  • shriram  · 技术社区  · 7 年前

    错误:编译错误:找到的初始值设定项类型列表无效 映射:应为具有相同键和值类型的映射,或 第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 回复  |  直到 7 年前
        1
  •  1
  •   Hleb    7 年前

    首先,您尝试按Id选择用户,但在调用触发器时。新建地图。keySet(),您将获得一组帐户ID,而不是用户(因为触发器位于帐户对象上)。可能,您希望获得和account相关的所有用户,所以在“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()]);