Asynchron Salesforce

Best Practice: Asynchrone Verarbeitung in Salesforce

Der Unterschied zwischen synchronen und asynchronen Prozessen für Nicht-Programmierer*innen

“Asynchron” in Salesforce ist eines dieser technischen Wörter, von denen du entweder genau weißt, was es bedeutet, oder du hast nur irgendwo davon gehört, hast aber keine Ahnung, was es bedeutet.

Während die Details zu diesem Thema für eine Nicht-Programmierer*in ziemlich detailliert und kompliziert werden können, geben wir dir hier einen allgemeinen Überblick über synchrone und asynchrone Prozesse, ohne uns zu sehr in Kodier-Schlagwörtern zu verlieren:

Synchrone (sync) Prozesse sind diejenigen, die die Ausführung einer laufenden Aktion stoppen und die Fortsetzung der Aktion erst erlauben, wenn der synchrone Prozess abgeschlossen ist.

Asynchrone (async) Prozesse sind solche, die laufen können, ohne die ursprüngliche Aktion anzuhalten, was die gleichzeitige Arbeit an mehreren Aufträgen ermöglicht.

 

Asynchronous Processes

 

Ein Beispiel für einen synchronen Prozess wäre jedes Mal, wenn du auf die Schaltfläche “Speichern” klickst, nachdem du etwas in einem Salesforce-Datensatz geändert hast. Du erhälst diesen kurzen Ladebildschirm und dein ganzes Fenster ist für eine Sekunde “eingefroren”. Dieses “Einfrieren” geschieht genau deshalb, weil der Speichervorgang synchron abläuft, und bis er abgeschlossen ist, hast du keine Möglichkeit, weiter mit dem System zu interagieren.

Ein asynchrones Beispiel: Erinnere dich an das letzte Mal, als du eine E-Mail verschickt hast. Musstest du hinter einem Ladebildschirm sitzen und warten, bis dein Empfänger die E-Mail erhalten hat? Nein, und zwar deshalb, weil der asynchrone Prozess des E-Mail-Versands von der Hauptaktion “abgezweigt” wurde und seine Arbeit unabhängig fortsetzte, während du ohne Unterbrechung weiterarbeiten konntest.

 

Vor- und Nachteile von beidem

 

Prozess

Vorteile

Nachteile

Synchron

 + Schnell und reaktionsschnell

 + Sofortige Rückmeldung

 – Die Benutzer*in muss warten, bis der Prozess abgeschlossen ist

 – Kann Governor Limits leichter erreichen

Asynchron

 + Kann große Datenmengen verarbeiten

 + Hält den ursprünglichen Prozess nicht an

 + Höhere Governor Limits

 – Kann Zeit in Anspruch nehmen

 – Schwierig, den Status der Beendigung zu melden

 

 

Warum sollte man asynchrone Prozesse verwenden?

Einige Prozesse können länger dauern als andere. Ein einzelner Speichervorgang für einen Datensatz dauert vielleicht nur ein paar Sekunden, aber andere Aktionen wie das Erstellen oder Aktualisieren von Tausenden von Datensätzen können sehr viel mehr Zeit in Anspruch nehmen. In diesen Fällen wäre natürlich eine asynchrone Option angebracht, da sie die Arbeit übernimmt, ohne dass die Benutzer*in warten muss.

Ein weiterer wichtiger Grund, warum die asynchrone Option zu bevorzugen ist, ist die Erhöhung der Governor Limits bei asynchronem Betrieb. Einige Beispiele für erhöhte asynchrone APEX-Limits sind:

 

 

Synchrones Limit

Asynchrones Limit

Anzahl der ausgegebenen SOQL-Abfragen

100

200

Gesamte Heap-Größe

6 MB

12 MB

Maximale CPU-Zeit auf SF-Servern

10,000 Millisekunden

60,000 Millisekunden

 

Mit asynchroner Ausführung erhält man nicht nur höhere Grenzwerte, sondern diese Reglergrenzwerte sind auch unabhängig von den synchronen Grenzwerten, was bedeutet, dass asynchrone Ausführung nur bei Grenzwertproblemen helfen kann.

Die verschiedenen Arten der asynchronen Ausführung verfügen über unterschiedliche intelligente Methoden, um den Prozess sicherer, konsistenter und zuverlässiger zu gestalten. Werfen wir einen Blick auf diese Typen.

 

Arten von asynchronen Prozessen

Flows erhalten neu die Möglichkeit, Logik auf asynchronen Pfaden auszuführen, was sehr nützlich sein wird und etwas war, das offensichtlich fehlte. Da Flows fast wie die Point-and-Click-Versionen einiger Coding-Lösungen sind, werden wir nur die asynchronen programmatischen Fähigkeiten in Apex analysieren, was uns auch einen guten Einblick in die neuen Fähigkeiten von Flows geben würde.

Asynchroner Apex kann in 4 Typen unterteilt werden: Future Apex, Queueable Apex, Batch Apex und Scheduled Apex.

Mit Future Apex kann ein synchroner Prozess “abgezweigt” und in einen asynchronen Prozess umgewandelt werden. Vielleicht gibt es eine sehr benutzerdefinierte Freigabe, die Sie beim Erstellen eines Datensatzes haben möchten? Warum nicht eine Future Apex-Methode verwenden, die dies im Hintergrund erledigt, nachdem man den Datensatz erstellt hat. Dadurch wird auch das lästige Problem des “gemischten DML-Fehlers” behoben, da die Erstellung des Datensatzes und die Freigabe dafür nun getrennt erfolgen.

Möchte man mehrere asynchrone Prozesse hintereinander “verketten”, um die Reihenfolge der Ausführung zu gewährleisten? Queueable Apex ist hier die Antwort. Es ermöglicht die Trennung komplexerer Prozesse in diesen asynchronen Kontext und bietet gleichzeitig eine Möglichkeit, eine chronologische Reihenfolge Ihrer Logik zu erstellen, während diese im Hintergrund läuft.

Hunderttausende oder sogar Millionen von Datensätzen werden erstellt/aktualisiert und Trigger und Flows explodieren vor Fehlern? Batch Apex teilt diesen großen Datensatz in Teile auf und behandelt jeden Teil entsprechend, ohne sich Gedanken über das Erreichen von Governor Limits zu machen.

Man hat einen periodischen Prozess, der in regelmäßigen Abständen ausgeführt werden muss? Geplanter Apex kann dies tun und gleichzeitig einen Batch-Apex-Prozess aufrufen, was bedeutet, dass man um Mitternacht Prüfungen/Aktualisierungen in der gesamten Organisation und den Datensätzen durchführen kann.

Fast alle Arten von asynchronem Apex können miteinander interagieren und einen Prozess erstellen, der deine hochgradig individuellen Anforderungen erfüllt.

 

Asynchronous processes

 

Folgen der Verwendung asynchroner Prozesse

Vielleicht fragst du dich, warum nicht alle Prozesse asynchron sind. Sie haben mehr Möglichkeiten, sie arbeiten mit höheren Governor Limits und bieten einzigartige Lösungen für Probleme, wo ist also der Haken? Wie du dir vorstellen kannst, handelt es sich bei einem asynchronen Prozess um etwas, das nicht sofort geschieht, sondern für einen Zeitpunkt in der Zukunft “versprochen” wird, natürlich so schnell wie möglich. Während diese Wartezeit bei kleinen Aufgaben nur den Bruchteil einer Sekunde betragen kann, kann ein größerer Datensatz viel mehr Zeit in Anspruch nehmen, so dass dieser Hintergrundprozess nie einen genauen Zeitpunkt der Fertigstellung haben wird.

Dies und die Tatsache, dass jeder asynchrone Prozess weiterläuft, ohne dass die Benutzer*innen auf seinen Abschluss warten muss, macht es für dieselben Benutzer*innen unmöglich, eine unmittelbare Rückmeldung über den Hintergrundprozess zu erhalten. Natürlich gibt es viele Möglichkeiten, das Ende eines asynchronen Prozesses anzuzeigen, z. B. durch eine Aktualisierung eines Feldes irgendwo oder durch den Export des Status des asynchronen Auftrags nach dessen Beendigung, aber es ist erwähnenswert, dass diese Ansätze die aktive Beteiligung der Benutzer*in erfordern, indem sie entweder eine Seite aktualisiert oder nach einem bestimmten Indikator sucht.

Glücklicherweise können wir seit der Salesforce Version Winter ’21 auch Glockenbenachrichtigungen in einer Salesforce-Org über Apex erstellen, so dass dies die neue, unmittelbarste Möglichkeit sein könnte, eine Benutzer*in zu benachrichtigen.

 

Möchtest du weitere Informationen zu dieser Thematik bekommen, dann melde dich gerne bei uns für ein kostenloses Beratungsgespräch! Unsere Salesforce zertifizierten Consultants und Developer helfen dir jederzeit gerne bei allen denkbaren Salesforce spezifischen Problemen!

 

Wir freuen uns auf ein Gespräch!

Jetzt kontaktieren

Kontaktformular

© 2022 Deloitte Consulting GmbH. All rights reserved.