Sub-API Produk memungkinkan Anda melakukan pembaruan sebagian pada produk yang ada. Cara ini ideal untuk data yang sering berubah, seperti harga dan ketersediaan, karena Anda tidak perlu mengirim ulang seluruh produk untuk perubahan kecil. Namun, Anda harus memasukkan kembali produk secara rutin untuk memastikan semua data produk disinkronkan.
Panduan ini membahas cara menggunakan metode productinputs.patch
untuk memperbarui produk Anda.
Prasyarat
Sebelum dapat memperbarui produk, Anda memerlukan hal berikut:
- Produk yang ada untuk diperbarui. Untuk mempelajari cara membuat produk, lihat panduan Menambahkan dan mengelola produk.
name
sumber data tempat input produk berada (misalnya,accounts/12345/dataSources/67890
). Untuk mempelajari cara menemukannya, lihat panduan Mengelola sumber data API untuk upload produk.
Memperbarui detail produk tertentu
Untuk mengubah beberapa detail produk, seperti harga atau ketersediaannya, tanpa
mengirim ulang semua informasinya, gunakan metode
productInputs.patch
.
Anda dapat menentukan kolom yang diubah dalam parameter updateMask
. updateMask
adalah daftar kolom yang dipisahkan koma yang ingin Anda perbarui. Metode
patch
berperilaku sebagai berikut:
- Kolom di
updateMask
dan isi: Kolom ini diperbarui dengan nilai baru. - Kolom di
updateMask
tetapi tidak ada di isi email: Kolom ini dihapus dari input produk. - Kolom yang tidak ada di
updateMask
: Kolom ini tidak berubah. - Parameter
updateMask
tidak disertakan: Semua kolom yang diberikan dalam isi permintaan akan diperbarui. Kolom yang tidak diberikan dalam isi permintaan tidak dihapus dari input produk.
Berikut adalah contoh data produk sebelum pembaruan:
{
"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"
}
}
Contoh ini memperbarui title
dan availability
produk serta menghapus
imageLink
-nya. description
dan price
tidak ada di updateMask
dan akan
tetap tidak berubah.
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"
}
}
}
Panggilan yang berhasil akan menampilkan resource ProductInput
yang diperbarui. title
dan
availability
diperbarui, dan imageLink
dihapus karena berada di
updateMask
, tetapi tidak ada di isi permintaan. description
dan price
tetap
tidak berubah karena tidak tercantum dalam 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"
],
}
}
Contoh kode berikut menunjukkan cara memperbarui produk.
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"
}
}'
Memperbarui menggunakan atribut khusus
Anda dapat memperbarui atribut standar dan kustom dalam satu panggilan. Untuk memperbarui atribut kustom, tambahkan awalan customAttributes
pada namanya dengan updateMask
.
Contoh ini melakukan beberapa tindakan dalam satu permintaan:
- Memperbarui atribut
title
standar secara langsung. - Memperbarui atribut khusus yang ada (
myCustomAttrToBeUpdated
). - Menyisipkan atribut khusus baru (
myCustomAttrToBeInserted
). - Menghapus atribut khusus yang ada (
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"
}
]
}
Permintaan yang berhasil akan menampilkan ProductInput
yang telah diperbarui dan mencerminkan semua
perubahan yang ditentukan.
Memahami pembaruan atribut kustom
Anda dapat menggunakan kolom customAttributes
untuk memperbarui atribut yang telah Anda
tentukan sendiri. Atribut ini tidak dipetakan ke spesifikasi standar dan akan disimpan sebagai atribut kustom pada produk akhir.
Cara pembaruan produk diproses
Saat Anda mengirim permintaan patch
, update diterapkan ke data ProductInput
tertentusebelum aturan apa pun diterapkan. Hal ini menghasilkan perilaku yang konsisten antara penyisipan dan pembaruan produk.
Berikut cara pembaruan Anda diproses:
Perbarui Input: Permintaan
patch
Anda mengubahProductInput
tertentu yang terkait dengan sumber data yang Anda berikan.Memproses dan Menggabungkan: Setelah input diperbarui, pemrosesan dimulai:
- Aturan Feed dan Sumber Data Tambahan: Aturan yang dikonfigurasi di sumber utama produk menggabungkan
ProductInput
dari sumber utama dan sumber tambahan. Aturan ini dapat mengubah atribut atau mendapatkan atribut baru. Untuk mempelajari lebih lanjut cara menyiapkan aturan, lihat artikel https://support.google.com/merchants/answer/14994083. - Sumber data lainnya: Data dari sumber lain (misalnya, peningkatan otomatis) juga digabungkan dengan input sumber data utama.
- Validasi: Data gabungan divalidasi terhadap Spesifikasi data produk dan kebijakan Shopping Google.
- Aturan Feed dan Sumber Data Tambahan: Aturan yang dikonfigurasi di sumber utama produk menggabungkan
Produk Akhir: Hasil pipeline ini adalah resource
Product
akhir yang diproses yang dapat ditampilkan menggunakanproducts.get
atauproducts.list
. Ini juga merupakan versi produk yang ditampilkan di Merchant Center dan memenuhi syarat untuk muncul di berbagai tujuan.
Karena proses multi-langkah ini, ada penundaan, biasanya beberapa menit,
antara saat Anda mengirim permintaan pembaruan dan saat perubahan ditampilkan di
resource Product
akhir yang dapat Anda ambil dengan products.get
.
Contoh: Memperbarui produk dengan satu input utama
Ini adalah kasus penggunaan yang paling umum. Produk ada di satu sumber data utama, dan Anda ingin memperbarui beberapa atributnya.
- Kondisi Awal: Produk
en~US~SKU12345
ada di sumber data utama Anda dengantitle: "Classic T-Shirt"
danprice: 15.99 USD
. - Permintaan Pembaruan: Anda mengirim permintaan
patch
untuk memperbaruiprice
ke14.99 USD
dan menetapkanavailability
keout of stock
. - Memproses:
ProductInput
untukSKU12345
diperbarui.
- Produk Akhir:
Product
akhir kini memilikititle: "Classic T-Shirt"
,price: 14.99 USD
, danavailability: "out of stock"
.
Contoh: Memperbarui produk dengan data dan aturan tambahan
Contoh ini menunjukkan bagaimana aturan feed dapat memengaruhi pembaruan, sehingga beberapa perubahan diterapkan sementara yang lain diganti.
- Status Awal:
- Input Utama:
en~US~SKU12345
memilikititle: "Great T-Shirt"
dandescription: "A great short-sleeve t-shirt."
. - Input Tambahan: Produk yang sama memiliki entri di sumber data tambahan dengan
title: "Awesome T-Shirt"
dandescription: "An awesome short-sleeve t-shirt."
. - Aturan Feed: Aturan ditetapkan untuk mengambil
title
dari sumber data tambahan. Tidak ada aturan untukdescription
. - Hasil:
Product
yang diproses terakhir memilikititle: "Awesome T-Shirt"
dandescription: "A great short-sleeve t-shirt."
.
- Input Utama:
- Permintaan Pembaruan: Anda mengirim permintaan
patch
untuk memperbarui sumber data utama, menetapkantitle
ke"Fantastic T-Shirt"
dandescription
ke"A fantastic short-sleeve t-shirt."
. - Memproses:
ProductInput
di sumber data utama diperbarui agar memilikititle: "Fantastic T-Shirt"
dandescription: "A fantastic short-sleeve t-shirt."
.- Pipeline pemrosesan berjalan.
- Untuk
title
, aturan feed menyatakan bahwa nilai dari sumber data tambahan (Awesome T-Shirt
) lebih diprioritaskan, sehingga menggantikan pembaruan Anda. - Untuk
description
, karena tidak ada aturan penggantian, nilai yang diperbarui dari input utama (A fantastic short-sleeve t-shirt.
) akan digunakan.
- Produk Akhir: Judul
Product
akhir tetapAwesome T-Shirt
(pembaruan Anda diganti), tetapi deskripsinya kini adalahA fantastic short-sleeve t-shirt.
(pembaruan Anda diterapkan).
Memilih antara pembaruan dan sumber data tambahan
Anda dapat mengubah data produk menggunakan productinputs.patch
atau dengan menyisipkan
data ke dalam sumber data tambahan. Pilihan terbaik bergantung pada strategi pengelolaan data Anda.
Untuk menghindari hasil yang tidak dapat diprediksi, sebaiknya jangan gunakan
productinputs.patch
dan sumber data tambahan untuk mengelola data produk yang sama
untuk produk yang sama.
Berikut perbandingan mendetailnya:
Fitur | productinputs.patch (Pembaruan) |
Sumber Data Tambahan |
---|---|---|
Terbaik Untuk | Perubahan sebagian yang cepat dan sering pada data yang ada (misalnya, harga, ketersediaan). | Menyusun data yang terpisah secara logis, mengelola berbagai atribut oleh sistem yang berbeda, atau penggantian berbasis aturan yang kompleks. |
Mekanisme | Mengubah ProductInput yang ada di tempatnya. |
Membuat ProductInput baru yang terpisah di sumber data tambahan. |
Perincian Data | Beroperasi pada kolom tertentu dari satu ProductInput . |
Beroperasi di seluruh ProductInput dalam sumber tambahan. |
Persistensi | Perubahan akan tetap ada hingga ProductInput yang sama ditimpa oleh insert lengkap atau patch lain. |
Persistensi dikontrol oleh aturan feed. Dapat menggantikan data utama tanpa batas waktu jika aturan memprioritaskannya. |
Interaksi Aturan | Dapat digunakan tanpa aturan feed karena memperbarui sumber data & ProductInput yang ada. |
Memerlukan penyiapan aturan secara eksplisit di sumber utama untuk menautkan sumber tambahan. |
Penyiapan Sumber Data | Beroperasi pada sumber data yang ada. Tidak memerlukan sumber baru. | Memerlukan pembuatan dan pengelolaan sumber data tambahan terpisah serta menautkannya menggunakan aturan feed. |