Produkte häufig aktualisieren

Mit der Unter-API „Products“ können Sie Ihre vorhandenen Produkte teilweise aktualisieren. Das ist ideal für Daten, die sich häufig ändern, z. B. Preis und Verfügbarkeit. So muss nicht das gesamte Produkt bei einer kleinen Änderung noch einmal eingereicht werden. Sie sollten Produkte jedoch regelmäßig neu einfügen, um sicherzustellen, dass alle Produktdaten synchronisiert sind.

In diesem Leitfaden wird beschrieben, wie Sie die Methode productinputs.patch verwenden, um Ihre Produkte zu aktualisieren.

Vorbereitung

Bevor Sie ein Produkt aktualisieren können, benötigen Sie Folgendes:

  • Ein vorhandenes Produkt, das aktualisiert werden soll. Informationen zum Erstellen von Produkten finden Sie im Leitfaden Produkte hinzufügen und verwalten.
  • Die name der Datenquelle, zu der die Produkteingabe gehört (z. B. accounts/12345/dataSources/67890). Weitere Informationen dazu, wie Sie diese finden, finden Sie in diesem Hilfeartikel.

Bestimmte Produktdetails aktualisieren

Wenn Sie nur einige Details eines Produkts ändern möchten, z. B. den Preis oder die Verfügbarkeit, ohne alle Informationen noch einmal einzureichen, verwenden Sie die Methode productInputs.patch.

Mit dem Parameter updateMask können Sie angeben, welche Felder Sie ändern. updateMask ist eine durch Kommas getrennte Liste der Felder, die Sie aktualisieren möchten. Die Methode patch verhält sich so:

  • Felder in updateMask und Text:Diese Felder werden mit den neuen Werten aktualisiert.
  • Felder in updateMask, aber nicht im Textkörper:Diese Felder werden aus der Produkteingabe gelöscht.
  • Felder, die nicht in updateMask enthalten sind:Diese Felder bleiben unverändert.
  • updateMask-Parameter nicht angegeben:Alle im Anfragetext angegebenen Felder werden aktualisiert. Felder, die nicht im Anfragetext angegeben sind, werden nicht aus der Produkteingabe gelöscht.

Hier sehen Sie ein Beispiel für Produktdaten vor einer Aktualisierung:

{
  "name": "accounts/{ACCOUNT_ID}/productInputs/en~US~SKU12345",
  "product": "accounts/{ACCOUNT_ID}/products/en~US~SKU12345",
  "offerId": "SKU12345",
  "contentLanguage": "en",
  "feedLabel": "US",
  "productAttributes": {
    "title": "Classic Cotton T-Shirt",
    "description": "A comfortable, durable, and stylish t-shirt made from 100% cotton.",
    "link": "https://www.example.com/p/SKU12345",
    "availability": "IN_STOCK",
    "price": {
      "amountMicros": "15990000",
      "currencyCode": "USD"
    },
    "condition": "NEW",
    "gtins": [
      "9780007350896"
    ],
    "imageLink": "https://www.example.com/image/SKU12345"
  }
}

In diesem Beispiel werden die title und availability eines Produkts aktualisiert und die imageLink des Produkts gelöscht. Die description und price sind nicht in der updateMask enthalten und bleiben unverändert.

PATCH https://merchantapi.googleapis.com/products/v1/accounts/{ACCOUNT_ID}/productInputs/en~US~SKU12345?updateMask=productAttributes.title,productAttributes.availability,productAttributes.imageLink&dataSource=accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}
{
 "productAttributes": {
   "title": "Classic Cotton T-Shirt - New Edition",
   "availability": "OUT_OF_STOCK",
    "description": "A comfortable T-shirt from premium cotton, newer edition.",
    "price": {
      "amountMicros": "9990000",
      "currencyCode": "USD"
    }
 }
}

Bei einem erfolgreichen Aufruf wird die aktualisierte ProductInput-Ressource zurückgegeben. Die title und availability werden aktualisiert und die imageLink wird entfernt, da sie in der updateMask, aber nicht im Anfragetext enthalten war. Die description und price bleiben unverändert, da sie nicht in updateMask aufgeführt waren.

{
  "name": "accounts/{ACCOUNT_ID}/productInputs/en~US~SKU12345",
  "product": "accounts/{ACCOUNT_ID}/products/en~US~SKU12345",
  "offerId": "SKU12345",
  "contentLanguage": "en",
  "feedLabel": "US",
  "productAttributes": {
    "title": "Classic Cotton T-Shirt - New Edition",
    "description": "A comfortable, durable, and stylish t-shirt made from 100% cotton.",
    "link": "https://www.example.com/p/SKU12345",
    "availability": "OUT_OF_STOCK",
    "price": {
      "amountMicros": "15990000",
      "currencyCode": "USD"
    },
    "condition": "NEW",
    "gtins": [
      "9780007350896"
    ],
  }
}

Die folgenden Codebeispiele zeigen, wie Sie ein Produkt aktualisieren.

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.protobuf.FieldMask;
import com.google.shopping.merchant.datasources.v1.DataSourceName;
import com.google.shopping.merchant.products.v1.Availability;
import com.google.shopping.merchant.products.v1.Condition;
import com.google.shopping.merchant.products.v1.ProductAttributes;
import com.google.shopping.merchant.products.v1.ProductInput;
import com.google.shopping.merchant.products.v1.ProductInputName;
import com.google.shopping.merchant.products.v1.ProductInputsServiceClient;
import com.google.shopping.merchant.products.v1.ProductInputsServiceSettings;
import com.google.shopping.merchant.products.v1.UpdateProductInputRequest;
import com.google.shopping.type.CustomAttribute;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to update a product input */
public class UpdateProductInputSample {

  public static void updateProductInput(Config config, String productId, String dataSourceId)
      throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    ProductInputsServiceSettings productInputsServiceSettings =
        ProductInputsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates product name to identify product.
    String name =
        ProductInputName.newBuilder()
            .setAccount(config.getAccountId().toString())
            .setProductinput(productId)
            .build()
            .toString();

    // Just productAttributes and customAttributes can be updated
    FieldMask fieldMask =
        FieldMask.newBuilder()
            .addPaths("product_attributes.title")
            .addPaths("product_attributes.description")
            .addPaths("product_attributes.link")
            .addPaths("product_attributes.image_link")
            .addPaths("product_attributes.availability")
            .addPaths("product_attributes.condition")
            .addPaths("product_attributes.gtins")
            .addPaths("custom_attributes.mycustomattribute")
            .build();

    // Calls the API and catches and prints any network failures/errors.
    try (ProductInputsServiceClient productInputsServiceClient =
        ProductInputsServiceClient.create(productInputsServiceSettings)) {

      ProductAttributes attributes =
          ProductAttributes.newBuilder()
              .setTitle("A Tale of Two Cities")
              .setDescription("A classic novel about the French Revolution")
              .setLink("https://exampleWebsite.com/tale-of-two-cities.html")
              .setImageLink("https://exampleWebsite.com/tale-of-two-cities.jpg")
              .setAvailability(Availability.IN_STOCK)
              .setCondition(Condition.NEW)
              .addGtins("9780007350896")
              .build();

      // The datasource can be either a primary or supplemental datasource.
      String dataSource =
          DataSourceName.newBuilder()
              .setAccount(config.getAccountId().toString())
              .setDatasource(dataSourceId)
              .build()
              .toString();

      UpdateProductInputRequest request =
          UpdateProductInputRequest.newBuilder()
              .setUpdateMask(fieldMask)
              // You can only update product attributes and custom_attributes
              .setDataSource(dataSource)
              .setProductInput(
                  ProductInput.newBuilder()
                      .setName(name)
                      .setProductAttributes(attributes)
                      .addCustomAttributes(
                          CustomAttribute.newBuilder()
                              .setName("mycustomattribute")
                              .setValue("Example value")
                              .build())
                      .build())
              .build();

      System.out.println("Sending update ProductInput request");
      ProductInput response = productInputsServiceClient.updateProductInput(request);
      System.out.println("Updated ProductInput Name below");
      // The last part of the product name will be the product ID assigned to a product by Google.
      // Product ID has the format `contentLanguage~feedLabel~offerId`
      System.out.println(response.getName());
      System.out.println("Updated Product below");
      System.out.println(response);
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // An ID assigned to a product by Google. In the format
    // contentLanguage~feedLabel~offerId
    String productId = "en~label~sku123"; // Replace with your product ID.

    // Identifies the data source that will own the product input.
    String dataSourceId = "{INSERT_DATASOURCE_ID}"; // Replace with your datasource ID.

    updateProductInput(config, productId, dataSourceId);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Protobuf\FieldMask;
use Google\Shopping\Merchant\Products\V1\Availability;
use Google\Shopping\Merchant\Products\V1\Condition;
use Google\Shopping\Merchant\Products\V1\ProductAttributes;
use Google\Shopping\Merchant\Products\V1\Client\ProductInputsServiceClient;
use Google\Shopping\Merchant\Products\V1\ProductInput;
use Google\Shopping\Merchant\Products\V1\UpdateProductInputRequest;
use Google\Shopping\Type\CustomAttribute;

/**
 * This class demonstrates how to update a product input.
 */
class UpdateProductInputSample
{
    // An ID assigned to a product by Google. In the format
    // contentLanguage~feedLabel~offerId
    // Please ensure this product ID exists for the update to succeed.
    private const PRODUCT_ID = "online~en~label~sku123";

    // Identifies the data source that will own the product input.
    // Please ensure this data source ID exists.
    private const DATASOURCE_ID = "<INSERT_DATASOURCE_ID>";

    /**
     * Helper function to construct the full product input resource name.
     *
     * @param string $accountId The merchant account ID.
     * @param string $productInputId The product input ID (e.g., "online~en~label~sku123").
     * @return string The full product input resource name.
     */
    private static function getProductInputName(string $accountId, string $productInputId): string
    {
        return sprintf("accounts/%s/productInputs/%s", $accountId, $productInputId);
    }

    /**
     * Helper function to construct the full data source resource name.
     *
     * @param string $accountId The merchant account ID.
     * @param string $dataSourceId The data source ID.
     * @return string The full data source resource name.
     */
    private static function getDataSourceName(string $accountId, string $dataSourceId): string
    {
        return sprintf("accounts/%s/dataSources/%s", $accountId, $dataSourceId);
    }

    /**
     * Updates an existing product input in your Merchant Center account.
     *
     * @param array $config The configuration array containing the account ID.
     * @param string $productId The ID of the product input to update.
     * @param string $dataSourceId The ID of the data source.
     */
    public static function updateProductInput(
        array $config,
        string $productId,
        string $dataSourceId
    ): void {
        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config containing credentials for the client to use.
        $options = ['credentials' => $credentials];

        // Creates a ProductInputsServiceClient.
        $productInputsServiceClient = new ProductInputsServiceClient($options);

        // Construct the full resource name of the product input to be updated.
        $name = self::getProductInputName($config['accountId'], $productId);

        // Define the FieldMask to specify which fields to update.
        // Only 'attributes' and 'custom_attributes' can be specified in the
        // FieldMask for product input updates.
        $fieldMask = new FieldMask([
            'paths' => [
                "product_attributes.title",
                "product_attributes.description",
                "product_attributes.link",
                "product_attributes.image_link",
                "product_attributes.availability",
                "product_attributes.condition",
                "product_attributes.gtin",
                "custom_attributes.mycustomattribute" // Path for a specific custom attribute
            ]
        ]);

        // Calls the API and handles any network failures or errors.
        try {
            // Define the new attributes for the product.
            $attributes = new ProductAttributes([
                'title' => 'A Tale of Two Cities 3',
                'description' => 'A classic novel about the French Revolution',
                'link' => 'https://exampleWebsite.com/tale-of-two-cities.html',
                'image_link' => 'https://exampleWebsite.com/tale-of-two-cities.jpg',
                'availability' => Availability::IN_STOCK,
                'condition' => Condition::PBNEW,
                'gtins' => ['9780007350896'] // GTIN is a repeated field.
            ]);

            // Construct the full data source name.
            // This specifies the data source context for the update.
            $dataSource = self::getDataSourceName($config['accountId'], $dataSourceId);

            // Create the ProductInput object with the desired updates.
            // The 'name' field must match the product input being updated.
            $productInput = new ProductInput([
                'name' => $name,
                'product_attributes' => $attributes,
                'custom_attributes' => [ // Provide the list of custom attributes.
                    new CustomAttribute([
                        'name' => 'mycustomattribute',
                        'value' => 'Example value'
                    ])
                ]
            ]);

            // Create the UpdateProductInputRequest.
            $request = new UpdateProductInputRequest([
                'update_mask' => $fieldMask,
                'data_source' => $dataSource,
                'product_input' => $productInput
            ]);

            print "Sending update ProductInput request\n";
            // Make the API call to update the product input.
            $response = $productInputsServiceClient->updateProductInput($request);

            print "Updated ProductInput Name below\n";
            // The name of the updated product input.
            // The last part of the product name is the product ID (e.g., contentLanguage~feedLabel~offerId).
            print $response->getName() . "\n";
            print "Updated Product below\n";
            // Print the full updated product input object.
            print_r($response);

        } catch (ApiException $e) {
            printf("ApiException caught: %s\n", $e->getMessage());
        }
    }

    /**
     * Executes the UpdateProductInput sample.
     */
    public function callSample(): void
    {
        $config = Config::generateConfig();
        $productId = self::PRODUCT_ID;
        $dataSourceId = self::DATASOURCE_ID;

        self::updateProductInput($config, $productId, $dataSourceId);
    }
}

// Run the script.
$sample = new UpdateProductInputSample();
$sample->callSample();

Python

"""A module to update a product input."""

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.protobuf import field_mask_pb2
from google.shopping.merchant_products_v1 import Availability
from google.shopping.merchant_products_v1 import Condition
from google.shopping.merchant_products_v1 import ProductAttributes
from google.shopping.merchant_products_v1 import ProductInput
from google.shopping.merchant_products_v1 import ProductInputsServiceClient
from google.shopping.merchant_products_v1 import UpdateProductInputRequest
from google.shopping.type import CustomAttribute


# Fetches the Merchant Center account ID from the authentication examples.
# This ID is needed to construct resource names for the API.
_ACCOUNT_ID = configuration.Configuration().read_merchant_info()


def update_product_input(account_id: str, product_id: str, data_source_id: str):
  """Updates an existing product input for a specific account.

  Args:
    account_id: The Merchant Center account ID.
    product_id: The ID of the product input to update. This ID is assigned by
      Google and has the format `contentLanguage~feedLabel~offerId`.
    data_source_id: The ID of the data source that owns the product input.
  """

  # Obtains OAuth credentials for authentication.
  credentials = generate_user_credentials.main()

  # Creates a ProductInputsServiceClient instance.
  client = ProductInputsServiceClient(credentials=credentials)

  # Constructs the full resource name for the product input.
  # Format: accounts/{account}/productInputs/{productinput}
  name = f"accounts/{account_id}/productInputs/{product_id}"

  # Defines the FieldMask to specify which fields of the product input
  # are being updated. Only 'attributes' and 'custom_attributes' can be updated.
  field_mask = field_mask_pb2.FieldMask(
      paths=[
          "product_attributes.title",
          "product_attributes.description",
          "product_attributes.link",
          "product_attributes.image_link",
          "product_attributes.availability",
          "product_attributes.condition",
          "product_attributes.gtins",
          "custom_attributes.mycustomattribute",
      ]
  )

  # Prepares the new attribute values for the product.
  attributes = ProductAttributes(
      title="A Tale of Two Cities updated",
      description="A classic novel about the French Revolution",
      link="https://exampleWebsite.com/tale-of-two-cities.html",
      image_link="https://exampleWebsite.com/tale-of-two-cities.jpg",
      availability=Availability.IN_STOCK,
      condition=Condition.NEW,
      gtins=["9780007350896"],  # GTIN is a repeated field.
  )

  # Constructs the full resource name for the data source.
  # The data source can be primary or supplemental.
  # Format: accounts/{account}/dataSources/{datasource}
  data_source = f"accounts/{account_id}/dataSources/{data_source_id}"

  # Prepares the ProductInput object with the updated information.
  product_input_data = ProductInput(
      name=name,
      product_attributes=attributes,
      custom_attributes=[
          CustomAttribute(
              name="mycustomattribute", value="Example value"
          )
      ],
  )

  # Creates the UpdateProductInputRequest.
  request = UpdateProductInputRequest(
      update_mask=field_mask,
      data_source=data_source,
      product_input=product_input_data,
  )

  # Sends the update request to the API.
  try:
    print("Sending update ProductInput request")
    response = client.update_product_input(request=request)
    print("Updated ProductInput Name below")
    # The response includes the name of the updated product input.
    # The last part of the product name is the product ID assigned by Google.
    print(response.name)
    print("Updated Product below")
    print(response)
  except RuntimeError as e:
    # Catches and prints any errors that occur during the API call.
    print(e)


if __name__ == "__main__":
  # The ID of the product to be updated.
  # This ID is assigned by Google and typically follows the format:
  # contentLanguage~feedLabel~offerId
  # Replace with an actual product ID from your Merchant Center account.
  product_id_to_update = "online~en~label~sku123"

  # The ID of the data source that will own the updated product input.
  # Replace with an actual data source ID from your Merchant Center account.
  data_source_id_for_update = "<INSERT_DATA_SOURCE_ID>"

  update_product_input(
      _ACCOUNT_ID, product_id_to_update, data_source_id_for_update
  )

cURL

curl --location --request PATCH 'https://merchantapi.googleapis.com/products/v1/accounts/{ACCOUNT_ID}/productInputs/en~US~SKU12345?updateMask=productAttributes.title,productAttributes.description&dataSource=accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}' \
--header 'Authorization: Bearer <API_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
   "productAttributes": {
       "title": "A Tale of Two Cities",
       "description": "A classic novel about the French Revolution"
   }
}'

Mit benutzerdefinierten Attributen aktualisieren

Sie können sowohl Standard- als auch benutzerdefinierte Attribute in einem einzigen Aufruf aktualisieren. Wenn Sie ein benutzerdefiniertes Attribut aktualisieren möchten, stellen Sie seinem Namen in der updateMask das Präfix customAttributes voran.

In diesem Beispiel werden mehrere Aktionen in einer Anfrage ausgeführt:

  • Aktualisiert das Standardattribut title direkt.
  • Aktualisiert ein vorhandenes benutzerdefiniertes Attribut (myCustomAttrToBeUpdated).
  • Fügt ein neues benutzerdefiniertes Attribut (myCustomAttrToBeInserted) ein.
  • Löscht ein vorhandenes benutzerdefiniertes Attribut (myCustomAttrToBeDeleted).
PATCH https://merchantapi.googleapis.com/products/v1/accounts/{ACCOUNT_ID}/productInputs/en~US~SKU12345?updateMask=productAttributes.title,customAttributes.myCustomAttrToBeInserted,customAttributes.myCustomAttrToBeUpdated,customAttributes.myCustomAttrToBeDeleted&dataSource=accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}
{
  "productAttributes": {
    "title": "ProductTitle Updated"
  },
  "customAttributes": [
    {
      "name": "description",
      "value": "A newly updated description."
    },
    {
      "name": "myCustomAttrToBeUpdated",
      "value": "myCustomAttrToBeUpdated updated value"
    },
    {
      "name": "myCustomAttrToBeInserted",
      "value": "new from update"
    }
  ]
}

Bei einer erfolgreichen Anfrage wird das aktualisierte ProductInput zurückgegeben, das alle angegebenen Änderungen enthält.

Aktualisierungen benutzerdefinierter Attribute

Mit dem Feld customAttributes können Sie selbst definierte Attribute aktualisieren. Diese Attribute entsprechen nicht der Standardspezifikation und werden als benutzerdefinierte Attribute für das Endprodukt gespeichert.

So werden Produktupdates verarbeitet

Wenn Sie eine patch-Anfrage senden, wird die Aktualisierung auf die spezifischen ProductInput-Daten angewendet, bevor Regeln angewendet werden. Dadurch wird ein einheitliches Verhalten beim Einfügen und Aktualisieren von Produkten erreicht.

So wird Ihr Update verarbeitet:

  1. Update Input (Eingabe aktualisieren): Mit Ihrer patch-Anfrage wird die spezifische ProductInput geändert, die mit der von Ihnen angegebenen Datenquelle verknüpft ist.

  2. Verarbeitung und Zusammenführung:Nachdem die Eingabe aktualisiert wurde, beginnt die Verarbeitung:

    • Feedregeln und zusätzliche Datenquellen:Bei Regeln, die für die primäre Quelle des Produkts konfiguriert sind, werden die ProductInput aus primären und zusätzlichen Quellen kombiniert. Mit diesen Regeln können Attribute geändert oder neue abgeleitet werden. Weitere Informationen zum Einrichten der Regeln finden Sie im Artikel https://support.google.com/merchants/answer/14994083.
    • Andere Datenquellen:Daten aus anderen Quellen (z. B. automatische Verbesserungen) werden ebenfalls mit der primären Datenquelle zusammengeführt.
    • Validierung:Die zusammengeführten Daten werden anhand der Produktdatenspezifikation und der Shopping-Richtlinien von Google validiert.
  3. Endprodukt:Das Ergebnis dieser Pipeline ist die endgültige, verarbeitete Product-Ressource, die mit products.get oder products.list zurückgegeben werden kann. Das ist auch die Version des Produkts, die im Merchant Center angezeigt wird und für verschiedene Ziele infrage kommt.

Aufgrund dieses mehrstufigen Prozesses gibt es eine Verzögerung von in der Regel einigen Minuten zwischen dem Senden einer Aktualisierungsanfrage und dem Zeitpunkt, zu dem die Änderungen in der endgültigen Product-Ressource widergespiegelt werden, die Sie mit products.get abrufen können.

Beispiel: Produkt mit einer einzelnen primären Eingabe aktualisieren

Dies ist der gängigste Anwendungsfall. Ein Produkt ist in einer einzelnen primären Datenquelle vorhanden und Sie möchten einige seiner Attribute aktualisieren.

  1. Ausgangszustand:Ein Produkt en~US~SKU12345 ist in Ihrer primären Datenquelle mit title: "Classic T-Shirt" und price: 15.99 USD vorhanden.
  2. Aktualisierungsanfrage:Sie senden eine patch-Anfrage, um price auf 14.99 USD zu aktualisieren und availability auf out of stock festzulegen.
  3. Verarbeitung:
    • Das ProductInput für SKU12345 wurde aktualisiert.
  4. Endprodukt:Das endgültige Product enthält jetzt title: "Classic T-Shirt", price: 14.99 USD und availability: "out of stock".

Beispiel: Produkt mit zusätzlichen Daten und Regeln aktualisieren

In diesem Beispiel wird gezeigt, wie sich Feedregeln auf eine Aktualisierung auswirken können. Einige Änderungen werden angewendet, andere überschrieben.

  1. Anfangszustand:
    • Primäre Eingabe:en~US~SKU12345 hat title: "Great T-Shirt" und description: "A great short-sleeve t-shirt.".
    • Zusätzliche Eingabe:Für dasselbe Produkt ist ein Eintrag in einer zusätzlichen Datenquelle mit title: "Awesome T-Shirt" und description: "An awesome short-sleeve t-shirt." vorhanden.
    • Feedregel:Es ist eine Regel festgelegt, mit der title aus der zusätzlichen Datenquelle übernommen wird. Es gibt keine Regel für description.
    • Ergebnis:Das endgültig verarbeitete Product hat title: "Awesome T-Shirt" und description: "A great short-sleeve t-shirt.".
  2. Aktualisierungsanfrage:Sie senden eine patch-Anfrage, um die primäre Datenquelle zu aktualisieren. Dabei legen Sie title auf "Fantastic T-Shirt" und description auf "A fantastic short-sleeve t-shirt." fest.
  3. Verarbeitung:
    • Die ProductInput in der primären Datenquelle wird aktualisiert und enthält nun title: "Fantastic T-Shirt" und description: "A fantastic short-sleeve t-shirt.".
    • Die Verarbeitungspipeline wird ausgeführt.
    • Für title wird durch die Feedregel festgelegt, dass der Wert aus der zusätzlichen Datenquelle (Awesome T-Shirt) Vorrang hat und Ihre Aktualisierung überschrieben wird.
    • Für description wird der aktualisierte Wert aus der primären Eingabe (A fantastic short-sleeve t-shirt.) verwendet, da es keine überschreibende Regel gibt.
  4. Endprodukt:Der Titel des endgültigen Product lautet weiterhin Awesome T-Shirt (Ihre Aktualisierung wurde überschrieben), die Beschreibung ist jetzt aber A fantastic short-sleeve t-shirt. (Ihre Aktualisierung wurde angewendet).

Zwischen Updates und zusätzlichen Datenquellen wählen

Sie können Produktdaten entweder mit productinputs.patch oder durch Einfügen von Daten in zusätzliche Datenquellen ändern. Die beste Wahl hängt von Ihrer Datenverwaltungsstrategie ab.

Um unvorhersehbare Ergebnisse zu vermeiden, empfehlen wir, nicht sowohl productinputs.patch als auch zusätzliche Datenquellen zur Verwaltung derselben Produktdaten für dasselbe Produkt zu verwenden.

Hier ein detaillierter Vergleich:

Funktion productinputs.patch (Updates) Zusätzliche Datenquellen
Optimal für Schnelle, häufige, teilweise Änderungen an vorhandenen Daten (z. B. Preis, Verfügbarkeit) Logisch getrennte Daten werden in Schichten angeordnet, verschiedene Attribute werden von verschiedenen Systemen verwaltet oder es gibt komplexe regelbasierte Überschreibungen.
Mechanismus Ändert eine vorhandene ProductInput. Erstellt ein neues, separates ProductInput in einer zusätzlichen Datenquelle.
Detaillierungsgrad der Daten Wird für bestimmte Felder eines einzelnen ProductInput ausgeführt. Wird für die gesamte ProductInput in der zusätzlichen Quelle ausgeführt.
Persistenz Änderungen bleiben erhalten, bis dieselbe ProductInput durch eine vollständige insert oder eine andere patch überschrieben wird. Die Dauerhaftigkeit wird durch Feedregeln gesteuert. Kann Primärdaten auf unbestimmte Zeit überschreiben, wenn dies in den Regeln festgelegt ist.
Regelinteraktion Kann ohne die Feed-Regeln verwendet werden, da eine vorhandene Datenquelle und ProductInput aktualisiert werden. Erfordert die explizite Einrichtung einer Regel für die primäre Quelle, um die zusätzliche Quelle zu verknüpfen.
Datenquelleneinrichtung Wird für eine vorhandene Datenquelle ausgeführt. Es sind keine neuen Quellen erforderlich. Erfordert das Erstellen und Verwalten separater zusätzlicher Datenquellen und das Verknüpfen dieser Quellen mithilfe von Feedregeln.