Sie befinden sich hier:
Apex-definierter Datentyp
Mit dem Apex-definierten Datentyp können Flows die Art komplexer Datenobjekte ändern, die in der Regel bei Aufrufen an Webservices zurückgegeben werden. Erstellen Sie Apex-definierte Variablen in Flows und verarbeiten Sie bei Webaufrufen zurückgegebene JSON-Elemente direkt.
Erforderliche Editionen
| Unterstützte Editionen anzeigen. |
Ein Entwickler kann eine Apex-Klasse als Muster für die automatische Konvertierung aus dem Web in einen Flow definieren, mit der durch deklarative Ansätze und ohne zusätzlichen Code eine vollständige Änderung der resultierenden Objekte vorgenommen werden kann. Apex-definierte Ressourcen sind besonders zum Verbinden von Flows mit umfangreichen externen Webobjekten hilfreich, auf die über Mulesoft und REST-Aufrufe zugegriffen wird. Wenn ein Datentyp nicht unterstützt wird, können Flows den Wert an eine Lightning-Komponente übergeben und Sie können zum Ausführen Apex verwenden.
Erweitern von Flows mit dem Apex-definierten Datentyp
Mithilfe einer Kombination aus Apex-, Flow- und Lightning-Komponenten können Sie Geschäftsprozesse automatisieren, die so komplexe Datenobjekte beinhalten, wie sie typischerweise von Aufrufen an Webservices zurückgegeben werden. Zum Beispiel können Sie externe Produktdaten zu einem Webprodukt abrufen und anschließend Datensätze in Salesforce erstellen.
Ein Aufruf eines REST-Endpunkts gibt eine JSON-Antwort mit Produktdaten zurück.
{
"model": "Vintage Cruiser Jacket",
"brand": "Acme",
"identifiers": [
{
"SKU": "A-J001"
},
{
"SKU": "A-J002"
},
{
"SKU": "A-J003"
}
],
"price": {
"amount": {
"currencyValue": "500.00",
"name": "Amount",
"currency": "USD"
},
"salesUnit": {
"code": "EA",
"name": "Each"
}
}
}
Siehe auch:
Modellieren von JSON-Objekten mit einer Apex-Klasse
Definieren Sie ein komplexes Datenobjekt in einer Apex-Klasse. Beispielsweise könnten Sie eine entsprechende Apex-Klasse für ein JSON-Objekt erstellen. Die Klasse fungiert als Vorlage und konvertiert die JSON in Objekte, die ein Flow verwenden kann.
Nachdem Sie die Apex-Klassen für ein Webprodukt definiert haben, können Sie eine Apex-Aktion erstellen, um die Daten eines Webservice mithilfe eines REST-Aufrufs abzurufen. Speichern Sie die zurückgegebenen Daten in Flow-Variablen, die den Apex-definierten Datentyp verwenden. Arbeiten Sie dann mit den Daten in Flows, Apex- und Lightning-Komponenten.
Hier ein Beispiel für eine WebProduct-Apex-Vorlage: Sie enthält die Haupt-WebProduct und Klassen für Price und Identifiers. WebProduct verfügt über drei Datentypen.
- Für die Felder model und brand wird der elementare Datentyp "String" verwendet.
- Das Feld price verweist auf die Klasse
Price. Stellen Sie sicher, dass Sie jede Klasse in separaten Klassendateien speichern, da innere Klassen im Apex-definierten Datentyp für Flows nicht unterstützt werden. - Das Feld identifiers ist price ähnlich, wird jedoch als Liste dargestellt. Mit der Klasse
Identifierskann ein Flow auf JSON-Arrays zugreifen, um eine Liste mit drei spezifischen SKU-Nummern darzustellen. - Die Methode
parseführt die Konvertierung des JSON-Codes in die für Flows zugänglichen Apex-Objekte aus. - Felder in einer Apex-Klasse für Flows erfordern die
@AuraEnabled-Anmerkung.
public class WebProduct {
@AuraEnabled
public String model;
@AuraEnabled
public String brand;
//Because the identifiers information is an array in the JSON schema, we create a separate class called Identifiers and define a property that contains a List.
@AuraEnabled
public List<Identifiers> identifiers;
//This field has an Apex-defined data type in the Price Apex class.
@AuraEnabled
public Price price;
//This method is used as part of the Create Apex Action section.
public static WebProduct parse(String json) {
return (WebProduct) System.JSON.deserialize(json, WebProduct.class);
}
Die Apex-Klasse Identifiers definiert das Feld SKU.
public class Identifiers {
@AuraEnabled
public String SKU;
}
Die Apex-Klasse Price definiert die Felder amount und salesUnit.
public class Price {
//This field has an Apex-defined data type in the Amount Apex class.
@AuraEnabled
public Amount amount;
//This field has an Apex-defined data type in the SalesUnit Apex class.
@AuraEnabled
public SalesUnit salesUnit;
}
Die Apex-Klasse Amount definiert die Felder currencyValue, name und currency.
public class Amount {
@AuraEnabled
public String currencyValue;
@AuraEnabled
public String name;
@AuraEnabled
public String currency;
}
Die Apex-Klasse SalesUnit definiert die Felder code und name.
public class SalesUnit {
@AuraEnabled
public String code;
@AuraEnabled
public String name;
}
Erstellen einer Apex-Aktion
Nachdem Sie einen Mechanismus zum Übersetzen von JSON-Daten in Flow-Ressourcen erstellt haben, können Sie die Apex-Klasse erstellen, mit der die JSON-Daten abgerufen werden. Verwenden Sie die Anmerkung "@InvocableMethod", um die Klasse als Apex-Aktion für Flows zu definieren.
Die Apex Klasse "GetWebProduct" definiert eine Apex Aktion. Sie ruft Produktdaten von einem REST-Endpunkt ab und überträgt die JSON-Antwort an das Apex-Objekt "WebProduct".
Ab API-Version 66.0 benötigen benutzerdefinierte Apex-Klassen, die als Parameter für aufrufbare Aktionen verwendet werden, einen barrierefreien Konstruktor ohne Argumente. In diesem Beispiel definieren die inneren Klassen "Anforderungen" und "Ergebnisse" keine Konstruktoren. Daher bietet Apex einen impliziten Konstruktor ohne Argumente. Wenn Sie diesen Klassen andere Konstruktoren hinzufügen, benötigen die Klassen einen expliziten Konstruktor ohne Argumente mit dem entsprechenden Zugriffsmodifikator (öffentlich oder global).
Entwickler können anpassen, wie diese Apex-Aktion in Flow Builder angezeigt wird, indem sie eine Metadatendatei vom Typ "InvocableActionExtension" erstellen. Mit diesen Metadaten können Sie die Eingabereihenfolge und Gruppierung steuern, benutzerdefinierte Kopfzeilen hinzufügen, Auswahllisten für Eingabeparameter definieren und Editoren für benutzerdefinierte Eigenschaften für bestimmte Eingaben erstellen. Weitere Informationen finden Sie im Metadata API Developer Guide unter "InvocableActionExtension".
global with sharing class GetWebProduct {
@InvocableMethod
public static List<Results> GetWebProduct(List<Requests> requests)
{
Http http = new Http();
HttpRequest request = new HttpRequest();
String endpoint = requests[0].endpoint;
String submittedId = requests[0].submittedId;
request.setEndpoint(endpoint + submittedId );
request.setMethod('GET');
HttpResponse response = http.send(request);
Results curResult = new Results();
String responseJSON = response.getBody();
WebProduct curProduct = WebProduct.parse(responseJSON);
curResult.WebProduct = curProduct;
List<Results> resultsList = new List<Results>();
resultsList.add(curResult);
return resultsList;
}
global class Requests {
@InvocableVariable
global String submittedId;
@InvocableVariable
global String endpoint;
}
global class Results {
@InvocableVariable
global WebProduct WebProduct;
}
}
In diesem Beispiel wird der globale Zugriffsmodifizierer verwendet, da er für ein Szenario mit verwalteten Paketen konzipiert ist. Wenn Sie eine Apex Aktion nur für die Verwendung in Ihrer Organisation erstellen, können Sie public anstelle von global verwenden.
Konfigurieren einer Apex-Aktion
Fügen Sie einem Bildschirm-Flow eine Apex-Aktion hinzu und konfigurieren Sie die zugehörigen Eingaben.
Mit der Apex-Aktion "Get Web Product" (Webprodukt abrufen) werden die Webproduktdaten in {!Get_Web_Product} automatisch gespeichert.
Nun können Sie mit den Daten in Flows, Apex- und Lightning-Komponenten arbeiten. Erstellen Sie beispielsweise einen Flow zum Generieren von Produktdaten, indem Sie eine Schleife für die Kennzeichner verwenden und eine Sammlung von Produkten zusammenstellen. Speichern Sie die Sammlung der Datensätze in Salesforce und zeigen Sie die Daten in einer Flow-Bildschirmkomponente an.
Hinzufügen eines benutzerdefinierten Symbols zu einer Apex-definierten Aktion
Fügen Sie Ihren Apex-definierten aufrufbaren Aktionen benutzerdefinierte Symbole hinzu, damit sie im Flow Builder-Zeichenbereich leichter zu finden sind.
Beim benutzerdefinierten Symbol kann es sich um eine SVG-Datei oder ein vorhandenes Salesforce Lightning Design System-Symbol (SLDS) handeln.
SVG-Dateien müssen die folgenden Anforderungen erfüllen:
- Das Element "
<svg>" in der Datei enthält die Attribute "id", "xmlns" und "viewBox". - Das Element "
<svg>" in der Datei enthält die Attribute "style", "height" und "width" nicht. - Die Datei enthält kein Element vom Typ "
<clipPath>". - Jedes Element vom Typ "
<path>" in der Datei enthält einfill-Attribut.
Diese SVG-Datei wird beispielsweise als benutzerdefiniertes Symbol unterstützt.
<svg id="top" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path fill="#673ab7" d="M12,44c-1.657,0-3-1.343-3-3V7c0-1.657,1.343-3,3-3h16l11,11v26c0,1.657-1.343,3-3,3H12z"/><path fill="#5e35b1" d="M39 15L28.883 14.125 39 24.124z"/><path fill="#b39ddb" d="M39,15h-8c-1.657,0-3-1.343-3-3V4L39,15z"/><path fill="#f5f5f5" d="M22 23H32V25H22zM22 28H32V30H22zM22 33H32V35H22zM17.5 22.5A1.5 1.5 0 1 0 17.5 25.5 1.5 1.5 0 1 0 17.5 22.5zM17.5 27.5A1.5 1.5 0 1 0 17.5 30.5 1.5 1.5 0 1 0 17.5 27.5zM17.5 32.5A1.5 1.5 0 1 0 17.5 35.5 1.5 1.5 0 1 0 17.5 32.5z"/></svg>Nur SLDS-Symbole für Standardobjekte und benutzerdefinierte Objekte werden als benutzerdefinierte Symbole für Apex-definierte aufrufbare Aktionen unterstützt.
- Wenn Sie eine SVG-Datei verwenden, laden Sie die Datei als statische Ressource in Ihrer Organisation hoch.
- Legen Sie das Attribut "
iconName" der Anmerkung "InvocableMethod" für die aufrufbare Aktion auf den Namen des Symbols fest.
Geben Sie für SVG-Symbole den Namen als "resource:namespace__iconName:svgID" an. Beispiel:
public class CustomSvgIcon {
@InvocableMethod(iconName='resource:google:top')
public static void run() {}
}public class CustomSvgIcon {
@InvocableMethod(label='myIcon' iconName='resource:myPackageNamespace__google:top')
global static List<Integer> myMethod(List<Integer> request) {
List<Integer> results = new List<Integer>();
results.add(1);
return results;
}-
iconName ist der Name, den Sie beim Hochladen des Symbols angegeben haben.
-
svgID ist der Wert, den das
id-Attribut des <svg>-Elements in der SVG-Datei hat. -
namespace ist der Namespace des Pakets, das die anzupassende aufrufbare Aktion enthält. Wenn sich die aufrufbare Aktion in einem verwalteten Paket befindet, ist namespace__ ein erforderliches Präfix. Andernfalls ist es optional. Wenn Sie ein benutzerdefiniertes Symbol für eine aufrufbare Aktion in einem verwalteten Paket verwenden möchten, deklarieren Sie die Methode, die die aufrufbare Aktion definiert, als
global.
Geben Sie für SLDS-Symbole den Namen im Format "slds:category:name" an. Beispiel:
public class CustomSldsIcon {
@InvocableMethod(iconName='slds:standard:choice')
public static void run() {}
}- category ist der Name der Kategorie des Symbols.
- name ist der Name der Datei in SLDS.
Wenn ein Benutzer die aufrufbare Aktion in Flow Builder hinzufügt, wird das benutzerdefinierte Symbol im Flow Builder-Zeichenbereich angezeigt, um die Aktion darzustellen.
