Loading

Bei Ihnen ist noch ausstehende Arbeit vorhanden. Führen Sie einen Commit- oder Rollback-Vorgang aus, bevor Sie ein Callout erstellen.

Veröffentlichungsdatum: Mar 30, 2020
Beschreibung

Sie müssen möglicherweise einen Datensatz erstellen und ihn dann mit den von einem Webservice bereitgestellten Daten aktualisieren. Ein Webservice-Callout kann jedoch nicht nach einer DML-Anweisung in derselben Transaktion verwendet werden. Um die gewünschte Aktion auszuführen, muss die Transaktion in zwei Teile geteilt werden, sodass die DML-Transaktion vor dem Webservice-Callout abgeschlossen wird.

Lösung

Aufteilen einer Transaktion in zwei separate AJAX-Prozesse

Der erste fügt den Datensatz ein und der zweite führt den Callout aus und kann den neu eingefügten Datensatz aktualisieren.

TestWsCallout-Seite
<apex:page controller="TestWsCallout" tabstyle="Account">     <apex:form >         <apex:actionFunction action="{!InsertRecord}" name="InsertRecord_JS" Rerender="statuses" status="Status1" oncomplete="CallWebService_JS();"/>         <apex:actionFunction action="{!CallWebService}" name="CallWebService_JS" status="Status2" reRender="statuses, msg"/>         <apex:outputPanel id="statuses">             <apex:actionStatus id="Status1" startText="...Inserting Record Into DB..." />             <apex:actionStatus id="Status2" startText="...Calling Web Service..." />         </apex:outputPanel>         <apex:outputPanel id="msg">             <apex:pageMessages />         </apex:outputPanel>         <div><input name="DoAction" class="btn" type="button" value="Do Action" onclick="InsertRecord_JS();return false;"/></div>     </apex:form> </apex:page>

TestWsCallout-Klasse
public class TestWsCallout{          Account myAccount;         public PageReference InsertRecord() {         myAccount = new Account(name = 'Test Account');         insert myAccount;         // Calling a Web Service here would throw an exception         return null;     }          public PageReference CallWebService() {                  // Execute a call to a Web Service         HttpRequest req = new HttpRequest();         req.setEndpoint('http://MyWebService12345678790.com?id=' + myAccount.Id);         req.setMethod('GET');         HttpResponse response = new Http().send(req);                  // Simulate an update         myAccount.Name = 'Test Account 2';         update myAccount;                 ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, 'WebService Called on New Account: ' + myAccount.Name));         return null;     } }
Nummer des Knowledge-Artikels

000385374

 
Laden
Salesforce Help | Article