Я знаю, что это старый, но для справки для тех, кто занимается серфингом в:
Как намекнул LaceySnr, транзакции не доступны должным образом (по состоянию на 2016 г.) через API. Однако есть два способа достижения результатов, подобных транзакциям, через API.
- путем создания пользовательской конечной точки REST в Apex или
- с использованием заголовка AllOrNone с API.
Конечная точка REST
Чтобы создать пользовательскую конечную точку REST, вы должны создать класс apex, определенный с помощью @RestResource. В этом классе вы бы определили функцию, украшенную @HttpPost, которая принимает список объектов sObject. Внутри функции вы можете установить точку сохранения.
Когда вызывается эта новая конечная точка, при наличии обнаруживаемой ошибки вы можете выполнить откат самостоятельно. В противном случае Salesforce после успешного завершения функции выполнит автоматическую фиксацию. Другими словами, вам не нужно явно фиксировать транзакцию. См. эту документацию для создания конечных точек REST . и developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_transaction_control.htm для управления транзакциями (я не могу опубликовать более 2 ссылок).
пример апекса:
@RestResource(urlMapping='/myendpoint/*')
global with sharing bool class MyFirstRESTController {
@HttpPost
global static boolean doSomething(List<sObject> objectsToUpdate) {
boolean error = false;
Savepoint sp = Database.setSavepoint();
//do something
//oh no! there was an error
if( error ) {
Database.rollback(sp);
}
return error;
}
}
в этом примере, если вы отправили в / services / apexrest / myendpoint / doSomething / со всеми вашими объектами sObject, он должен вызвать эту функцию и предоставить вам некоторый транзакционный контроль (например, преобразовать объекты в JSON и опубликовать их). Вам потребуется использовать заголовок «Authorization: Bearer sessionId » при вызове пользовательской конечной точки REST. ИД сеанса может быть тем же ИД сеанса, который был получен из имени входа SOAP (в случае, если вы используете wdsl для создания службы).
заголовок AllOrNone
Для заголовка AllOrNone см. Документацию для SOAP API . Этот заголовок позволяет указать, что если при обновлении происходит сбой какой-либо отдельной записи, все они терпят неудачу. По сути, в случае сбоя одной записи вся транзакция откатывается.