อัปเดตผลิตภัณฑ์เป็นประจำ

Sub-API ของผลิตภัณฑ์ช่วยให้คุณอัปเดตผลิตภัณฑ์ที่มีอยู่ได้บางส่วน วิธีนี้เหมาะอย่างยิ่งสำหรับข้อมูลที่มีการเปลี่ยนแปลงบ่อยครั้ง เช่น ราคาและความพร้อมจำหน่ายสินค้า เนื่องจากไม่จำเป็นต้องส่งผลิตภัณฑ์ทั้งหมดอีกครั้งสำหรับการเปลี่ยนแปลงเล็กๆ น้อยๆ อย่างไรก็ตาม คุณควรแทรกผลิตภัณฑ์อีกครั้งเป็นประจำเพื่อให้แน่ใจว่าข้อมูลผลิตภัณฑ์ทั้งหมดซิงค์กัน

คู่มือนี้ครอบคลุมวิธีใช้productinputs.patchเพื่ออัปเดตผลิตภัณฑ์

ข้อกำหนดเบื้องต้น

ก่อนที่จะอัปเดตผลิตภัณฑ์ได้ คุณต้องมีสิ่งต่อไปนี้

อัปเดตรายละเอียดผลิตภัณฑ์ที่เฉพาะเจาะจง

หากต้องการเปลี่ยนรายละเอียดบางอย่างของผลิตภัณฑ์ เช่น ราคาหรือความพร้อมจำหน่ายสินค้า โดยไม่ต้องส่งข้อมูลทั้งหมดของผลิตภัณฑ์อีกครั้ง ให้ใช้วิธีproductInputs.patch

คุณระบุฟิลด์ที่จะเปลี่ยนแปลงได้ในพารามิเตอร์ updateMask updateMask คือรายการฟิลด์ที่ต้องการอัปเดตซึ่งคั่นด้วยคอมมา เมธอด patchจะทำงานดังนี้

  • ฟิลด์ใน updateMask และเนื้อหา: ฟิลด์เหล่านี้จะอัปเดตด้วยค่าใหม่
  • ฟิลด์ใน updateMask แต่ไม่อยู่ในเนื้อหา: ระบบจะลบฟิลด์เหล่านี้ออกจาก ข้อมูลผลิตภัณฑ์
  • ฟิลด์ที่ไม่ได้อยู่ใน updateMask: ระบบจะไม่เปลี่ยนแปลงฟิลด์เหล่านี้
  • 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",
    "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"
    ],
  }
}

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีอัปเดตผลิตภัณฑ์

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

อัปเดตโดยใช้แอตทริบิวต์ที่กำหนดเอง

คุณอัปเดตได้ทั้งแอตทริบิวต์มาตรฐานและแอตทริบิวต์ที่กำหนดเองในการเรียกครั้งเดียว หากต้องการอัปเดตแอตทริบิวต์ที่กำหนดเอง ให้ใส่คำนำหน้าชื่อด้วย 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 จากแหล่งที่มาหลักและแหล่งที่มาเสริม กฎเหล่านี้สามารถเปลี่ยนแอตทริบิวต์หรือสร้างแอตทริบิวต์ใหม่ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่ากฎได้ที่ตั้งค่ากฎแอตทริบิวต์
    • แหล่งข้อมูลอื่นๆ: ระบบจะผสานข้อมูลจากแหล่งอื่นๆ (เช่น การปรับปรุงอัตโนมัติ) เข้ากับอินพุตแหล่งข้อมูลหลักด้วย
    • การตรวจสอบ: ระบบจะตรวจสอบข้อมูลที่ผสานกับข้อกำหนดข้อมูลผลิตภัณฑ์และนโยบายการช็อปปิ้งของ Google
  3. ผลิตภัณฑ์สุดท้าย: ผลลัพธ์ของไปป์ไลน์นี้คือทรัพยากร Product ที่ประมวลผลแล้วขั้นสุดท้าย ซึ่งสามารถแสดงผลได้โดยใช้ products.get หรือ products.list นอกจากนี้ ยังเป็นผลิตภัณฑ์เวอร์ชันที่แสดงใน Merchant Center และมีสิทธิ์ปรากฏในปลายทางต่างๆ

เนื่องจากกระบวนการแบบหลายขั้นตอนนี้ จึงมีความล่าช้าเกิดขึ้น โดยปกติจะใช้เวลา 2-3 นาที ระหว่างที่คุณส่งคำขออัปเดตกับเวลาที่การเปลี่ยนแปลงแสดงใน แหล่งข้อมูล 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 ที่มีอยู่ ต้องตั้งค่ากฎในแหล่งข้อมูลหลักอย่างชัดเจนเพื่อลิงก์แหล่งข้อมูลเสริม
การตั้งค่าแหล่งข้อมูล ทำงานกับแหล่งข้อมูลที่มีอยู่ ไม่ต้องใช้แหล่งข้อมูลใหม่ ต้องสร้างและจัดการแหล่งข้อมูลเสริมแยกต่างหาก แล้วลิงก์แหล่งข้อมูลเหล่านั้นโดยใช้กฎฟีด