U bent hier:
Apex aanroepen vanuit Omniscripts met de externe actie
Roep Apex klassen aan vanuit Omniscript met behulp van het element Remote en gebruik de JSON van Omniscript als invoer.
Maak voordat u begint een Apex klasse in Salesforce om aan te roepen vanuit Omniscript. Neem de ID op in de SOQL-query. Dat veld is verplicht omdat de Apex klasse de query's bewaart en gegevens serialiseert op basis van wat er daadwerkelijk wordt uitgevoerd.
-
Voeg een element Extern toe vóór een stap, in een stap of na een stap om gegevens te laden of gegevens te verzenden in het Omniscript.
De gegevens-JSON van Omniscript wordt verzonden als invoer.
- Geef in het veld Externe klasse de naam op van de Apex klasse die de actie aanroept.
-
Geef in het veld Externe methode een methode op van de klasse die de actie aanroept. Bijvoorbeeld:
validateAddress. - Schakel indien nodig de ondergeschikte integratieprocedure in die langlopende acties aanroept om Apex voortzettingen te gebruiken.
- Selecteer in de Pre- en Post-Transform Omnistudio Data Mapper Interface optioneel een Data Mapper Transform-interface om vóór of na de Externe actie uit te voeren.
-
Wijzig de hoeveelheid tijd voordat de actie een time-out ondervindt met behulp van de eigenschap Externe time-out. Klik in het element op Eigenschappen bewerken als JSON en stel in de eigenschap
remoteTimeouteen tijd in milliseconden in.De standaardtime-out is30,000, oftewel 30 seconden. Het maximum is120,000, oftewel 120 seconden. - Configureer extra eigenschappen in Externe actie.
-
Selecteer de reactiewerking van de actie door een aanroepmodus te selecteren.
-
Standaard: blokkeert de UI met een spinner voor laden.
-
Niet-blokkeren: wordt asynchroon uitgevoerd en de respons wordt toegepast op de UI. Pre- en Post Omnistudio Data Mapper-transformaties en grote bijlagen worden niet ondersteund. Wanneer Aanroepmodus is ingesteld op niet-blokkeren, ontvangen elementen die standaardwaarden gebruiken, de respons niet, omdat het element wordt geladen voordat de respons wordt geretourneerd. Als u de respons wilt toewijzen aan een element, moet u Response JSON Node instellen op VlocityNoRootNode en Response JSON Path instellen op de naam van het element.
-
Fire and Forget: wordt asynchroon uitgevoerd zonder callback naar de UI. Transformaties van Pre- en Post Data Mapper en grote bijlagen worden niet ondersteund. Een respons wordt nog wel weergegeven in de foutopsporingsconsole, maar wordt niet toegepast op de Data JSON.
-
-
Wanneer de aanroepmodus is ingesteld op niet-blokkeren, ontvangen elementen die standaardwaarden gebruiken, de respons niet omdat het element wordt geladen voordat de respons wordt geretourneerd. U moet deze eigenschappen configureren om de respons op een element toe te wijzen:
-
Respons-JSON-knooppunt: VlocityNoRootNode
-
Respons-JSON-traject: De naam van het Omniscript-element dat de waarde ontvangt.
-
In het Omniscript Problemen oplossen roept het element callOut1 Externe actie een extern systeem aan om te controleren of het activum nog onder garantie valt. Dit voorbeeld verwijst naar de Troubleshooting Omniscript en de OmniCallout en DataObjectService Apex klassen.
Het implementeert de klasse Remote OmniCallout en de methode Remote checkWarrantyStatus. Aangezien dit een voorbeeld Omniscript is, bevat de methode een hard-coded respons:

De externe actie callOut2 roept de methode returnItemOrder aan, die op zijn beurt de DataObjectService aanroept die een Heroku-exemplaar aanroept om een ordernummer te retourneren:

De volgende klassenstructuur kan worden gebruikt om een extern systeem aan te roepen:
global with sharing class CustomClassName implements NS.VlocityOpenInterface
{
global CustomClassName() {}
global Boolean invokeMethod(String methodName, Map<String,Object> inputMap, Map<String,Object> outMap, Map<String,Object> options) {
Boolean result = true;
try{
if(methodName.equals('customMethodName')){
// your implementation, use outMap to send response back to OmniScript
}
}
else if(methodName.equals('customMethodName2')){
// your implementation, use outMap to send response back to OmniScript
}
} catch(Exception e){
result = false;
}
return result;
}
}

