Регистрация  |  Вход

Нужно удалять записи объекта ConversationContextEntry старше 2 месяцев

Всем привет. Начиная с 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 не обратила внимания. Теперь буду знать.