2017-09-22 26 views
0

をSOQLクエリの結果を置くためにどのように私は、Salesforceでトリガーを作成していると私はSOQLクエリによって結果を取得し、マップに結果を格納していますが、それは次のようなエラーが表示さ:マップに<Id,String>

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

ご協力ありがとうございます。

答えて

1

まず、Idでユーザーを選択しようとしますが、Trigger.NewMap.keySet()を呼び出すと、ユーザーではなくアカウントIDのセットが取得されます(アカウントオブジェクトのトリガーなので)。おそらく、あなたはすべてのユーザーをアカウントに関連させたいので、 'where'条件でAccountIdを使用してください。また、私はあなたが取得した後に 'lstUser'変数を使用しないことに注意したいと思います。選択から地図を取得するためとして

、あなたはMap<Id, String>の代わりにMap<Id, User>を使用する必要があります。

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

おかげで、その作業罰金として、コンパイル時エラーが削除されます。 – shriram

関連する問題