Невозможно изменить коллекцию во время итерации. - Класс Apex - PullRequest
0 голосов
/ 02 апреля 2020

Я вызываю апекс-класс из потока. Внутри класса Apex я пытаюсь активировать пользователя. Но я получаю сообщение «Невозможно изменить коллекцию во время итерации».

Вот мой апекс-код:

public class ActivateUsers
{

@InvocableMethod
public static void ActivateUser(List<user> Users)
{
       list<user> userslist= new list<user>();

       for(user u: Users)

       {
          u.isActive=true;
          userslist.add(u);


       }

       update userslist;

     }
 }

Я знаю, в чем проблема, просто не знаю как это решить, учитывая то, что я пытаюсь сделать.

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Проблема в том, что вы добавляете в список пользователей, просматривая список пользователей. L oop никогда бы не закончил sh. Добавляемая вами запись пользователя уже есть в списке. Вам просто нужно обновить текущую запись пользователя, потому что это ссылка на элемент списка.

public class ActivateUsers
{

@InvocableMethod
public static void ActivateUser(List<user> Users)
{
   list<user> userslist= new list<user>();

   for(user u: Users)

   {
      u.isActive=true;
   }

   update userslist;

 }
 }
0 голосов
/ 02 апреля 2020

Я не верю, что вы можете обновить входную коллекцию вызываемого метода. Попробуйте вместо этого передать список идентификаторов и повторно запросить эти идентификаторы в качестве фильтра для создания списка:

public class ActivateUsers
{

    @InvocableMethod
    public static void ActivateUser(List<Id> UserIds)
    {
       List<User> usersList = [SELECT Id, isActive FROM User WHERE Id in :UserIds];

       for(user u: usersList)

       {
          u.isActive=true;

       }

       update usersList;

     }
 }

Затем вы можете просто обновить итеративный список после l oop.

...