Loading

Vous avez des travaux non engagés en attente. Engagez-les ou annulez-les avant l'appel.

Date de publication: Mar 30, 2020
Description

Il se peut que vous deviez créer un enregistrement, puis le mettre à jour avec les informations fournies par un service Web. Cependant, un appel de service Web ne peut pas être effectué après une instruction DML dans la même transaction. Pour pouvoir exécuter l'action requise, la transaction doit être divisée en deux parties afin que la transaction DML soit terminée avant le déclenchement de l'appel du service Web.

Résolution

Division de la transaction en deux processus Ajax séparés

Le premier processus insère l'enregistrement, et le deuxième exécute l'appel et peut mettre à jour le nouvel enregistrement inséré.

Page TestWsCallout
<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>

Classe TestWsCallout
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;     } }
Numéro d’article de la base de connaissances

000385374

 
Chargement
Salesforce Help | Article