به‌روزرسانی‌های مکرر محصولات خود را انجام دهید

API فرعی محصولات به شما امکان می‌دهد تا به‌روزرسانی‌های جزئی محصولات موجود خود را انجام دهید. این برای تغییر مکرر داده‌ها، مانند قیمت و در دسترس بودن ایده‌آل است، زیرا از ارسال مجدد کل محصول برای یک تغییر کوچک جلوگیری می‌کند. با این حال، باید مرتباً محصولات را دوباره وارد کنید تا مطمئن شوید همه داده‌های محصول همگام هستند.

این راهنما نحوه استفاده از روش productinputs.patch برای به روز رسانی محصولات خود را پوشش می دهد.

پیش نیازها

قبل از اینکه بتوانید یک محصول را به روز کنید، به موارد زیر نیاز دارید:

جزئیات محصول خاص را به روز کنید

برای تغییر چند جزئیات یک محصول، مانند قیمت یا در دسترس بودن آن، بدون ارسال مجدد تمام اطلاعات آن، از روش productInputs.patch استفاده کنید.

در پارامتر updateMask می توانید مشخص کنید که کدام فیلدها را تغییر می دهید. updateMask فهرستی از فیلدهایی است که با کاما از هم جدا شده اند که می خواهید به روز کنید. روش patch به صورت زیر عمل می کند:

  • فیلدها در updateMask و body: این فیلدها با مقادیر جدید به روز می شوند.
  • فیلدها در updateMask اما نه در بدنه: این فیلدها از ورودی محصول حذف می شوند.
  • فیلدهایی که در updateMask نیستند: این فیلدها بدون تغییر باقی می مانند.
  • پارامتر updateMask omitted: تمام فیلدهای ارائه شده در بدنه درخواست به روز می شوند. فیلدهایی که در متن درخواست ارائه نشده اند از ورودی محصول حذف نمی شوند.

در اینجا نمونه ای از داده های محصول قبل از به روز رسانی آورده شده است:

{
  "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"
  }
}

این مثال title و availability یک محصول را به روز می کند و imageLink آن را حذف می کند. description و price در updateMask نیست و بدون تغییر باقی خواهد ماند.

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"
    }
 }
}

یک تماس موفق، منبع ProductInput به روز شده را برمی گرداند. title و availability به روز می شوند و imageLink حذف می شود زیرا در updateMask بود اما در بدنه درخواست نبود. description و price بدون تغییر باقی می مانند زیرا در updateMask ذکر نشده اند.

{
  "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"
    ],
  }
}

نمونه کد زیر نحوه به روز رسانی یک محصول را نشان می دهد.

جاوا

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();

پایتون

"""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"
   }
}'

به روز رسانی با استفاده از ویژگی های سفارشی

شما می توانید هر دو ویژگی استاندارد و سفارشی را در یک تماس به روز کنید. برای به‌روزرسانی یک ویژگی سفارشی، پیشوند نام آن را با customAttributes در updateMask قرار دهید.

این مثال چندین عمل را در یک درخواست انجام می دهد:

  • ویژگی title استاندارد را مستقیماً به روز می کند.
  • یک ویژگی سفارشی موجود ( myCustomAttrToBeUpdated ) را به روز می کند.
  • یک ویژگی سفارشی جدید ( myCustomAttrToBeInserted ) را درج می کند.
  • یک ویژگی سفارشی موجود ( 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"
    }
  ]
}

یک درخواست موفق، ProductInput به روز شده را برمی گرداند که همه تغییرات مشخص شده را منعکس می کند.

به روز رسانی ویژگی های سفارشی را درک کنید

می توانید از قسمت customAttributes برای به روز رسانی ویژگی هایی که خودتان تعریف کرده اید استفاده کنید. اینها با مشخصات استاندارد مطابقت ندارند و به عنوان ویژگی های سفارشی در محصول نهایی ذخیره می شوند.

نحوه پردازش به‌روزرسانی‌های محصول

هنگامی که یک درخواست patch ارسال می کنید، قبل از اعمال هر یک از قوانین، به روز رسانی به داده های ProductInput خاص اعمال می شود. این منجر به رفتار منسجم بین درج و به‌روزرسانی محصولات می‌شود.

نحوه پردازش به‌روزرسانی شما به این صورت است:

  1. ورودی به‌روزرسانی: درخواست patch شما، ProductInput خاص مرتبط با منبع داده‌ای را که ارائه کرده‌اید تغییر می‌دهد.

  2. پردازش و ادغام: پس از به روز رسانی ورودی، پردازش شروع می شود:

    • قوانین خوراک و منابع داده های تکمیلی: قوانین پیکربندی شده در منبع اصلی محصول، ProductInput از منابع اولیه و مکمل را ترکیب می کند. این قوانین می توانند ویژگی ها را تغییر دهند یا ویژگی های جدیدی را استخراج کنند. برای کسب اطلاعات بیشتر در مورد تنظیم قوانین، به مقاله https://support.google.com/merchants/answer/14994083 مراجعه کنید.
    • سایر منابع داده: داده های سایر منابع (به عنوان مثال بهبودهای خودکار) نیز با ورودی منبع داده اولیه ادغام می شوند.
    • اعتبارسنجی: داده‌های ادغام‌شده بر اساس مشخصات داده‌های محصول و خط‌مشی‌های خرید Google تأیید می‌شوند.
  3. محصول نهایی: نتیجه این خط لوله، منبع Product نهایی و پردازش شده است که می تواند با استفاده از products.get یا products.list برگردانده شود. این نیز نسخه ای از محصول است که در Merchant Center نشان داده شده است و واجد شرایط ظاهر شدن در مقاصد مختلف است.

به دلیل این فرآیند چند مرحله‌ای، معمولاً چند دقیقه بین ارسال درخواست به‌روزرسانی تا زمانی که تغییرات در منبع Product نهایی که می‌توانید با products.get بازیابی می‌کنید منعکس شود، تاخیر وجود دارد.

مثال: به‌روزرسانی یک محصول با یک ورودی اصلی

این رایج ترین مورد استفاده است. یک محصول در یک منبع داده اصلی وجود دارد و شما می خواهید برخی از ویژگی های آن را به روز کنید.

  1. حالت اولیه: محصولی en~US~SKU12345 در منبع داده اصلی شما با title: "Classic T-Shirt" و price: 15.99 USD وجود دارد.
  2. درخواست به‌روزرسانی: یک درخواست patch برای به‌روزرسانی price به 14.99 USD ارسال می‌کنید و availability را روی out of stock تنظیم می‌کنید.
  3. پردازش:
    • ProductInput برای SKU12345 به روز شده است.
  4. محصول نهایی: Product نهایی اکنون دارای title: "Classic T-Shirt" ، price: 14.99 USD و availability: "out of stock" .

مثال: به روز رسانی یک محصول با داده ها و قوانین تکمیلی

این مثال نشان می‌دهد که چگونه قوانین فید می‌توانند بر یک به‌روزرسانی تأثیر بگذارند و باعث اعمال برخی تغییرات در حالی که برخی دیگر لغو می‌شوند.

  1. حالت اولیه:
    • ورودی اصلی: en~US~SKU12345 دارای title: "Great T-Shirt" و description: "A great short-sleeve t-shirt." .
    • ورودی تکمیلی: همین محصول دارای یک ورودی در منبع اطلاعات تکمیلی با title: "Awesome T-Shirt" و description: "An awesome short-sleeve t-shirt." .
    • قانون خوراک: یک قانون تنظیم شده است تا title از منبع داده تکمیلی بگیرد. هیچ قانونی برای description وجود ندارد.
    • نتیجه: Product نهایی پردازش شده دارای title: "Awesome T-Shirt" و description: "A great short-sleeve t-shirt." .
  2. درخواست به‌روزرسانی: شما یک درخواست patch برای به‌روزرسانی منبع داده اصلی ارسال می‌کنید، title روی "Fantastic T-Shirt" و description روی "A fantastic short-sleeve t-shirt." .
  3. پردازش:
    • ProductInput در منبع داده اولیه به‌روزرسانی می‌شود تا دارای title: "Fantastic T-Shirt" و description: "A fantastic short-sleeve t-shirt." .
    • خط لوله پردازش اجرا می شود.
    • برای title ، قانون فید حکم می‌کند که مقدار منبع داده تکمیلی ( Awesome T-Shirt ) اولویت داشته باشد و به‌روزرسانی شما را لغو کند.
    • برای description ، از آنجایی که هیچ قاعده ای وجود ندارد، از مقدار به روز شده از ورودی اصلی ( A fantastic short-sleeve t-shirt. ) استفاده می شود.
  4. محصول نهایی: عنوان Product نهایی همچنان Awesome T-Shirt (به روز رسانی شما لغو شد)، اما توضیحات آن اکنون A fantastic short-sleeve t-shirt. (به روز رسانی شما اعمال شد).

بین به‌روزرسانی‌ها و منابع داده تکمیلی یکی را انتخاب کنید

می‌توانید داده‌های محصول را با استفاده از productinputs.patch یا با درج داده‌ها در منابع داده تکمیلی تغییر دهید. بهترین انتخاب به استراتژی مدیریت داده شما بستگی دارد.

برای جلوگیری از نتایج غیرقابل پیش‌بینی، توصیه می‌کنیم از هر دو منبع داده productinputs.patch و مکمل برای مدیریت داده‌های محصول یکسان برای یک محصول استفاده نکنید.

در اینجا یک مقایسه مفصل است:

ویژگی productinputs.patch (به روز رسانی) منابع داده های تکمیلی
بهترین برای تغییرات سریع، مکرر و جزئی در داده های موجود (به عنوان مثال، قیمت، در دسترس بودن). لایه بندی داده های منطقی جداگانه، مدیریت ویژگی های مختلف توسط سیستم های مختلف، یا لغو پیچیده مبتنی بر قوانین.
مکانیسم یک ProductInput موجود در محل را اصلاح می کند. یک ProductInput جدید و جداگانه در یک منبع داده تکمیلی ایجاد می کند.
دانه بندی داده ها در زمینه های خاصی از یک ProductInput واحد عمل می کند. روی کل ProductInput در منبع تکمیلی کار می کند.
ماندگاری تغییرات تا زمانی که همان ProductInput توسط یک insert کامل یا یک patch دیگر بازنویسی شود، ادامه دارند. ماندگاری توسط قوانین خوراک کنترل می شود. در صورتی که قوانین آن را اولویت بندی کنند، می تواند به طور نامحدود داده های اولیه را لغو کند.
تعامل قوانین می تواند بدون قوانین فید استفاده شود زیرا منبع داده و ProductInput موجود را به روز می کند. مستلزم تنظیم صریح یک قانون در منبع اصلی برای پیوند دادن منبع تکمیلی است.
راه اندازی منبع داده بر روی یک منبع داده موجود عمل می کند. نیازی به منابع جدید نیست نیاز به ایجاد و مدیریت منابع داده تکمیلی جداگانه و پیوند آنها با استفاده از قوانین فید دارد.