2016-07-07 1 views
0

В настоящее время я работаю над чем-то, что связано с итерацией через Sales Order и Sales Order Products с помощью триггера на объекте Order Order. Я создал класс Apex, который вызывается из заказа клиента после триггера обновления. Триггер передает строку (идентификатор заказа клиента) статическому методу класса. Этот метод будущего вызова запрашивает продукты заказа клиента, которые принадлежат идентификатору заказа клиента, и делает вызов веб-службы для каждого элемента в коллекции. Все это отлично работает, однако я хотел бы, чтобы этот процесс был более надежным и обрабатывал ошибки более разумно. То, что я хотел бы сделать, это прервать весь процесс, когда метод встречает что-то, что ему не нравится, скажем, он идентифицирует продукт в том порядке, который ему не нравится в качестве примера. Единственный процесс, который я нашел, который может обрабатывать прерывание, - через интерфейс Queueable Interface и вызов класса через System.enqueueJob(). Это, однако, не помогает мне, поскольку я не могу, чтобы жизнь меня определяла способ передать какие-либо параметры этому классу при вызове System.enqueueJob(), поскольку методы класса статичны, а интерфейс заставляет процесс запускать из метод execute(), который принимает только параметр Context. Я иду по неверному пути? Единственная другая возможность, о которой я думал, заключалась в том, чтобы просто создавать методы для всех подпроцессов в моем классе и возвращаться от них, если они сталкиваются с любыми ошибками и устанавливают флаг bool, который может быть использован для пропуска процессов после этого класса. Извините, если это не имеет смысла, если да, дайте мне знать, и я постараюсь предоставить дополнительную информацию.Отмена асинхронной вершины (будущего вызова) от триггера? Решение для интерфейса Queuable?

ответ

0

Вы можете передать параметры в задание Queueable в конструкторе. т.е .:

System.enqueueJob(new myQueueableClass(salesOrderId)); 

Вам нужно добавить конструктор в классе Queueable, который будет принимать в отдел продаж для заказа Id и хранить его в закрытой переменной также объявлена ​​внутри класса Queueable, которые затем могут быть доступны с помощью метода execute().

Смежные вопросы