How to read and write values for characteristics

This document describes how you can use the service api to read and write item, product or variant values for characteristics.

Characteristics are the new alternative to attributes. They allow to store additional data on products, variants and items without the need to adjust the repository and without the restriction to have the information on each and every product, variant and item. Characteristics are similar to attributes in that you can configure them to have a specific data type and define if they are mandatory or multi value. They are also dynamic in nature and can be changed during runtime. In contrast to attributes, they allow a hierarchy of values and dependencies between them. This allows for a value to only be maintained dependent on the selected value for the parent characteristic.

Please see the Knowledge Base article "Characteristics - Dynamic data model" for more details on the possibilities and the general handling within Product 360.

The Service API for characteristics follows the general List API contract and has the same parameters. Please make yourself familiar with the REST List API before you read this how-to.

Definitions

Name

Characteristic

The model definition. Name, Datatype, Lookup Values, etc.

CharacteristicRecord

A characteristic record contains the actual value for the characteristic for a specific entity-item like item, product or variant.
Additionally to the value itself it also contains the reference to the characteristic as well as a unique key of the record and the reference to the parent record.

ArticleCharacteristicValue,
Product2GCharacteristicValue,
VariantCharacteristicValue

The repository entity for a characteristic record of the corresponding root entity

SimpleArticleCharacteristicValue,
SimpleProduct2GCharacteristicValue,
SimpleVariantCharacteristicValue

The repository entity for a simple characteristic record of the corresponding root entity.

A simple characteristic is a root characteristic without children. Values for simple characteristics can be assigned to items, products or variants by specifying only the simple characteristic and the language.

Qualifications

Qualification

Datatype

characteristic

ENTITY_ITEM

The characteristic to which this value belongs as ENTITY_ITEM

rootCharacteristic

ENTITY_ITEM

The root characteristic (not necessarily the parent) of the characteristic as ENTITY_ITEM.
This qualification is only used for read access, it can be omitted for write requests.

recordKey

String

The key of the characteristic record, is unique within the characteristic. The default value for this qualification is 0000.0000.RKThe record key is mandatory in case there are multiple records for the same characteristic. We recommend to use the default record key as long as you don't have multiple records for the same characteristic,
this will allow you to obtain values for this characteristic also by means of fully qualifying a field.

language

String

The key or code or name of the language in which the value should be interpreted. This defaults to -1 for characteristics which are not defined as language specific.
Only Text or MIME characteristics can be language dependent.

Datatypes

Characteristic Datatype

Corresponding Rest Datatype

TEXT

STRING

INTEGER

INTEGER

DECIMAL

DECIMAL

BOOLEAN

BOOLEAN

DATE

DATE

DATETIME

DATETIME

MIME

MIME_VALUE

LOOKUP

ENTITY_ITEM

NONE

This datatype is typically used to build logical groups of characteristics with a common parent.
For example: Dimensions with the children height, width and depth.
Records of characteristics with this datatype do not hold an own value.

Fields

The field which contains the actual value of a characteristic record is ArticleCharacteristicValueLang.Value

This field is always a multi-value field which means it will always be returned as array. Some characteristics are multi-value and others are not, in this case the client can treat them all the same. The datatype with regards to the Service API is ANY, which means any of the datatypes which are supported by the characteristics will be returned - depending on the definition of the record's characteristic.

Special Case: LookupValues

In order to provide the generic Field transition functionality for characteristic values of datatype lookup a specialized field is provided: ArticleCharacteristicValue.LookupValue

This field only contains a value if the datatype of the characteristic is lookup value and it can actually be used to build a transition field like: ArticleCharacteristicValue.LookupValue→LookupValueLang.Description(de) which would return the German description of this lookup value.

Read Access

CharacteristicsValues can be read in the same way as any other sub-entity can be read. Either by fully qualifying a field parameter with all qualifications or by requesting all records for this sub-entity and specifying some of the qualifications as optional filters.

The nature of the characteristics makes it not easy to use in a fully qualified manner, as the recordKey can be different for each item/characteristic combination.
So one fully qualified column might not return values for all items in the table as the record key must not match.

Examples based on the root entity

As mentioned above, reading characteristic values with fully qualified fields is difficult in general. But it is quite easy for simple characteristics as the following examples show.

GET Simple characteristic values for Item

http://<server>:<port>/rest/V2.0/list/Article/bySearch?query=Article.SupplierAID startsWith "ItemRestTest"&fields=SimpleArticleCharacteristicValueLang.Value(COLOR,-1),SimpleArticleCharacteristicValueLang.Value(STATEMENT,en),SimpleArticleCharacteristicValueLang.Value(STATEMENT,de)&includeLabels=true

As a result the following structure of characteristic values will be provided

Simple characteristic values for Item
{
"cacheId": "no-cache",
"entityIdentifier": "Article",
"totalSize": 2,
"startIndex": 0,
"pageSize": 100,
"rowCount": 2,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "158684@1",
"label": "ItemRestTest",
"entityId": 1000
},
"values": [
[
{
"id": "1455@945",
"label": "green",
"entityId": 7300
}
],
[
"Statement"
],
[
"Erklärung"
]
]
},
{
"object": {
"id": "158685@1",
"label": "ItemRestTest2",
"entityId": 1000
},
"values": [
[
{
"id": "1456@945",
"label": "blue",
"entityId": 7300
}
],
[
"No statement necessary"
],
[
"Keine Erklärung nötig"
]
]
}
]
}

GET MIME value meta data and MIME values for Product

GET MIME value meta data for Product

http://<server>:<port>/rest/V2.0/list/Product2G/bySearch?query=Product2G.ProductNo startsWith "RestTestProduct"&fields=SimpleProduct2GCharacteristicValueLang.Value(LOGO,-1)&includeLabels=true

As a result the following structure of characteristic values will be provided

MIME values meta data for Product
{
"cacheId": "no-cache",
"entityIdentifier": "Product2G",
"totalSize": 2,
"startIndex": 0,
"pageSize": 100,
"rowCount": 2,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "158686@1",
"label": "RestTestProduct",
"entityId": 1100
},
"values": [
[
{
"label": "logo.png",
"mimeType": "image/png",
"relativeFilePath": "29\\27\\19\\logo.908f8b16002fbfb2_4955b4f5_170d4d6aaae_-7e4a.png"
}
]
]
},
{
"object": {
"id": "158687@1",
"label": "RestTestProduct2",
"entityId": 1100
},
"values": [
[
{
"label": "logo_global.png",
"mimeType": "image/png",
"relativeFilePath": "10\\46\\16\\logo_global.908f8b16002fbfb2_4955b4f5_170d4d6aaae_-7e3b.png"
}
]
]
}
]
}

GET MIME values for Product

http://<server>:<port>/rest/V2.0/list/Product2G/mimes/bySearch?query=Product2G.ProductNo startsWith "RestTestProduct"&fields=SimpleProduct2GCharacteristicValueLang.Value(LOGO,-1)&includeLabels=true

As result a zip file containing the MIME files will be provided

Examples based on the sub-entity

GET Characteristic values for Item

http://<server>:<port>/rest/V2.0/list/Article/ArticleCharacteristicValue/bySearch?query=Article.SupplierAID equals "ArticleRestTest"&fields=ArticleCharacteristicValue.RecordKey,ArticleCharacteristicValueLang.Value&includeLabels=true

As a result the following structure of characteristic values will be provided

Characteristic values for Items
{
"cacheId": "no-cache",
"entityIdentifier": "ArticleCharacteristicValue",
"totalSize": 1,
"startIndex": 0,
"pageSize": 100,
"rowCount": 1,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "10126@1",
"label": "ArticleRestTest",
"entityId": 1000
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "10769",
"label": "LookupRestArticleTestCharacteristic [LookupRestArticleTestCharacteristic]",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "",
"characteristic": {
"id": "10769",
"label": "LookupRestArticleTestCharacteristic [LookupRestArticleTestCharacteristic]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
{
"id": "10615@3",
"label": "ActualValue",
"entityId": 7300
}
]
]
}
]
}

GET Characteristic values for Product

http://<server>:<port>/rest/V2.0/list/Product2G/Product2GCharacteristicValue/bySearch?query=Product2G.ProductNo equals "RestTestProductNo"&fields=Product2GCharacteristicValue.RecordKey,Product2GCharacteristicValueLang.Value&includeLabels=true

As a result the following structure of characteristic values will be provided

Characteristic values for Product
{
"cacheId": "no-cache",
"entityIdentifier": "Product2GCharacteristicValue",
"totalSize": 1,
"startIndex": 0,
"pageSize": 100,
"rowCount": 10,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "10123@1",
"label": "RestTestProductNo",
"entityId": 1100
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "10759",
"label": "TextRestTestCharacteristic [TextRestTestCharacteristic]",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "-1",
"characteristic": {
"id": "10759",
"label": "TextRestTestCharacteristic [TextRestTestCharacteristic]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
"TextRestTestCharacteristicValue"
]
]
},
]
}

GET Characteristic values for Variant

http://<server>:<port>/rest/V2.0/list/Variant/VariantCharacteristicValue/bySearch?query=Variant.VariantNo equals "VariantRestTest"&fields=VariantCharacteristicValue.RecordKey,VariantCharacteristicValueLang.Value&includeLabels=true

As a result the following structure of characteristic values will be provided

Characteristic values for Variant
{
"cacheId": "no-cache",
"entityIdentifier": "VariantCharacteristicValue",
"totalSize": 1,
"startIndex": 0,
"pageSize": 100,
"rowCount": 10,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "10123@1",
"label": "RestTestVariantNo",
"entityId": 1100
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "10759",
"label": "TextRestTestCharacteristic [TextRestTestCharacteristic]",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "-1",
"characteristic": {
"id": "10759",
"label": "TextRestTestCharacteristic [TextRestTestCharacteristic]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
"TextRestTestCharacteristicValue"
]
]
},
]
}

GET Characteristic values and lookup value codes for Item

http://<server>:<port>/rest/V2.0/list/Article/ArticleCharacteristicValue/bySearch?query=Article.SupplierAID equals "ItemRestTest"&fields=ArticleCharacteristicValue.RecordKey,ArticleCharacteristicValueLang.Value,ArticleCharacteristicValue.LookupValue -> LookupValue.Code&includeLabels=true

As a result the following structure of characteristic values and lookup value codes will be provided

Characteristic values and lookup value codes for Item
{
"cacheId": "no-cache",
"entityIdentifier": "ArticleCharacteristicValue",
"totalSize": 1,
"startIndex": 0,
"pageSize": 100,
"rowCount": 1,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "158684@1",
"label": "ItemRestTest",
"entityId": 1000
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "3422",
"label": "Color [COLOR]",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "-1",
"characteristic": {
"id": "3422",
"label": "Color [COLOR]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
{
"id": "1455@945",
"label": "green",
"entityId": 7300
}
],
"GREEN"
]
}
]
}

GET Characteristic values for Item for specific languages

http://<server>:<port>/rest/V2.0/list/Article/ArticleCharacteristicValue/bySearch?query=Article.SupplierAID equals "ItemRestTest"&fields=ArticleCharacteristicValueLang.Value&includeLabels=true&qualificationFilter=language(en,de,fr)

As a result the following structure of characteristic values will be provided

Characteristic values for Item for speficic languages
{
"cacheId": "no-cache",
"entityIdentifier": "ArticleCharacteristicValue",
"totalSize": 1,
"startIndex": 0,
"pageSize": 100,
"rowCount": 3,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "158684@1",
"label": "ItemRestTest",
"entityId": 1000
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "4300",
"label": "Statement [STATEMENT]",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "9",
"characteristic": {
"id": "4300",
"label": "Statement [STATEMENT]",
"entityId": 8000
}
},
"values": [
[
"Statement"
]
]
},
{
"object": {
"id": "158684@1",
"label": "ItemRestTest",
"entityId": 1000
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "4300",
"label": "Statement [STATEMENT]",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "12",
"characteristic": {
"id": "4300",
"label": "Statement [STATEMENT]",
"entityId": 8000
}
},
"values": [
[
"Déclaration"
]
]
},
{
"object": {
"id": "158684@1",
"label": "ItemRestTest",
"entityId": 1000
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "4300",
"label": "Statement [STATEMENT]",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "7",
"characteristic": {
"id": "4300",
"label": "Statement [STATEMENT]",
"entityId": 8000
}
},
"values": [
[
"Erklärung"
]
]
}
]
}

GET versioned Characteristic values for Product

http://<server>:<port>/rest/V2.0/list/Product2G/Product2GCharacteristicValue/bySearch?query=Product2G.ProductNo equals "P_3"&revision='ProductVersion2'&fields=Product2GCharacteristicValue.RecordKey,Product2GCharacteristicValueLang.Value&includeLabels=true

As a result the following structure of characteristic values will be provided

Versioned Characteristic values for Product
{
"cacheId": "no-cache",
"entityIdentifier": "Product2GCharacteristicValue",
"revision": {
"id": "10",
"label": "ProductVersion2",
"entityId": 5600
},
"totalSize": 1,
"startIndex": 0,
"pageSize": 100,
"rowCount": 5,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "17@1",
"label": "P_3",
"entityId": 1100
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
},
"parentRecordKey": "0000.0000.RK",
"language": "-1",
"characteristic": {
"id": "26",
"label": "Coupon family code [couponFamilyCode]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
"54321"
]
]
},
{
"object": {
"id": "17@1",
"label": "P_3",
"entityId": 1100
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "",
"characteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
""
]
]
},
{
"object": {
"id": "17@1",
"label": "P_3",
"entityId": 1100
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
},
"parentRecordKey": "0000.0000.RK",
"language": "7",
"characteristic": {
"id": "31",
"label": "Included accessories [tradeItemIncludedAccessories]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
"Version ProductVersion2"
]
]
},
{
"object": {
"id": "17@1",
"label": "P_3",
"entityId": 1100
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
},
"parentRecordKey": "0000.0000.RK",
"language": "9",
"characteristic": {
"id": "31",
"label": "Included accessories [tradeItemIncludedAccessories]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
"Version ProductVersion2"
]
]
},
{
"object": {
"id": "17@1",
"label": "P_3",
"entityId": 1100
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
},
"parentRecordKey": "0000.0000.RK",
"language": "-1",
"characteristic": {
"id": "25",
"label": "Build-In product type [buildInProductType]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
"Version ProductVersion2"
]
]
}
]
}

GET versioned Characteristic values for Variant

http://<server>:<port>/rest/V2.0/list/Variant/VariantCharacteristicValue/bySearch?query=Variant.VariantNo equals "V_3"&revision='ProductVersion2'&fields=VariantCharacteristicValue.RecordKey,VariantCharacteristicValueLang.Value&includeLabels=true

As a result the following structure of characteristic values will be provided

Versioned Characteristic values for Variant
{
"cacheId": "no-cache",
"entityIdentifier": "VariantCharacteristicValue",
"revision": {
"id": "10",
"label": "ProductVersion2",
"entityId": 5600
},
"totalSize": 1,
"startIndex": 0,
"pageSize": 100,
"rowCount": 2,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "94@1",
"label": "V_3",
"entityId": 1200
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "",
"characteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
""
]
]
},
{
"object": {
"id": "94@1",
"label": "V_3",
"entityId": 1200
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
},
"parentRecordKey": "0000.0000.RK",
"language": "9",
"characteristic": {
"id": "39",
"label": "Key words [tradeItemKeyWords]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
"Variant versioned with product in ProductVersion2"
]
]
}
]
}

GET versioned Characteristic values for Item

http://<server>:<port>/rest/V2.0/list/Article/ArticleCharacteristicValue/bySearch?query=Article.SupplierAID equals "I_3"&revision='ProductVersion2'&fields=ArticleCharacteristicValue.RecordKey,ArticleCharacteristicValueLang.Value&includeLabels=true

As a result the following structure of characteristic values will be provided

Versioned Characteristic values for Item
{
"cacheId": "no-cache",
"entityIdentifier": "ArticleCharacteristicValue",
"revision": {
"id": "10",
"label": "ProductVersion2",
"entityId": 5600
},
"totalSize": 1,
"startIndex": 0,
"pageSize": 100,
"rowCount": 2,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "95@1",
"label": "I_3",
"entityId": 1000
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
},
"parentRecordKey": "0000.0000.RK",
"language": "9",
"characteristic": {
"id": "39",
"label": "Key words [tradeItemKeyWords]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
"Item versioned with variant and product in ProductVersion2"
]
]
},
{
"object": {
"id": "95@1",
"label": "I_3",
"entityId": 1000
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "",
"characteristic": {
"id": "24",
"label": "Marketing information [marketingInformation]",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
""
]
]
}
]
}

GET Characteristic values including unavailable records for Item

http://<server>:<port>/rest/V2.0/list/Article/ArticleCharacteristicValue/bySearch?query=Article.SupplierAID equals "UnavailableCharacteristicTest"&fields=ArticleCharacteristicValue.RecordKey,ArticleCharacteristicValueLang.Value
&includeUnavailable=true

As a result the following structure of characteristic values will be provided

Characteristic values for Item including unavailable records
{
"cacheId": "no-cache",
"entityIdentifier": "ArticleCharacteristicValue",
"totalSize": 1,
"startIndex": 0,
"pageSize": 100,
"rowCount": 1,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "10127@1",
"entityId": 1000
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "10770",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "-1",
"characteristic": {
"id": "10770",
"entityId": 8000
}
},
"values": [
"0000.0000.RK",
[
"Some Unavailable Value"
]
]
}
]
}

GET MIME value metadata and MIME values for Product

GET MIME value metadata for Product

http://<server>:<port>/rest/V2.0/list/Product2G/Product2GCharacteristicValue/bySearch?query=Product2G.ProductNo equals "RestTestProductNo"&fields=Product2GCharacteristicValueLang.Value&includeLabels=true
MIME value metadata for Product
{
"cacheId": "no-cache",
"entityIdentifier": "Product2GCharacteristicValue",
"totalSize": 1,
"startIndex": 0,
"pageSize": 100,
"rowCount": 10,
"columnCount": 0,
"columns": [],
"rows": [
{
"object": {
"id": "10123@1",
"label": "RestTestProductNo",
"entityId": 1100
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "10765",
"label": "MimeRestTestCharacteristic [MimeRestTestCharacteristic]",
"entityId": 8000
},
"parentRecordKey": "root",
"language": "-1",
"characteristic": {
"id": "10765",
"label": "MimeRestTestCharacteristic [MimeRestTestCharacteristic]",
"entityId": 8000
}
},
"values": [
[
{
"label": "880x495_cmsv2_298e3b01-877d-57e3-9ce0-0542084c5af4-3217366.jpg",
"mimeType": "image/jpeg",
"relativeFilePath": "35\\18\\14\\880x495_cmsv2_298e3b.b245cc1ddda0ddd7_1023f19d_16bad3f75bb_-7bf7.jpg"
}
]
]
}
]
}

GET MIME values for Product

http://<server>:<port>/rest/V2.0/list/Product2G/Product2GCharacteristicValue/mimes/bySearch?query=Product2G.ProductNo equals "RestTestProductNo"&fields=Product2GCharacteristicValueLang.Value

As result a zip file containing the MIME files will be provided

Write Access

Examples based on the root entity

As mentioned above, writing characteristic values with fully qualified fields is difficult in general. But it is quite easy for simple characteristics as the following example show.

POST Simple characteristic values for Item

http://<server>:<port>/rest/V2.0/list/Article

This POST request requires the following request body

Simple characteristic values for Item
{
"columns": [
{ "identifier": "SimpleArticleCharacteristicValueLang.Value(STATEMENT,en)" },
{ "identifier": "SimpleArticleCharacteristicValueLang.Value(STATEMENT,de)" },
{ "identifier": "SimpleArticleCharacteristicValueLang.Value(STATEMENT,fr)" }
],
"rows": [
{
"object": { "id": "'ItemRestTest'@'MASTER'" }
,
"values": [
"Another EN statement",
"Another DE statement",
"Another FR statement"
]
}
]
}

As a result the following answer will be provided

Simple characteristic values for Item Result
{
"counters": {
"errors": 0,
"warnings": 0,
"createdObjects": 0,
"updatedObjects": 1,
"objectsWithErrors": 0,
"objectsWithWarnings": 0
},
"entries": [],
"objects": [
{
"row": 0,
"object": {
"id": "2@1",
"label": "ItemRestTest",
"entityId": 1000
},
"status": [
"UPDATED"
]
}
]
}

Examples based on the sub-entity

POST Characteristic values for Item: lookup value

http://<server>:<port>/rest/V2.0/list/Article/ArticleCharacteristicValue

This POST request requires the following request body

Characteristic values for Item
{
"columns": [
{
"identifier": "ArticleCharacteristicValueLang.Value"
}
],
"rows": [
{
"object": {
"id": "10126@1"
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "10769"
},
"parentRecordKey": "root",
"language": "-1",
"characteristic": {
"id": "10769",
"label": "LookupRestArticleTestCharacteristic [LookupRestArticleTestCharacteristic]",
"entityId": 8000
}
},
"values": [
[
{
"id": "10617@3",
"label": "ActualLookupValueLabel",
"entityId": 7300
}
]
]
}
]
}

As a result the following answer will be provided

Characteristic values for Item Result
{
"counters": {
"errors": 0,
"warnings": 0,
"createdObjects": 0,
"updatedObjects": 1,
"objectsWithErrors": 0,
"objectsWithWarnings": 0
},
"entries": [],
"objects": [
{
"row": 0,
"object": {
"id": "10126@1",
"label": "ArticleRestTest",
"entityId": 1100
},
"status": [
"UPDATED"
]
}
]
}

POST Characteristic values for Product:: language-dependent string values

http://<server>:<port>/rest/V2.0/list/Product2G/Product2GCharacteristicValue

This POST request requires the following request body

Characteristic values for Product
{
"columns": [
{
"identifier": "Product2GCharacteristicValueLang.Value"
}
],
"rows": [
{
"object": {
"id": "'RestTestProduct'@'MASTER'"
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "4300"
},
"parentRecordKey": "root",
"language": "de",
"characteristic": {
"id": "4300"
}
},
"values": [
[
"CHANGED German statement"
]
]
},
{
"object": {
"id": "'RestTestProduct'@'MASTER'"
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "4300"
},
"parentRecordKey": "root",
"language": "en",
"characteristic": {
"id": "4300"
}
},
"values": [
[
"CHANGED English statement"
]
]
}
]
}

As a result the following answer will be provided

Characteristic values for Product Result
{
"counters": {
"errors": 0,
"warnings": 0,
"createdObjects": 0,
"updatedObjects": 1,
"objectsWithErrors": 0,
"objectsWithWarnings": 0
},
"entries": [],
"objects": [
{
"row": 0,
"object": {
"id": "158686@1",
"label": "RestTestProduct",
"entityId": 1100
},
"status": [
"UPDATED"
]
}
]

POST Characteristic values for Variant: MIME values

Step 1: Upload MIME zip file

In a first step you have to upload a zip file containing all files that are to be used as MIME values. Details can be found in the chapter REST File API.

The result is needed for the next step.

Result of MIME file upload
{
"id": "6942cf90-a4c4-449d-896a-51bdc8e45906",
"originalFilename": "logos.zip"
}

Step 2: Use MIME data to set characteristic values

Important: The uploaded MIME archive can be used for one POST request only, it cannot be re-used for additional requests. So, if that archive contains multiple files, they should all be used within one request.

http://<server>:<port>/rest/V2.0/list/Variant/VariantCharacteristicValue

This POST request requires the following request body, the result of the file upload is used as mimeValueArchives value:

Characteristic values for Variant
{
"columns": [
{
"identifier": "VariantCharacteristicValueLang.Value"
}
],
"rows": [
{
"object": {
"id": "'RestTestVariant'@'MASTER'"
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "4298"
},
"parentRecordKey": "root",
"language": "-1",
"characteristic": {
"id": "4298"
}
},
"values": [
[
{
"relativeFilePath": "logo.png"
}
]
]
},
{
"object": {
"id": "'RestTestVariant2'@'MASTER'"
},
"qualification": {
"recordKey": "0000.0000.RK",
"rootCharacteristic": {
"id": "4298"
},
"parentRecordKey": "root",
"language": "-1",
"characteristic": {
"id": "4298"
}
},
"values": [
[
{
"relativeFilePath": "logo_global.png"
}
]
]
}
],
"mimeValueArchives": [
{
"id": "6942cf90-a4c4-449d-896a-51bdc8e45906",
"originalFilename": "logos.zip"
}
]
}

As a result the following answer will be provided

Characteristic values for Variant Result
{
"counters": {
"errors": 0,
"warnings": 0,
"createdObjects": 0,
"updatedObjects": 2,
"objectsWithErrors": 0,
"objectsWithWarnings": 0
},
"entries": [],
"objects": [
{
"row": 0,
"object": {
"id": "158688@1",
"label": "RestTestVariant",
"entityId": 1200
},
"status": [
"UPDATED"
]
},
{
"row": 1,
"object": {
"id": "158689@1",
"label": "RestTestVariant2",
"entityId": 1200
},
"status": [
"UPDATED"
]
}
]
}