Sie befinden sich hier:
Einrichten der Benachrichtigung zum Prozessende für Massenverlängerungen
Erfahren Sie, wie Sie das Plattformereignis aus dem Batch-Framework verwenden, um zu erkennen, wann ein Verlängerungsauftrag für Massenrichtlinien abgeschlossen ist, und eine Benachrichtigung oder Folgeaktion auszulösen. Verwenden Sie das durch das Batch-Framework ausgelöste Plattformereignis am Ende eines Batchauftrags. Ein durch Plattformereignisse ausgelöster Flow abonniert alle Ereignisse der Statusänderung bei Batchaufträgen im Batch-Framework.
Prozess-Flow:
- Der Benutzer löst den Batchauftrag mit jobIdentifier aus, um die Massenverlängerungsanforderung eindeutig zu identifizieren.
- Der Batchauftrag ruft Policendatensätze basierend auf Filterkriterien für die Einheit "Versicherungspolice" ab und löst den Batch-Flow für jeden Policendatensatz aus.
- Der Flow ruft die vorkonfigurierte aufrufbare Aktion "Versicherungspolicen verlängern" auf, die Einträge in der Einheit "InsuranceAsyncBulkRecordDetail" mit dem Status "Geplant" erstellt und ein Policenereignis veröffentlicht. Alle diese Einträge sind unter demselben jobIdentifier gruppiert.
- Nach Abschluss des Batches werden alle zu verlängernden Richtlinien in der asynchronen Einheit aufgezeichnet. Sie können ermitteln, ob der Prozess beendet wurde, indem Sie die Anzahl der Datensätze mit dem Status not in (Success, Fail) für diesen jobIdentifier in InsuranceAsyncBulkRecordDetail überprüfen.
- Nach Abschluss des Auftrags löst das Batch-Framework das Plattformereignis "BatchJobStatusChangeEvent" aus. Der Plattformereignis-Flow, der dieses Ereignis abonniert hat, wird ausgelöst. Er sucht nach Batchaufträgen für die Massenverlängerung und ruft die aufrufbare Aktion auf, die einen warteschlangenfähigen Apex Auftrag verzögert in die Warteschlange stellt.
- Dieser warteschlangenfähige Apex-Auftrag sucht nach der Anzahl der Datensätze mit dem Status "Nicht in (Erfolg, Fehler)" für denselben jobIdentifier. Wenn die Anzahl größer als 0 ist, stellt sie sich erneut in die Warteschlange. Wenn die Anzahl 0 ist, wird eine Benachrichtigung ausgelöst oder ein anderes Ereignis ausgelöst.
- Erstellen Sie einen durch Plattformereignisse ausgelösten Flow.
- Wählen Sie das Plattformereignis "Geänderter Batchauftragsstatus" aus.
- Filtern Sie Ereignisse anhand der Batchauftragsdefinition und des Batchauftragsstatus.
-
Fügen Sie dem Flow eine Apex-Aktion hinzu. Die Aktion stellt einen warteschlangenfähigen Apex-Auftrag in die Warteschlange, der den Status der Massenverlängerungsanforderung anhand von Daten in Überwachungseinheiten überprüft.
Beispiel-Apex-Klasse: CallRenewStatusQueueable
public with sharing class CallRenewStatusQueueable { @InvocableMethod public static void execute(List<Requests> requestList) { for (Requests request : requestList) { String jobId = request.batchJobId; BatchJob job = [SELECT RuntimeParameter FROM BatchJob WHERE Id = :jobId]; Map<String, Object> paramsMap = (Map<String, Object>) JSON.deserializeUntyped(job.RuntimeParameter); List<Object> inputParams = (List<Object>) paramsMap.get('batchJobFlowRunTimeParameters'); String jobIdentifier = ''; for (Object param : inputParams) { Map<String, Object> temp = (Map<String, Object>) param; if (temp.get('name') == 'requestId [Flow]') { jobIdentifier = (String) temp.get('value'); } } System.enqueueJob(new CheckBulkRenewStatus(jobIdentifier), 10); } } public class Requests { @InvocableVariable(required=true) public String batchJobId; } } -
Definieren Sie den warteschlangenfähigen Apex Auftrag.
Beispielklasse: CheckBulkRenewStatus
public class CheckBulkRenewStatus implements Queueable { private String jobIdentifier; public CheckBulkRenewStatus(String jobIdentifier) { this.jobIdentifier = jobIdentifier; } public void execute(QueueableContext context) { InsuranceAsyncBulkRequest asyncRequest = [ SELECT Id FROM InsuranceAsyncBulkRequest WHERE JobIdentifier = :jobIdentifier LIMIT 1 ]; InsuranceAsyncBulkRequestItem item = [ SELECT Id FROM InsuranceAsyncBulkRequestItem WHERE InsuranceAsyncBulkRequestId = :asyncRequest.Id ]; List<InsuranceAsyncBulkRecordDetail> pendingItems = [ SELECT Id FROM InsuranceAsyncBulkRecordDetail WHERE InsuranceAsyncBulkRequestItemId = :item.Id AND Status IN ('In Progress', 'Scheduled') ]; if (pendingItems.size() > 0) { System.enqueueJob(new CheckBulkRenewStatus(jobIdentifier), 10); // Retry } else { // All renewals completed — raise an event or notify user System.debug('Bulk renewal complete. Sending final notification.'); } } } - Speichern Sie Ihre Änderungen und aktivieren Sie den Flow.

