API: Setzen des Verkaufskanals (Sales-Channels) für ein Produkt

Moin,

ich habe unser PIM an SW6 per API angebunden und was mir jetzt noch fehlt ist die Möglichkeit beim Übertragen des Produkts gleich den Verkaufskanal für dieses Produkt zu setzen.

Gefunden habe ich, dass ich mit folgendem Link die SalesChannelId, wenn denn eine gesetzt ist, und dem Typ: GET die Daten auslesen kann, meine Frage ist nun wie mein Body aussehen muss und welcher API Endpunkt verwendet werden kann um den Verkaufskanal zu setzen. Vorzugsweise wäre es schön, wenn dies direkt über http://url-zum-shop.de/api/v1/product/ funktionieren kann um mir einen Request zu sparen, da unsere Produktsets recht groß sind.

Link: http://url-zum-shop.de/api/v1/product/af6e58d054ea45929a4eb0ab4aed2bc6/visibilities

 

Gruß,

Lukas

 

Du kannst jedem Payload das Feld visibilities mitgeben:

'visibilities' => [
    [
        'id' => 'visibilityID',
        'salesChannelID' => '02F...'
        'visibility' => ProductVisibilityDefinition::VISIBILITY_ALL
    ]
]

 

1 „Gefällt mir“

@AlexGalax schrieb:

Du kannst jedem Payload das Feld visibilities mitgeben:

‚visibilities‘ => [
[
‚id‘ => ‚visibilityID‘,
‚salesChannelID‘ => ‚02F…‘
‚visibility‘ => ProductVisibilityDefinition::VISIBILITY_ALL
]
]

 

Vielen Dank schon mal !   Ich komme aber noch nicht ganz mit :confused:

Wie müsste jetzt beispielsweise der Body als vnd.api+json aussehen um dem Produkt mit der ID: „b0876b4eab8c43819df58ac8eb73a7e2“ den SalesChannel mit der ID: „8892c9bed048425a890cf483986cad13“ zuzuweisen? Sobald es in Postman läuft komme ich klar, der Typ sollte ja „PATCH“ sein… 

Auch wird mir nicht so ganz klar was die „visibilityID“ repräsentiert, gibt es da irgendwo was in der Dokumentation, wie das zusammen hängt, ich finde nichts?!

 

Hallo,

die visibilityID ist die Id für diesen Eintrag (z.B. Artikel A ist sichtbar in Shop A). Diese Id muss in der Regel immer mitgeliefert werden, ansonsten bekommt man beim PATCH eine Fehlermeldung zurück, dass versucht wird einen Eintrag zu erstellen, obwohl aktualisiert werden sollte (nicht immer der Fall). Ein vollständige Dokumentation findet man momentan nicht.
Ich würde auch nicht die normalen Endpoints benutzen, sondern den sync -Endpoint, da dort direkt ein upsert (update/insert) gemacht werden kann. Mit diesem Endpoint können Einträge in einem Schritt hinzugefügt / aktualisiert werden (ist bei Variantenkombinationen sehr hilfreich und notwendig). Ich haben mal unten ein kleines Beispiel, wie es über den sync -Endpoint lösbar wäre. Am einfachsten schaut man aber selbst in der Browserkonsole nach, welche Sachen aufgerufen werden, wenn irgendwelche Operationen im Backend ausgeführt werden.

POST http://test.test/api/v1/_action/sync 

[
  {
    "action": "upsert",
    "entity": "product",
    "payload": [
      {
        "type": "product",
        "id": "b0876b4eab8c43819df58ac8eb73a7e2",
        "productNumber": "1234",
        "stock": 42,
        "name" : "test",
        "active": true,
        "visibilities": [
          {
            "id" : "3C69BDB4AB7F4090B048508DAB033D22",
            "productId": "b0876b4eab8c43819df58ac8eb73a7e2",
            "salesChannelId": "8892c9bed048425a890cf483986cad13",
            "visibility": 30
          }
        ]
      }
    ]
  }
]

Edit: „visibility“: 30 ist der numerische Wert von ProductVisibilityDefinition::VISIBILITY_ALL

 

Gruß, BA

5 „Gefällt mir“

H‍i @B_A‍, wo finde ich die ProductVisibilityDefinition? ich wäre nie darauf gekommen, dass die 30 sein muss. 

Gruß Balram

Hi balram,

die findest du hier: https://github.com/shopware/platform/blob/master/src/Core/Content/Product/Aggregate/ProductVisibility/ProductVisibilityDefinition.php

In den meisten Fällen hilft es auch diese Dinge im Admin einmal nachzustellen und sich den Request-Payload anzuschauen.
Edit: In der Doku werden die Werte auch aufgeführt: https://docs.shopware.com/en/shopware-platform-dev-en/admin-api-guide/writing-entities#visibility-handling

Gruß

Krispin

1 „Gefällt mir“

Danke dir Krispin :slight_smile: