Управление транзакциями для .NET + Salesforce API - PullRequest
1 голос
/ 21 декабря 2011

У меня есть приложение .NET, которое обновляет базу данных и Salesforce через API. Мне нужно обновить несколько объектов Salesforce.

Код выглядит так

public class Service ....

public void myTransaction(..){
DBConnection dbcon;
SFConnection sfcon;

// DB Begin Transaction

//Update Database tables 
//Update SF Objects 

// DB End Transaction

}

Пожалуйста, помогите мне получить лучшее представление о том, как совершить транзакцию.

1 Ответ

3 голосов
/ 16 апреля 2016

Я знаю, что это старый, но для справки для тех, кто занимается серфингом в:

Как намекнул LaceySnr, транзакции не доступны должным образом (по состоянию на 2016 г.) через API. Однако есть два способа достижения результатов, подобных транзакциям, через API.

  1. путем создания пользовательской конечной точки REST в Apex или
  2. с использованием заголовка 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 . Этот заголовок позволяет указать, что если при обновлении происходит сбой какой-либо отдельной записи, все они терпят неудачу. По сути, в случае сбоя одной записи вся транзакция откатывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...