Как создать деконструктор (или аналогичный) в APEX, который запускается непосредственно перед уничтожением объекта? - PullRequest
1 голос
/ 10 февраля 2012

Мое приложение имеет много полей агрегирования, которые необходимо обновить при изменении, добавлении или удалении любой связанной записи. Отношения и вычисления в некоторой степени вовлечены, поэтому я создал класс, который обрабатывает все вычисления для всех связанных таблиц. В вычислениях присутствуют некоторые накладные расходы на SOQL и DML, поэтому класс обрабатывает все массово.

Я бы хотел, чтобы метод updateAll () в этом классе выполнялся не более одного раза для каждого запроса ко всем записям, которые были добавлены в его очередь. Но, похоже, в APEX нет «подобной деконструктору» функциональности, которая автоматически вызывалась бы перед уничтожением этого объекта калькулятора.

Как лучше всего реализовать этот шаблон в APEX?

Ответы [ 2 ]

1 голос
/ 12 февраля 2012

Вот что я сделал. Я создал класс Calculator, который пересчитывает каждое связанное агрегатное / вычисляемое поле в ~ 10 таблицах / объектных отношениях. Я использовал триггеры для каждого из этих объектов, чтобы класс калькулятора выполнялся на множестве связанных семейств объектов с объектами, которые были изменены. Я использовал статическую переменную в классе калькулятора, чтобы проверить, работал ли калькулятор в каждом из триггеров, чтобы они вызывали калькулятор только в том случае, если он в данный момент не работает. Это работает достаточно хорошо. Немного неэффективно, но остается за пределами регулятора и работает очень хорошо. И я могу расти вместе с ним ...

1 голос
/ 10 февраля 2012

Да, нет способа обнаружить или предсказать разрушение объекта, так как это, по сути, JSP в фоновом режиме (тссс, они не хотят, чтобы вы знали, это вещь «без программного обеспечения»;) Возможно, они следуют своим механизмам жизни но на это нельзя полагаться.

Мы фактически обрабатываем нашу агрегацию в триггерах или в отчетности (в зависимости от того, нужно ли хранить агрегацию). Триггеры также получают пакеты в виде списка, а не по одной строке, что позволяет объединять пакеты и позволяет нам удовлетворить раздражающего управляющего. К сожалению, если у вас есть агрегаты с несколькими таблицами, вам понадобятся триггеры для всех них и повторный запуск для каждой партии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...