Хотите захватить поля, которые обновляются в Salesforce
Я хочу создать общий компонент, который может сохранить имя объекта и имена полей со старыми и новыми значениями в BigObject. Алгоритм грубой силы говорит, что при каждом обновлении каждого объекта, получайте имена API полей, используя описание, и проверяйте старое и новое значение этих полей. Если он модифицируется, вставьте его в новый BigObject. Но это займет много процессорного времени, и я ищу оптимальное решение для этого. Любые предложения приветствуются.
1 ответ
Ну, у вас уже есть какой-нибудь код? Может быть, сравните его, а затем посмотрите, что вы можете оптимизировать, вместо того, чтобы перерабатывать его с самого начала... Сделайте это простым, напишите тестовый набор и затем попытайтесь оптимизировать (не прерывая юнит-тесты).
Пара случайных идей:
Вы будете делать это в триггере? Таким образом, ваше "описание" может произойти только один раз. Вам не нужно описывать каждое отдельное поле, вам нужна только одна операция вне основного цикла триггера.
Set<String> fieldNames = Account.sObjectType.getDescribe().fields.getMap().keyset(); System.debug(fieldNames);
Это даст вам "только" имена полей, но этого достаточно. Тебе все равно, списки пикетов, даты или что-то еще. Используйте это с универсальным
sObject.get('fieldNameHere')
и это хорошее начало.или, может быть, без описания вообще. SObject-х
getPopulatedFieldsAsMap()
даст вам классную карту, которую вы можете легко повторить и сравнить.или же
JSON.serialize
старая и новая версия объекта, и если они не идентичны - вы знаете, что делать. Не знаю, будут ли они всегда сериализоваться с одним и тем же порядком поля, поэтому лучше проверить идентичность карт.вам действительно нужно вручную подобным образом отслеживать историю полей? У вас есть 1M свободного хранилища записей, но оно может легко взорваться в более загруженной SF организации. Особенно, если у вас есть рабочие процессы, процессы, другие триггеры, которые будут переводиться в несколько обновлений (= несколько запусков триггера) в одной транзакции. Возможно, нормальное отслеживание истории полей + отслеживание фида чатов + даже щит сотрудников отдела продаж (я думаю, что оно содержит еще 60 отслеживаемых полей) будет более подходящим для потребностей вашего бизнеса.