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

Delete records via SOSL ?!

По мере изучения назревают некоторые вопросы. Так вот один из них:

Возможно ли удалять записи используя SOSL? или только через SOQL?
Вот что набросал:

List<List<SObject>> conList = [FIND 'Joe1 OR Kathy1 OR Caroline1 OR Kim1' IN FirstName FIELDS RETURNING contact];
delete conList;

но при анонимном выполнении пишет ошибку на строчке "delet"

По мере изучения назревают некоторые вопросы. Так вот один из них:

Возможно ли удалять записи используя SOSL? или только через SOQL?
Вот что набросал:
[code]List<List<SObject>> conList = [FIND 'Joe1 OR Kathy1 OR Caroline1 OR Kim1' IN FirstName FIELDS RETURNING contact];
delete conList;[/code]
но при анонимном выполнении пишет ошибку на строчке "delet"
 

List<Account> accounts = new List<Account>();
accounts.add(new Account(Name = 'Qwerty0523-1'));
accounts.add(new Account(Name = 'Qwerty0523-2'));
accounts.add(new Account(Name = 'Qwerty0523-3'));
System.Savepoint sp = Database.setSavepoint();
insert accounts;
List<List<sObject>> listOfListOfSObjects = new List<List<sObject>>();
listOfListOfSObjects.add(accounts);
System.debug(JSON.serializePretty(listOfListOfSObjects));
try {
delete listOfListOfSObjects;
} catch (Exception e) {
Database.rollback(sp);
}

Line: 11, Column: 2
DML requires SObject or SObject list type: List<List<SObject>>

а вот

List<Account> accounts = new List<Account>();
accounts.add(new Account(Name = 'Qwerty0523-1'));
accounts.add(new Account(Name = 'Qwerty0523-2'));
accounts.add(new Account(Name = 'Qwerty0523-3'));
System.Savepoint sp = Database.setSavepoint();
insert accounts;
List<List<sObject>> listOfListOfSObjects = new List<List<sObject>>();
listOfListOfSObjects.add(accounts);
System.debug(JSON.serializePretty(listOfListOfSObjects));
try {
delete listOfListOfSObjects[0];
} catch (Exception e) {
Database.rollback(sp);
}

уже прекрасно работает.

[code]List<Account> accounts = new List<Account>();
accounts.add(new Account(Name = 'Qwerty0523-1'));
accounts.add(new Account(Name = 'Qwerty0523-2'));
accounts.add(new Account(Name = 'Qwerty0523-3'));
System.Savepoint sp = Database.setSavepoint();
insert accounts;
List<List<sObject>> listOfListOfSObjects = new List<List<sObject>>();
listOfListOfSObjects.add(accounts);
System.debug(JSON.serializePretty(listOfListOfSObjects));
try {
    delete listOfListOfSObjects;
} catch (Exception e) {
    Database.rollback(sp);
}[/code]

[quote]Line: 11, Column: 2
DML requires SObject or SObject list type: List<List<SObject>>[/quote]

а вот 

[code]List<Account> accounts = new List<Account>();
accounts.add(new Account(Name = 'Qwerty0523-1'));
accounts.add(new Account(Name = 'Qwerty0523-2'));
accounts.add(new Account(Name = 'Qwerty0523-3'));
System.Savepoint sp = Database.setSavepoint();
insert accounts;
List<List<sObject>> listOfListOfSObjects = new List<List<sObject>>();
listOfListOfSObjects.add(accounts);
System.debug(JSON.serializePretty(listOfListOfSObjects));
try {
    delete listOfListOfSObjects[0];
} catch (Exception e) {
    Database.rollback(sp);
}[/code]

уже прекрасно работает.

Михаил Михальчук
Возможно ли удалять записи используя SOSL? или только через SOQL?

Вопрос некорректный. Удалять ни тем ни тем нельзя. Удалять можно с помощью DML операции delete.
https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_dml_section.htm
И насколько я помню на вход можно передавать один объект или массив объектов.
А вот тут уже приходит к тому что тебе возвращает SOQL и SOSL. И как раз SOSL возвращает ни первое ни второе чтобы напрямую передавать в delete. Просто надо из SOSL получить массив объектов и его удалить. Вот и вся магия.
Странно, не нашел где про это упоминается в официальной документации, но вот простая статья
https://howtodoitinsalesforce.blogspot.com/2016/12/return-type-of-sosl-search-in-salesforce.html
или совсем проще вот тут весь ответ кроется
Andrii Muzychuk
delete listOfListOfSObjects[0];

[quote="Михаил Михальчук"]Возможно ли удалять записи используя SOSL? или только через SOQL?[/quote]
Вопрос некорректный. Удалять ни тем ни тем нельзя. Удалять можно с помощью DML операции [b]delete[/b].
https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_dml_section.htm
И насколько я помню на вход можно передавать один объект или массив объектов. 
А вот тут уже приходит к тому что тебе возвращает SOQL и SOSL. И как раз SOSL возвращает ни первое ни второе чтобы напрямую передавать в delete. Просто надо из SOSL получить массив объектов и его удалить. Вот и вся магия.
Странно, не нашел где про это упоминается в официальной документации, но вот простая статья 
https://howtodoitinsalesforce.blogspot.com/2016/12/return-type-of-sosl-search-in-salesforce.html
или совсем проще вот тут весь ответ кроется
[quote="Andrii Muzychuk"]delete listOfListOfSObjects[color=red][0][/color];[/quote]