Batch-Verarbeitung

Während die meisten Dienste synchrone APIs bereitstellen, bei denen Sie eine Anfrage senden und dann auf eine Antwort warten müssen, bietet BatchJobService die Möglichkeit, mehrere Vorgänge für verschiedene Dienste auszuführen, ohne auf den Abschluss der jeweiligen Vorgänge warten zu müssen.

Im Gegensatz zu dienstspezifischen Mutate-Vorgängen kann ein einzelner Auftrag in BatchJobService für eine Kombination aus Kampagnen, Anzeigengruppen, Anzeigen, Kriterien, Labels und Feedelementen ausgeführt werden. Gesendete Aufträge werden parallel ausgeführt und BatchJobService wiederholt automatisch Vorgänge, die aufgrund vorübergehender Fehler wie dem RateExceededError fehlschlagen.

Darüber hinaus können Sie mit BatchJobService in Anfragen temporäre IDs verwenden und so abhängige Vorgänge in einem einzigen Auftrag senden.

Unterstützte Vorgänge

BatchJobService unterstützt die folgenden Vorgänge:

Vorgang Entsprechender synchroner Dienst
AdGroupAdOperation
AdGroupAdLabelOperation
AdGroupAdService
AdGroupBidModifierOperation AdGroupBidModifierService
AdGroupCriterionOperation
AdGroupCriterionLabelOperation
AdGroupCriterionService
AdGroupExtensionSettingOperation AdGroupExtensionSettingService
AdGroupOperation
AdGroupLabelOperation
AdGroupService
BudgetOperation BudgetService
CampaignCriterionOperation CampaignCriterionService
CampaignExtensionSettingOperation CampaignExtensionSettingService
CampaignOperation
CampaignLabelOperation
CampaignService
CustomerExtensionSettingOperation CustomerExtensionSettingService
FeedItemOperation FeedItemService

Schema

Jede Clientbibliothek enthält Dienstprogramme, die die XML-Serialisierung hochgeladener Vorgänge und die XML-Deserialisierung heruntergeladener Ergebnisse durchführen. Das komplette Schema für Batch-Auftragsanfragen und -antworten finden Sie hier:

https://adwords.google.com/api/adwords/cm/v201702/BatchJobOpsService?wsdl

Batch-Auftragsablauf

Ein Batch-Auftrag umfasst die folgenden Schritte:

  1. Erstellen Sie den BatchJob und extrahieren Sie die uploadUrl aus der mutate()-Antwort.
  2. Laden Sie die Liste der auszuführenden Vorgänge in die uploadUrl hoch.
  3. Fragen Sie den status des Batch-Auftrags regelmäßig ab, bis er CANCELED oder DONE lautet.
  4. Laden Sie die Ergebnisse des Auftrags aus der downloadUrl herunter und überprüfen Sie sie auf Verarbeitungsfehler (processingErrors).

Sie können einen BatchJob im Status AWAITING_FILE oder ACTIVE abbrechen, indem Sie den status auf CANCELING festlegen.

Batch-Auftrag erstellen

Sie erstellen einen Batch-Auftrag, indem Sie einen ADD-Vorgang senden, der ein neues BatchJob-Objekt enthält:

// Create a BatchJob.
BatchJobOperation addOp = new BatchJobOperation();
addOp.setOperator(Operator.ADD);
addOp.setOperand(new BatchJob());

BatchJob batchJob = batchJobService.mutate(new BatchJobOperation[] {addOp}).getValue(0);

// Get the upload URL from the new job.
String uploadUrl = batchJob.getUploadUrl().getUrl();

System.out.printf("Created BatchJob with ID %d, status '%s' and upload URL %s.%n",
    batchJob.getId(), batchJob.getStatus(), uploadUrl);

An dieser Stelle im Prozess ist der status des Auftrags AWAITING_FILE.

Vorgänge für den Batch-Auftrag erstellen

Erstellen Sie für diesen Schritt mit der gleichen Methode Vorgänge für den Batch-Auftrag, die Sie für die synchronen API-Dienste verwenden. Mit dem folgenden Code-Snippet werden beispielsweise CampaignOperation-Objekte zum Hinzufügen neuer Kampagnen erstellt:

List<CampaignOperation> operations = new ArrayList<>();
for (int i = 0; i < NUMBER_OF_CAMPAIGNS_TO_ADD; i++) {
  Campaign campaign = new Campaign();
  campaign.setName(String.format("Batch Campaign %s.%s", namePrefix, i));

  // Recommendation: Set the campaign to PAUSED when creating it to prevent
  // the ads from immediately serving. Set to ENABLED once you've added
  // targeting and the ads are ready to serve.
  campaign.setStatus(CampaignStatus.PAUSED);

  campaign.setId(tempIdGenerator.next());
  campaign.setAdvertisingChannelType(AdvertisingChannelType.SEARCH);
  Budget budget = new Budget();
  budget.setBudgetId(budgetId);
  campaign.setBudget(budget);
  BiddingStrategyConfiguration biddingStrategyConfiguration =
      new BiddingStrategyConfiguration();
  biddingStrategyConfiguration.setBiddingStrategyType(BiddingStrategyType.MANUAL_CPC);

  // You can optionally provide a bidding scheme in place of the type.
  ManualCpcBiddingScheme cpcBiddingScheme = new ManualCpcBiddingScheme();
  cpcBiddingScheme.setEnhancedCpcEnabled(false);
  biddingStrategyConfiguration.setBiddingScheme(cpcBiddingScheme);

  campaign.setBiddingStrategyConfiguration(biddingStrategyConfiguration);

  CampaignOperation operation = new CampaignOperation();
  operation.setOperand(campaign);
  operation.setOperator(Operator.ADD);
  operations.add(operation);
}
return operations;

Wenn Sie abhängige Objekte wie etwa eine komplette Kampagne erstellen, die aus einer neuen Kampagne und den zugehörigen Anzeigengruppen, Anzeigen und Keywords besteht, können Sie temporäre IDs in den ADD-Vorgängen verwenden.

// Create a temporary ID generator that will produce a sequence of descending negative numbers.
Iterator<Long> tempIdGenerator =
    new AbstractSequentialIterator<Long>(-1L) {
      @Override
      protected Long computeNext(Long previous) {
        return Long.MIN_VALUE == previous.longValue() ? null : previous - 1;
      }
    };

// Use a random UUID name prefix to avoid name collisions.
String namePrefix = UUID.randomUUID().toString();

// Create the mutate request that will be sent to the upload URL.
List<Operation> operations = new ArrayList<>();

// Create and add an operation to create a new budget.
BudgetOperation budgetOperation = buildBudgetOperation(tempIdGenerator, namePrefix);
operations.add(budgetOperation);

// Create and add operations to create new campaigns.
List<CampaignOperation> campaignOperations =
    buildCampaignOperations(tempIdGenerator, namePrefix, budgetOperation);
operations.addAll(campaignOperations);

// Create and add operations to create new negative keyword criteria for each campaign.
operations.addAll(buildCampaignCriterionOperations(campaignOperations));

// Create and add operations to create new ad groups.
List<AdGroupOperation> adGroupOperations =
    new ArrayList<>(buildAdGroupOperations(tempIdGenerator, namePrefix, campaignOperations));
operations.addAll(adGroupOperations);

// Create and add operations to create new ad group criteria (keywords).
operations.addAll(buildAdGroupCriterionOperations(adGroupOperations));

// Create and add operations to create new ad group ads (text ads).
operations.addAll(buildAdGroupAdOperations(adGroupOperations));

Vorgänge in die Upload-URL hochladen

Nachdem Sie die Vorgänge für Ihren Auftrag zusammengestellt haben, laden Sie sie im nächsten Schritt in die Upload-URL hoch.

Wenn Sie das Dienstprogramm in einer der Clientbibliotheken verwenden, müssen Sie sich um die zugrunde liegenden Details nicht kümmern. Über das Dienstprogramm werden die Vorgänge zusammengestellt, die Anfragen gesendet und Methoden für die folgenden beiden Optionen bereitgestellt:

  1. Alle Vorgänge gleichzeitig hochladen.
  2. Vorgänge mit mehreren Aufrufen des Dienstprogramms hochladen.

Option 1: Alle Vorgänge gleichzeitig hochladen

Im folgenden Beispiel wird das Dienstprogramm BatchJobHelper aus der Java-Clientbibliothek verwendet, um alle Vorgänge gleichzeitig hochzuladen:

// Use a BatchJobHelper to upload all operations.
BatchJobHelper batchJobHelper = adWordsServices.getUtility(session, BatchJobHelper.class);

batchJobHelper.uploadBatchJobOperations(operations, uploadUrl);

Option 2: Vorgänge mit mehreren Aufrufen des Dienstprogramms hochladen

Im folgenden Beispiel wird das Dienstprogramm BatchJobHelper aus der Java-Clientbibliothek verwendet, um Vorgänge nacheinander mithilfe mehrerer Aufrufe der Methode uploadIncrementalBatchJobOperations() des Dienstprogramms hochzuladen:

// Use a BatchJobUploadHelper to upload all operations.
BatchJobHelper batchJobUploadHelper = new BatchJobHelper(session);
BatchJobUploadStatus startingUploadStatus =
    new BatchJobUploadStatus(0, URI.create(batchJob.getUploadUrl().getUrl()));
BatchJobUploadResponse uploadResponse;

// Create and upload the first operation to create a new budget.
BudgetOperation budgetOperation = buildBudgetOperation(tempIdGenerator, namePrefix);
uploadResponse = batchJobUploadHelper.uploadIncrementalBatchJobOperations(
    Lists.newArrayList(budgetOperation),
    false, /* pass isLastRequest = false */
    startingUploadStatus);
System.out.printf("First upload response: %s%n", uploadResponse);

// Create and upload intermediate operations to create new campaigns.
List<CampaignOperation> campaignOperations =
    buildCampaignOperations(budgetOperation, tempIdGenerator, namePrefix);
uploadResponse = batchJobUploadHelper.uploadIncrementalBatchJobOperations(
    campaignOperations,
    false, /* pass isLastRequest = false */
    uploadResponse.getBatchJobUploadStatus());
System.out.printf("Intermediate upload response: %s%n", uploadResponse);

// Upload more intermediate requests...

// Create and upload operations to create new ad group ads (text ads).
// This is the final upload request for the BatchJob.
uploadResponse = batchJobUploadHelper.uploadIncrementalBatchJobOperations(
    buildAdGroupAdOperations(adGroupOperations),
    true, /* pass isLastRequest = true */
    uploadResponse.getBatchJobUploadStatus());
System.out.printf("Last upload response: %s%n", uploadResponse);

Batch-Auftragsstatus abfragen

Nachdem Sie die Vorgänge hochgeladen haben, wird der Batch-Auftrag in die Auftragswarteschlange gesendet. Sie sollten daher den Status des Auftrags regelmäßig überprüfen, bis er CANCELED oder DONE lautet. Das folgende Code-Snippet wartet 30 Sekunden nach dem ersten Versuch, 60 Sekunden nach dem zweiten, 120 Sekunden nach dem dritten usw.

int pollAttempts = 0;
boolean isPending = true;
Selector selector =
    new SelectorBuilder()
        .fields(BatchJobField.Id, BatchJobField.Status, BatchJobField.DownloadUrl,
            BatchJobField.ProcessingErrors, BatchJobField.ProgressStats)
        .equalsId(batchJob.getId())
        .build();
do {
  long sleepSeconds = (long) Math.scalb(30, pollAttempts);
  System.out.printf("Sleeping %d seconds...%n", sleepSeconds);
  Thread.sleep(sleepSeconds * 1000);

  batchJob = batchJobService.get(selector).getEntries(0);
  System.out.printf(
      "Batch job ID %d has status '%s'.%n", batchJob.getId(), batchJob.getStatus());

  pollAttempts++;
  isPending = PENDING_STATUSES.contains(batchJob.getStatus());
} while (isPending && pollAttempts < MAX_POLL_ATTEMPTS);

Ergebnisse des Batch-Auftrags herunterladen und auf Fehler prüfen

In dieser Phase sollte sich der Auftrag in einem dieser Status befinden:

Status Beschreibung Durchzuführende Aktion
DONE BatchJobService wurde erfolgreich geparst und es wurde versucht, alle hochgeladenen Vorgänge auszuführen.
  • Laden Sie die Ergebnisse jedes Vorgangs aus der downloadUrl des Batch-Auftrags herunter.
CANCELED Als die hochgeladenen Vorgänge von BatchJobService geparst werden sollten, ist ein Fehler aufgetreten.
  • Überprüfen Sie die processingErrors-Liste des Batch-Auftrags.
  • Laden Sie die Ergebnisse jedes erfolgreich geparsten Vorgangs aus der downloadUrl des Batch-Auftrags herunter (falls vorhanden).

Die Download-URL gibt für jeden hochgeladenen Vorgang ein mutateResult-Element zurück. Jedes Ergebnis hat die folgenden, in BatchJobOpsService.wsdl definierten Attribute:

Attribut Typ Beschreibung
result Operand Wenn der Vorgang erfolgreich war, enthält dieses Attribut genau eines der folgenden untergeordneten Elemente:
  • Ad
  • AdGroup
  • AdGroupAd
  • AdGroupAdLabel
  • AdGroupBidModifier
  • AdGroupCriterion
  • AdGroupCriterionLabel
  • AdGroupExtensionSetting
  • AdGroupLabel
  • Budget
  • Campaign
  • CampaignCriterion
  • CampaignExtensionSetting
  • CampaignLabel
  • CustomerExtensionSetting
  • FeedItem
Das zurückgegebene Element und Objekt entspricht dem Typ des Vorgangs für den Index. Wenn der Vorgang beispielsweise ein erfolgreicher CampaignOperation war, wird hier ein Campaign-Element zurückgegeben.
errorList ErrorList Wenn der Vorgang fehlgeschlagen ist, enthält dieses Attribut mindestens ein errors-Element. Jedes dieser Elemente ist eine Instanz von ApiError oder einer seiner Unterklassen.
index long Die 0-basierte Vorgangsnummer des Vorgangs. Verwenden Sie diese Nummer, um das Ergebnis mit dem entsprechenden Vorgang im Upload in Beziehung zu setzen.

Der folgende Code zeigt eine Methode zur Verarbeitung der aus einer Download-URL abgerufenen Ergebnisse:

if (batchJob.getDownloadUrl() != null && batchJob.getDownloadUrl().getUrl() != null) {
  BatchJobMutateResponse mutateResponse =
      batchJobHelper.downloadBatchJobMutateResponse(batchJob.getDownloadUrl().getUrl());
  System.out.printf("Downloaded results from %s:%n", batchJob.getDownloadUrl().getUrl());
  for (MutateResult mutateResult : mutateResponse.getMutateResults()) {
    String outcome = mutateResult.getErrorList() == null ? "SUCCESS" : "FAILURE";
    System.out.printf("  Operation [%d] - %s%n", mutateResult.getIndex(), outcome);
  }
} else {
  System.out.println("No results available for download.");
}

Das Attribut processingErrors des Batch-Auftrags enthält alle bei der Vorverarbeitung der hochgeladenen Vorgänge aufgetretenen Fehler wie beispielsweise eine falsch formatierte Eingabedatei. Der folgende Code zeigt eine Methode zur Verarbeitung solcher Fehler:

if (batchJob.getProcessingErrors() != null) {
  int i = 0;
  for (BatchJobProcessingError processingError : batchJob.getProcessingErrors()) {
    System.out.printf(
        "  Processing error [%d]: errorType=%s, trigger=%s, errorString=%s, fieldPath=%s"
        + ", reason=%s%n",
        i++, processingError.getApiErrorType(), processingError.getTrigger(),
        processingError.getErrorString(), processingError.getFieldPath(),
        processingError.getReason());
  }
} else {
  System.out.println("No processing errors found.");
}

Temporäre IDs verwenden

Eine leistungsstarke Funktion von BatchJobService besteht darin, dass temporäre IDs unterstützt werden. Eine temporäre ID ist eine negative Zahl (long), mit der Vorgänge in einem Batch-Auftrag auf das Ergebnis eines ADD-Vorgangs aus einem früheren Vorgang im selben Batch-Auftrag verweisen können. Geben Sie dazu im ADD-Vorgang des übergeordneten Objekts für die ID eine negative Zahl an und verwenden Sie diese dann in nachfolgenden mutate()-Vorgängen für andere abhängige Objekte im selben Batch-Auftrag.

Ein typischer Anwendungsfall für temporäre IDs ist das Erstellen einer kompletten Kampagne in einem einzigen Batch-Auftrag. So könnten Sie beispielsweise einen einzelnen Auftrag mit mehreren ADD-Vorgängen und den folgenden Zuweisungen für jeden operand erstellen:

Mit dieser Sequenz wird Folgendes erreicht:

  • Eine Kampagne mit der (temporären) ID -1 hinzufügen
    • Eine Anzeigengruppe mit der temporären ID -2 für Kampagne -1 hinzufügen
      • Eine Anzeigengruppenanzeige für Anzeigengruppe -2 hinzufügen
      • Mehrere Anzeigengruppenkriterien (Keywords) für Anzeigengruppe -2 hinzufügen
  • Kampagne -1 mit einem Label kennzeichnen
  • Kampagne -1 ein auszuschließendes Kriterium (Keyword) auf Kampagnenebene hinzufügen

Batch-Auftrag abbrechen

Ein BatchJob kann abgebrochen werden, wenn sein status AWAITING_FILE oder ACTIVE ist. Senden Sie dazu eine BatchJobService.mutate-Anfrage und übergeben Sie eine BatchJobOperation mit diesen Parametern:

  • operator = SET
  • operand = ein BatchJob mit:
    • id = ID des Batch-Auftrags
    • status = CANCELING

Die Anfrage schlägt fehl, wenn der status von BatchJob beim Senden der oben genannten Anfrage weder AWAITING_FILE noch ACTIVE ist. In diesem Fall wird der Fehler BatchJobError. INVALID_STATE_CHANGE ausgelöst.

Das Abbrechen eines Auftrags ist ein asynchroner Vorgang. Nach der mutate()-Anfrage müssen Sie daher den Status des Batch-Auftrags abfragen, bis er entweder CANCELED oder DONE erreicht. Laden Sie außerdem die Ergebnisse herunter und prüfen Sie sie auf Fehler, da möglicherweise einige Vorgänge in Ihrem Auftrag ausgeführt wurden, bevor der Auftrag abgebrochen wurde.

Anforderungen für den Upload

Nicht-inkrementelle Uploads

Jedes Dienstprogramm einer Clientbibliothek bietet eine bequeme Möglichkeit zum Hochladen von Vorgängen in einem einzigen Schritt. Wenn Sie jedoch keine Clientbibliothek verwenden, werden nicht-inkrementelle Uploads nicht unterstützt.

Inkrementelle Uploads

Mit inkrementellen Uploads können mehrere Upload-Anfragen an die uploadUrl des Batch-Auftrags gesendet werden. Die Ausführung des Auftrags beginnt erst, nachdem Sie den letzten Satz von Vorgängen hochgeladen haben.

BatchJob-uploadURL durch fortsetzbare Upload-URL ersetzen

Das Hochladen erfolgt gemäß den Google Cloud Storage-Richtlinien für fortsetzbare Uploads mit der XML API.

Die uploadUrl Ihres BatchJob muss gegen eine fortsetzbare Upload-URL ausgetauscht werden. Senden Sie hierfür eine Anfrage an die uploadUrl. Die Anfrage muss die folgenden Spezifikationen erfüllen:

Anfrageattribute
Anforderungsmethode POST
URL Von BatchJobService.mutate zurückgegebene Upload-URL
HTTP-Header-Content-Type application/xml
HTTP-Header-Content-Length 0
HTTP-Header-x-goog-resumable start
Anforderungstext kein Anfragetext erforderlich

Wenn die Anfrage erfolgreich war, hat die zurückgegebene Antwort den Status 201 Created und enthält einen Location-Header, dessen Wert die fortsetzbare Upload-URL ist.

Upload-Vorgänge in die fortsetzbare Upload-URL

Sobald die fortsetzbare Upload-URL bekannt ist, können Sie mit dem Hochladen Ihrer Vorgänge beginnen. Jede an die fortsetzbare Upload-URL gesendete Anfrage muss die folgenden Spezifikationen erfüllen:

Anfrageattribute
Anforderungsmethode PUT
URL Fortsetzbare Upload-URL aus dem Initialisierungsschritt oben.
HTTP-Header-Content-Type application/xml
HTTP-Header-Content-Length Die Anzahl der Bytes im Inhalt der aktuellen Anfrage.
HTTP-Header-Content-Range
Bereich der Bytes in der Anfrage, gefolgt von der Gesamtzahl der Bytes. Die Gesamtzahl der Bytes ist für die erste und zwischenzeitliche Anfragen *. Sie muss jedoch beim Senden der letzten Anfrage auf die endgültige Gesamtzahl der Bytes festgelegt werden.
Beispiele:
bytes 0-262143/*
bytes 262144-524287/*
bytes 524288-786431/786432
Anfragetext
Vorgänge im XML-Format (siehe BatchJobOpsService.wsdl).

Anfragetext für die fortsetzbare Upload-URL

Der BatchJobService verkettet zum Abschluss sämtliche in die uploadUrl hochgeladenen XML-Texte und parst sie als einzelne Anfrage. Sie dürfen daher nur die mutate-Start- und Endelemente der ersten bzw. letzten Anfrage einschließen.

Anfrage mutate-Startelement mutate-Endelement
Erste Häkchen Kreis mit Schrägstrich
Zwischenzeitliche Kreis mit Schrägstrich Kreis mit Schrägstrich
Letzte Kreis mit Schrägstrich Häkchen

Da BatchJobService außerdem den hochgeladenen XML-Text als einzelnes Dokument parst, muss der Anfragetext für eine einzelne Anfrage kein vollständiges XML-Dokument enthalten. Wenn Sie beispielsweise 524.305 Bytes (256 KB + 256 KB + 17) hochladen, könnten Ihre Anfragen wie folgt aussehen:

Anfrage 1

<?xml version="1.0" encoding="UTF-8"?>
<ns1:mutate xmlns:ns1="https://adwords.google.com/api/adwords/cm/v201702">
<operations xsi:type="ns1:CampaignOperation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <operator xsi:type="ns1:Operator">ADD</operator>
  <operand xsi:type="ns1:Campaign">
  ...
</operations>
<operations>
  ...
</operat

Content-Length ist 262.144, wobei das t in der letzten Zeile das 262.144. Byte ist.

Anforderung 2

<operations xsi:type="ns1:AdGroupOperation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <operator xsi:type="ns1:Operator">ADD</operator>
  <operand xsi:type="ns1:AdGroup">
  ...
</operations>
<operations>
  ...
</operations>

Content-Length ist 262.144, wobei das e in der letzten Zeile das 262.144. Byte ist.

Anforderung 3

<operations></mutate>
... (aufgefüllt auf 262.144 Bytes)

Die Content-Length ohne Auffüllung beträgt 17 Bytes, wobei das schließende > von </mutate> das 17. Byte ist. Die gesamte Content-Length mit Auffüllung beträgt 262.144 Bytes.

Best Practices

Bei der Verwendung von BatchJobService sollten Sie die folgenden Richtlinien beachten:

  • Für einen besseren Durchsatz empfehlen wir eine geringere Anzahl größere Aufträge anstatt zahlreiche kleinere Aufträge.
  • Wenn Sie viele simultane Aufträge für dieselbe clientCustomerId senden, versuchen Sie die Wahrscheinlichkeit zu verringern, dass Aufträge für dieselben Objekte gleichzeitig ausgeführt werden. Verwenden Sie dabei große Aufträge. Viele nicht abgeschlossene Aufträge mit dem Status ACTIVE oder CANCELING, von denen versucht wird, den gleichen Satz von Objekten zu bearbeiten, können zu blockadeähnlichen Bedingungen führen, was wiederum zu einer erheblichen Verlangsamung und zu Auftragsfehlern führt.
  • Vermeiden Sie mehrere Vorgänge, die im gleichen Auftrag dasselbe Objekt bearbeiten.
  • Sortieren Sie hochgeladene Vorgänge nach Vorgangstyp, um einen höheren Durchsatz zu erzielen. Wenn Ihr Auftrag beispielsweise Vorgänge zum Hinzufügen von Kampagnen, Anzeigengruppen und Anzeigengruppenkriterien enthält, sortieren Sie die Vorgänge im Upload so, dass zuerst alle CampaignOperations, danach alle AdGroupOperations und zum Schluss alle AdGroupCriterionOperations hochgeladen werden.
  • Fragen Sie den Auftragsstatus nicht zu häufig ab, damit keine Ratenbegrenzungsfehler auftreten.

Mit Shopping-Kampagnen arbeiten

Bei der Aktualisierung von Produktaufteilungsbäumen mit BatchJobService gelten die folgenden Einschränkungen:

  1. Wenn eine Liste von Vorgängen in einem Produktaufteilungsbaum zu einem strukturell ungültigen Baum führt (z. B. Unterteilung eines Knotens, ohne dass ein anderer Knoten erstellt wird), schlagen alle Vorgänge der Liste in diesem Baum fehl.

  2. Vorgänge, die nicht mit Änderungen der Struktur in einem Produktaufteilungsbaum verbunden sind (z. B. Gebotsänderungen in einem bestehenden Knoten), werden autonom ausgeführt.

  3. Legen Sie beim Entfernen eines Produktaufteilungsknotens für das criterion-Feld des AdGroupCriterion-Objekts eine ProductPartition-Instanz fest. Wenn für dieses Feld eine Criterion-Instanz festgelegt wird, schlägt der Vorgang fehl. In diesem Fall würde der Fehler AdGroupCriterionError.CONCRETE_TYPE_REQUIRED ausgelöst.

Einschränkungen

  • Zu einem bestimmten Zeitpunkt kann ein AdWords-Konto bis zu 1 GB hochgeladene Vorgänge in all seinen noch nicht abgeschlossenen Batch-Aufträgen enthalten. Sobald Ihr Konto dieses Limit erreicht, wird der Fehler BatchJobError mit dem Grund DISK_QUOTA_EXCEEDED gemeldet, wenn Sie versuchen, neue Batch-Aufträge hinzuzufügen. Warten Sie in diesem Fall, bis die Größe der ausstehenden hochgeladenen Vorgänge unter das Limit fällt, bevor Sie neue Aufträge erstellen.

Codebeispiele

Die folgenden Clientbibliotheken enthalten jeweils ein komplettes Codebeispiel, das sämtliche oben beschriebenen Funktionen veranschaulicht:

Feedback geben zu...