Generelle Frage zur Sync API

Hallo zusammen,

wir sind gerade dabei unseren SW5 Shop auf die Version 6 zu migrieren. Dabei würde ich gerne die Sync API verwenden und kämpfe mich gerade wie Rambo durch das Dickicht. Die Dokumentation ist leider sehr spartanisch und hilft nur bedingt weiter. An einer Stelle komme ich nun nicht weiter, und möchte gerne mal das Schwarmwissen anzapfen.

Das Ziel ist, Artikel, also zuerst einmal die „product“ Entity zu aktualisieren. Nach allem, was ich mir bisher zusammengereimt habe, sollte folgender Request an die Sync API dies erledigen:

(
    [write-product] => Array
        (
            [entity] => product
            [action] => upsert
            [payload] => Array
                (
                    [0] => Array
                        (
                            [id] => 0776A765A7B3449C9012C0F433AFE791
                            [name] => Tropffläschchen 100 ml blau
                        )

                )

        )

)

bzw. als JSON

{
  "write-product" : {
    "entity" : "product",
    "action" : "upsert",
    "payload" : [
      { "id" : "0776A765A7B3449C9012C0F433AFE791", "name" : "Tropffl\u00e4schchen 100 ml blau" }
    ]
  }
}

Leider bekomme ich als Antwort folgendes:

stdClass Object
(
    [errors] => Array
        (
            [0] => stdClass Object
                (
                    [status] => 500
                    [code] => FRAMEWORK__PRIMARY_KEY_NOT_PROVIDED
                    [title] => Internal Server Error
                    [detail] => Expected primary key field id for definition Shopware\Core\Content\Product\ProductDefinition not provided
                    [meta] => stdClass Object
                        (
                            [parameters] => stdClass Object
                                (
                                    [definition] => Shopware\Core\Content\Product\ProductDefinition
                                    [propertyName] => id
                                )
                        )
                )
        )
)

Da die UUID offensichtlich angegeben ist, komme ich nicht weiter, wenn mir die API „FRAMEWORK__PRIMARY_KEY_NOT_PROVIDED“ sagt :frowning:

Kann mir jemand einen beispielhaften Payload geben, mit dem ich eine „product“ Entity aktualisieren kann?

Danke :slight_smile:

LG
Carsten

… dann antworte ich mir halt gleich selbst (und kotze fast dabei).

Problem gelöst! Es lag daran, dass die ID als Hex-Wert mit GROSSBUCHSTABEN übergeben wurde und nicht mit Kleinbuchstaben. Wenn man sich überlegt, dass die UUID in der DB als binary gespeichert wird, ergibt das auch ein bisschen Sinn,.

Ganz anders jedoch als die absolut sinnfreie Fehlermeldung von ShopWare, die mich daran hat verzweifeln lassen, zu überlegen, warum das Feld „id“ angeblich nicht da sei, wo es doch offensichtlich übergeben wurde. Ein „No product with that id“ wäre da viel hilfreicher gewesen.

Grrr …

1 Like