patch method
- ProductInput request,
- String name, {
- String? dataSource,
- String? updateMask,
- String? $fields,
Updates the existing product input in your Merchant Center account.
The name of the product input to update is taken from the name field
within the ProductInput resource. After inserting, updating, or deleting
a product input, it may take several minutes before the processed product
can be retrieved.
request - The metadata request object.
Request parameters:
name - Identifier. The name of the product. Format:
accounts/{account}/productInputs/{productinput} The {productinput}
segment is a unique identifier for the product. This identifier must be
unique within a merchant account and generally follows the structure:
content_language~feed_label~offer_id. Example: en~US~sku123 For legacy
local products, the structure is:
local~content_language~feed_label~offer_id. Example:
local~en~US~sku123 The format of the {productinput} segment in the URL
is automatically detected by the server, supporting two options: 1.
Encoded Format: The {productinput} segment is an unpadded base64url
encoded string (RFC 4648 Section 5). The decoded string must result in the
content_language~feed_label~offer_id structure. This encoding MUST be
used if any part of the product identifier (like offer_id) contains
characters such as /, %, or ~. * Example: To represent the product
ID en~US~sku/123, the {productinput} segment must be the base64url
encoding of this string, which is ZW5-VVMtc2t1LzEyMw. The full resource
name for the product would be
accounts/123/productinputs/ZW5-VVMtc2t1LzEyMw. 2. Plain Format: The
{productinput} segment is the tilde-separated string
content_language~feed_label~offer_id. This format is suitable only when
content_language, feed_label, and offer_id do not contain
URL-problematic characters like /, %, or ~. We recommend using the
Encoded Format for all product IDs to ensure correct parsing,
especially those containing special characters. The presence of tilde
(~) characters in the {productinput} segment is used to differentiate
between the two formats. Note: For calls to the v1beta version, the plain
format is channel~content_language~feed_label~offer_id, for example:
accounts/123/productinputs/online~en~US~sku123.
Value must have pattern ^accounts/\[^/\]+/productInputs/\[^/\]+$.
dataSource - Required. The primary or supplemental product data source
where data_source name identifies the product input to be updated. Only
API data sources are supported. Format:
accounts/{account}/dataSources/{datasource}. For example,
accounts/123456/dataSources/104628.
updateMask - Optional. The list of product attributes to be updated. If
the update mask is omitted, then it is treated as implied field mask
equivalent to all fields that are populated (have a non-empty value).
Attributes specified in the update mask without a value specified in the
body will be deleted from the product. Update mask can only be specified
for top level fields in attributes and custom attributes. To specify the
update mask for custom attributes you need to add the custom_attribute.
prefix. Providing special "*" value for full product replacement is not
supported.
$fields - Selector specifying which fields to include in a partial
response.
Completes with a ProductInput.
Completes with a commons.ApiRequestError if the API endpoint returned an error.
If the used http.Client completes with an error when making a REST call,
this method will complete with the same error.
Implementation
async.Future<ProductInput> patch(
ProductInput request,
core.String name, {
core.String? dataSource,
core.String? updateMask,
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
'dataSource': ?dataSource == null ? null : [dataSource],
'updateMask': ?updateMask == null ? null : [updateMask],
'fields': ?$fields == null ? null : [$fields],
};
final url_ = 'products/v1/' + core.Uri.encodeFull('$name');
final response_ = await _requester.request(
url_,
'PATCH',
body: body_,
queryParams: queryParams_,
);
return ProductInput.fromJson(
response_ as core.Map<core.String, core.dynamic>,
);
}