В этой статье я расскажу о том как подружить Future методы и объекты в Apex. Сразу оговорюсь, статья будет ультракороткая и без особой магии.
Все мы прекрасно знаем, что во future метод можно передать лишь примитивы и коллекции.
собственно это и написано в документации.
Однако, есть один хитрый способ, который позволяет это сделать (Почему, мистер Андерсон, почему? Во имя чего? Что вы делаете? ).
Первое что нам нужно, это сериализовать наш объект перед вызовом future, полученную строку передаем, как входящий параметр, в вызываемый метод.
Первый шаг сериализуем наш Account в String.
...
Account account = Account(Name = 'Test');
String strAccount = JSON.serialize(account );
...
future(strAccount)
Полученую стрингу во future методе десериализуем из String обратно в Account.
future method(strAccount)
Account account = (Account)JSON.deserialize(strAccount , Account.class);
...
Выводы.
Вот так просто мы можем (мы можем обмануть систему) передавать "объекты" во future.
Одно из оправданий такого поведения, мы можем упереться в лимиты SOQL(мы просто можем так) и чтобы сократить количество запросов мы можем использовать такой подход.