Loading

Automatisierung der Vertragsverlängerung in Salesforce CPQ

Veröffentlichungsdatum: Sep 27, 2025
Beschreibung
Sie können Ihre Verträge und Vermögenswerte in Salesforce CPQ verlängern, indem Sie die Felder für die Verlängerungsprognose oder das Verlängerungsangebot des Vertrags manuell überprüfen. Wenn Sie den Prozess zur Vertragsverlängerung automatisieren möchten, befolgen Sie die folgenden bewährten Vorgehensweisen, um Verträge über geplante Apex-Batchaufträge zu verlängern.
 
Lösung
Zur Automatisierung des Prozesses zur Vertragsverlängerung wird empfohlen, eine geplante Apex-Klasse zu verwenden, um eine Batch-Apex-Klasse im Vertragsobjekt mit einer Batchgröße von 1 auszuführen. Die Batch-Apex-Klasse kann alle gewünschten Datensätze für die Verlängerung abfragen und das Feld "SBQQ__RenewalForecast__c" oder "SBQQ__RenewalQuoted__c" festlegen. Mit dem unten stehenden Beispiel werden alle Verträge in der Organisation abgefragt, wobei weder "SBQQ__RenewalForecast__c" noch "SBQQ__RenewalQuoted__c" aktiviert ist. Anschließend wird "SBQQ__RenewalForecast__c" für diese Verträge auf "true" gesetzt, um Verlängerungs-Opportunities zu generieren. Außerdem wird eine E-Mail an den Benutzer gesendet, der den Batch erstellt hat, um ihn über den Status der Batch-Verarbeitung zu informieren.
 
///***Batch Apex Class***

global class RenewContractsBatch implements Database.Batchable<SObject>, Database.Stateful {
	global Integer recordsProcessed = 0;

	global Database.QueryLocator start(Database.BatchableContext bc){
		return Database.getQueryLocator(
			//This is where you input the conditions for the records which you wish to set renewal for 
			'SELECT SBQQ__RenewalForecast__c, SBQQ__RenewalQuoted__c, Id FROM Contract WHERE SBQQ__RenewalForecast__c = FALSE AND SBQQ__RenewalQuoted__c = FALSE'
		);
	}
	global void execute(Database.BatchableContext bc, List<Contract> scope){
		for(Contract contract:scope){
			contract.SBQQ__RenewalForecast__c = TRUE;
			recordsProcessed = recordsProcessed + 1;
		}
		update scope;
	}
	global void finish(Database.BatchableContext bc){
       // Get the ID of the AsyncApexJob representing this batch job
       // from Database.BatchableContext.
       // Query the AsyncApexJob object to retrieve the current job's information.
       AsyncApexJob a = [SELECT Id, Status, NumberOfErrors, JobItemsProcessed,
          TotalJobItems, CreatedBy.Email
          FROM AsyncApexJob WHERE Id =
          :BC.getJobId()];
       // OPTIONAL: Send an email to the Apex job's submitter notifying of job completion.
       Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
       String[] toAddresses = new String[] {a.CreatedBy.Email};
       mail.setToAddresses(toAddresses);
       mail.setSubject('Contract Renewal Batch ' + a.Status);
       mail.setPlainTextBody
       ('The batch Apex job processed ' + a.TotalJobItems +
       ' batches with '+ a.NumberOfErrors + ' failures.');
       Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
	}
}

Nachdem die Batch-Apex-Klasse erstellt wurde, muss eine planbare Apex-Klasse erstellt werden, um die Batch-Apex-Klasse automatisch aufzurufen. Beim Aufruf der Batch-Apex-Klasse ist es wichtig, eine Batchgröße von 1 zu verwenden, um zu vermeiden, dass einzelne Apex-Prozesse an Organisationsobergrenzen stoßen.
 
//***Schedulable Apex Class***

global class RenewSchedule implements Schedulable {
    global void execute(SchedulableContext ctx) {
        RenewContractsBatch batchObject = new RenewContractsBatch();
		Id batchId = Database.executeBatch(batchObject, 1);
    }
}

Nachdem Sie Ihre Batchklasse und die Schedule-Klasse zum Aufrufen der Batchklasse erstellt haben, können Sie Ihren Verlängerungsbatch täglich über die standardmäßige Salesforce-Benutzeroberfläche zur Apex-Planung ausführen. Klicken Sie dazu unter "Setup" in der Liste "Apex-Klassen" auf die Schaltfläche "Apex planen". Wenn Sie den Batch jedoch häufiger ausführen möchten, können Sie eine Form des folgenden Codes ausführen. Mit dem folgenden Beispiel wird die Klasse "RenewSchedule" (siehe oben) so eingestellt, dass sie alle 10 Minuten ausgeführt wird. Der Batch wird so eingestellt, dass er jede Stunde jeweils zur 0-, 10-, 20-, 30-, 40- und 50-Minuten-Marke ausgeführt wird.

Weitere Informationen zur Methode "System.schedule" finden Sie in diesem Artikel in der Entwicklerdokumentation.
 
//***Anonymous Apex to Set Up Scheduled Apex Execution***

RenewSchedule c = new RenewSchedule();
String sch0 = '0 0 * * * ?';
System.schedule('Renew Contracts 0', sch0, c);

String sch1 = '0 10 * * * ?';
System.schedule('Renew Contracts 10', sch1, c);

String sch2 = '0 20 * * * ?';
System.schedule('Renew Contracts 20', sch2, c);

String sch3 = '0 30 * * * ?';
System.schedule('Renew Contracts 30', sch3, c);

String sch4 = '0 40 * * * ?';
System.schedule('Renew Contracts 40', sch4, c);

String sch5 = '0 50 * * * ?';
System.schedule('Renew Contracts 50', sch5, c);

Hinweis: Zeitbasierte Workflow-Regeln können für die automatische Verlängerung bei Kunden verwendet werden, die nicht viele Verträge bearbeiten. Wenn Sie jedoch versuchen sollten, mehrere Verträge in derselben Workflow-Automatisierung zu verlängern, besteht das Risiko, dass Sie die Apex-Obergrenzen überschreiten. Durch die Ausführung von Batchaufträgen mit einer Größe von 1 werden solche Apex-Obergrenzen umgangen. Wenn Sie zeitbasierte Workflow-Regeln verwenden, stellen Sie sicher, dass es sich bei dem Workflow-Standardbenutzer um einen Systemadministrator handelt oder um einen Benutzer, der über alle erforderlichen Zugriffsrechte auf CPQ-Objekte und die Datensätze verfügt. Bestimmen Sie den Workflow-Standardbenutzer Ihrer Salesforce-Organisation, indem Sie auf den Link klicken.
Es wird nicht empfohlen, für die Automatisierung der Verlängerung einen geplanten Flow zu verwenden. Wenn ein geplanter Flow zur Automatisierung der Verlängerung verwendet wird, gibt er einen Fehler zurück. Ein geplanter Flow verwendet zur Ausführung des Prozesses einen "internen" Benutzer. Der Benutzer heißt "Automatisierter Prozess". Auf diesen Benutzer kann weder zugegriffen werden, noch kann er konfiguriert werden, und er verfügt nicht über die entsprechenden Zugriffsrechte für CPQ. Sie können diese Idee bezüglich des Benutzers des automatisierten Prozesses positiv bewerten.
Nummer des Knowledge-Artikels

000383568

 
Laden
Salesforce Help | Article