Produktvarianten, ConfiguratorSet und Optionen über API anlegen

Hallo Zusammen,

ich dreh grad ziemlich am Rad, da ich es nicht schaffe über die API Produktvarianten anzulegen und diese mit dem configuratorSet bzw. mit den options zu verbinden. Ich kann es leider auch im Shopware-Backend und über die Chrome-DeveloperTools (Register Network) nicht genau nachvollziehen, wie man das genau macht.

=========================
Die Kurzfassung:

Beim Setzen der optionIds der Produktvariante über den product-Endpoint bekomme ich folgende Fehlermeldung:
“This field is write-protected. /0/optionIdsoptionIds”

Welche alternative Möglichkeit gibt es da, wenn ich das optionsIds-Array so nicht setzen darf?

=========================
Die Ausführliche Fassung:

Ich gehe wie folgt vor:


Zuerst das Hauptprodukt anlegen:
https://…/api/v1/product
POST

{
  "id": "e4433372d14e415ea5543b58c612b28d",
  "active": true,
  "name": "Variantenprodukt",
  "description": "Lorem ipsum dolor sit amet",
  "weight": 0.0,
  "width": 0.0,
  "height": 0.0,
  "ean": "",
  "purchasePrice": 0,
  "purchaseUnit": 1,
  "referenceUnit": 1,
  "packUnit": "Stück",
  "releaseDate": null,
  "stock": 300,
  "manufacturerId": null,
  "manufacturerNumber": "",
  "productNumber": "SWDEMO10005",
  "length": 0.0,
  "taxId": "83eb170e3ee04d66bb6b40f063dda009",
  "price": [
    {
      "net": 16.7983193277311,
      "linked": true,
      "gross": 19.989999771118164,
      "currencyId": "b7d2554b0ce847cd82f3ac9bd1c0dfca"
    }
  ],
  "visibilities": [
    {
      "visibility": 30,
      "salesChannelId": "f883064f04de4071a885405c381161a4"
    }
  ]
}

OK. Funktioniert.

Bevor ich die Produktvariante hinzufüge, erweitere ich das Konfigurator-Set des Hauptproduktes um die relevanten Optionen:

https://…/api/v1/product/e4433372d14e415ea5543b58c612b28d
PATCH

{
  "configuratorSettings": [
    {
      "optionId": "41e5013b67d64d3a92b7a275da8af441"
    },
    {
      "optionId": "2bfd278e87204807a890da4a3e81dd90"
    }
  ]
}

OK. Funktioniert.

Produktvariante anlegen. Hier wäre ich davon ausgegangen, dass man über die optionIds die Zuordnung an der Produktvariante machen könnte:

https://…/api/v1/product
POST

{
  "id": "55525971b3d9474dad68d81c6c836f7c",
  "parentId": "e4433372d14e415ea5543b58c612b28d",
  "active": true,
  "name": "Variante 1",
  "description": "",
  "weight": 0.0,
  "width": 0.0,
  "height": 0.0,
  "ean": "",
  "purchasePrice": 0,
  "purchaseUnit": 1,
  "referenceUnit": 1,
  "packUnit": "Stück",
  "releaseDate": null,
  "stock": 50,
  "manufacturerId": null,
  "manufacturerNumber": "",
  "productNumber": "SWDEMO10005.1",
  "length": 0.0,
  "taxId": "83eb170e3ee04d66bb6b40f063dda009",

  "optionIds": [
    "41e5013b67d64d3a92b7a275da8af441",
    "2bfd278e87204807a890da4a3e81dd90"
  ],

  "visibilities": [
    {
      "visibility": 30,
      "salesChannelId": "f883064f04de4071a885405c381161a4"
    }
  ]
}

Funktioniert nicht. Dies führt zu folgendem Fehler:

{
  "errors": [
    {
      "code": "FRAMEWORK__WRITE_CONSTRAINT_VIOLATION",
      "status": "400",
      "detail": "This field is write-protected.",
      "template": "This field is write-protected.",
      "meta": {
        "parameters": [
          "user",
          ""
        ]
      },
      "source": {
        "pointer": "/0/optionIdsoptionIds"
      }
    }
  ]
}

Welche alternative Möglichkeit gibt es da, wenn ich das optionsIds-Array so nicht setzen darf?

Vielen Dank im Vorhinein für euere Hilfe. Ich wäre unfassbar dankbar, da ich schon sehr lange am Suchen bin.

LG Florian
 

Hallo Zusammen,

Fehler gefunden. So funktionierts:

https://…/api/v1/product
PATCH

{
  "options": [
    {
      "id": "41e5013b67d64d3a92b7a275da8af441"
    },
    {
      "id": "2bfd278e87204807a890da4a3e81dd90"
    }
  ]
}

 

… indem man nicht das Value-Array „optionIds“ verwendet, sonder das Objekt-Array „options“. (war ein dummer Fehler)

 

Jedoch stehe ich jetzt vor der nächsten Hürde, wenn ich eine Option wieder löschen möchte:

https://…/api/v1/product/44dbc70c3eae4a47af40f18e2cbe1f67/options/41e5013b67d64d3a92b7a275da8af441
DELETE

… funktioniert nicht. Hier bekomme ich einen Fehlerstatus 405 (MethodNotFound)

Nach dem gleichen Schema lassen sich aber z. B: Produkt-Kategorie-Zuordnungen löschen, bzw. so wie ich es verstanden habe generell Einträge von Detail-Listen.

Also das z. B. funktioniert.

https://…/api/v1/product/44dbc70c3eae4a47af40f18e2cbe1f67/categories/41e5013b67d64d3a92b7a275da8af441
DELETE

Weiß jemand, warum das für „options“ nicht funktioniert, oder kann jemand erkennen was ich hier falsch mache?

Vielen Dank im Vorhinein für euere Hilfe.

LG Florian