Всем привет. Начиная с 47го релиза в Salesforce появился новый стандартный объект ConversationContextEntry. О нем пока очень мало информации в документации. Всё что я смогда найти, это одна строка в документации в описании самого объекта, ну и скудное упоминание о каких-то контекстных записях в Einstein Analytics.
Проблема оказалась следующей: внезапно на проде стало повяляться огромное количество записей этого объекта. Я стала искать, почему это происходит. Оказалось, что в моем случае записи объекта ConversationContextEntry создаются на каждый передаваемый параметр в пречат форме. Т.е. когда кастомер заполняет пречат форму, на каждый заполненный инпут пречат формы создается новая запись ConversationContextEntry. И записи создаются от лица Automation Process.
Первое, что пришло в голову, это создать batch или Schedulable класс.
Батч удалось написать, но при выполнении выдало следующую ошибку: FATAL_ERROR System.QueryException: sObject type 'ConversationContextEntry' is not supported.
Schedulable класс - вообще не удалось даже сохранить - ошибка была: Invalid type: 'ConversationContextEntry'.
Притом, когда я беру SOQL из батча и выполняю либо в Query Editor, либо в Anonymous Window - я получаю нужные записи и могу их удалить или вручную (в Query Editor), или кодом (в Anonymous Window).
Код:
========================
global without sharing class DeleteConversationContextEntriesBatch implements Database.Batchable<sObject> {
global Database.QueryLocator start(Database.BatchableContext BC) {
String query = 'SELECT Id FROM ConversationContextEntry WHERE CreatedDate < LAST_N_DAYS:60';
System.debug('START =' + Database.getQueryLocator(query));
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext BC, List<SObject> scope) {
delete scope;
}
global void finish(Database.BatchableContext BC) {}
}
=========================
global class DeleteConversationContextEntriesScheduled implements Schedulable{
global void execute(SchedulableContext SC) {
List<SObject> records = [select Id FROM ConversationContextEntry WHERE createddate < LAST_N_DAYS:60];
if(!records.isEmpty())
delete records;
}
}
=========================
Есть какие-то мысли на этот счет, как можно реализовать необходимую функциональность с автоматическим удалением? Буду очень благодарна за помощь.
Всем привет. Начиная с 47го релиза в Salesforce появился новый стандартный объект ConversationContextEntry. О нем пока очень мало информации в документации. Всё что я смогда найти, это одна строка в документации в описании самого объекта, ну и скудное упоминание о каких-то контекстных записях в Einstein Analytics. Проблема оказалась следующей: внезапно на проде стало повяляться огромное количество записей этого объекта. Я стала искать, почему это происходит. Оказалось, что в моем случае записи объекта ConversationContextEntry создаются на каждый передаваемый параметр в пречат форме. Т.е. когда кастомер заполняет пречат форму, на каждый заполненный инпут пречат формы создается новая запись ConversationContextEntry. И записи создаются от лица Automation Process. Первое, что пришло в голову, это создать batch или Schedulable класс. Батч удалось написать, но при выполнении выдало следующую ошибку: FATAL_ERROR System.QueryException: sObject type 'ConversationContextEntry' is not supported. Schedulable класс - вообще не удалось даже сохранить - ошибка была: Invalid type: 'ConversationContextEntry'. Притом, когда я беру SOQL из батча и выполняю либо в Query Editor, либо в Anonymous Window - я получаю нужные записи и могу их удалить или вручную (в Query Editor), или кодом (в Anonymous Window). Код: ======================== global without sharing class DeleteConversationContextEntriesBatch implements Database.Batchable<sObject> { global Database.QueryLocator start(Database.BatchableContext BC) { String query = 'SELECT Id FROM ConversationContextEntry WHERE CreatedDate < LAST_N_DAYS:60'; System.debug('START =' + Database.getQueryLocator(query)); return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, List<SObject> scope) { delete scope; } global void finish(Database.BatchableContext BC) {} } ========================= global class DeleteConversationContextEntriesScheduled implements Schedulable{ global void execute(SchedulableContext SC) { List<SObject> records = [select Id FROM ConversationContextEntry WHERE createddate < LAST_N_DAYS:60]; if(!records.isEmpty()) delete records; } } ========================= Есть какие-то мысли на этот счет, как можно реализовать необходимую функциональность с автоматическим удалением? Буду очень благодарна за помощь.
Посмотри api версию своих классов, может она сильно отличается от той в которой появился объект
Посмотри api версию своих классов, может она сильно отличается от той в которой появился объект
Спасибо, Максим! Ты оказался прав!
Там была 46 версия. Файл создавала из IDE, а на версиюв package.xml не обратила внимания. Теперь буду знать.
Спасибо, Максим! Ты оказался прав! Там была 46 версия. Файл создавала из IDE, а на версиюв package.xml не обратила внимания. Теперь буду знать.