# Preise und Bestände per Skript updaten: Best practice

**URL:** <https://forum.shopware.com/t/preise-und-bestaende-per-skript-updaten-best-practice/93239>\
**Category:** Programmierung\
**Tags:** general, administration, programming, other\
**Created:** [3. März 2022 um 22:17 UTC](https://forum.shopware.com/t/preise-und-bestaende-per-skript-updaten-best-practice/93239 "2022-03-03T22:17:42Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![michel1506](https://avatars.discourse-cdn.com/v4/letter/m/c37758/32.png) [@michel1506](https://forum.shopware.com/u/michel1506)\
**Post date:** [3. März 2022 um 22:17 UTC](https://forum.shopware.com/t/preise-und-bestaende-per-skript-updaten-best-practice/93239/1 "2022-03-03T22:17:42Z")

</div>

Hallo,

ich möchte Preise und Bestände stündlich aktualisiert aus dem Warenwirtschaftssystem im Shop updaten.  
Das Warenwirtschaftssystem basiert auf einer MySQL-Datenbank, nennen wir sie Datenbank A. Die Shopware Datenbank nennen wir Datenbank B.  
Was ist hier Best Practice?

1. Ansatz: Ich könnte ganz einfach, die Preis- und Bestandsdaten aus Datenbank A direkt in die Datenbank B übertragen mit einem kleinen Skript (Java, Python, wie auch immer), welches ich auf einem Server stündlich einmal laufen lasse.

2. Ansatz: Ich erstelle aus Preis- und Bestandsdaten aus Datenbank A mit kleinem Skript eine CSV-Datei, lade sie auf den Shop-FTP hoch und lasse im Anschluss ein PHP-Skript laufen, wo ich die Bestände und Preise mittels Shopware SDK in PHP auf dem Webserver update.

3. Ansatz: Ich schreibe ein Skript, welches die Preis- und Bestandsdaten aus Datenbank A in kompatibles JSON umwandelt und schicke diese POSTs an die REST-API vom Shop.

Natürlich liebäugle ich mit Ansatz 1 als „Quick-and-dirty“-Methode, weiß aber nicht, ob das so sicher ist, die Preise und vor allem die Bestände „hart“ zu überschreiben.

Freue mich über jede Antwort! Vielen Dank im Voraus!

---

<div class="post-metadata">

**Author:** ![trade](https://avatars.discourse-cdn.com/v4/letter/t/5fc32e/32.png) [@trade](https://forum.shopware.com/u/trade)\
**Post date:** [4. März 2022 um 20:18 UTC](https://forum.shopware.com/t/preise-und-bestaende-per-skript-updaten-best-practice/93239/2 "2022-03-04T20:18:19Z")

</div>

Version 1) würde ich ausschließen. Gerade die Preise sind sehr komplex und auch die Bestandsführung. Da musst du ganz genau wissen, was du machst.  
Verwende das Shopware DAL dafür.

---

<div class="post-metadata">

**Author:** ![abdullah](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@abdullah](https://forum.shopware.com/u/abdullah)\
**Post date:** [6. März 2022 um 16:01 UTC](https://forum.shopware.com/t/preise-und-bestaende-per-skript-updaten-best-practice/93239/3 "2022-03-06T16:01:30Z")

</div>

Hallo @michel1506,

verwende die Shopware API um Änderungen vorzunehmen.

Änderungen direkt in der Datenbank vorzunehmen wäre nicht ideal, da so ggf. weitere Prozesse nicht angestoßen werden.

Über die Shopware API werden z.B. an einigen Stellen entsprechende Events geworfen, die dazu führen, dass weiterer Code ausgeführt wird.  
Über die direkte Änderungen der Daten in der Datenbank würden die Events nicht geworfen werden.

vg

---

<div class="post-metadata">

**Author:** ![chapter2](https://avatars.discourse-cdn.com/v4/letter/c/f4b2a3/32.png) [@chapter2](https://forum.shopware.com/u/chapter2)\
**Post date:** [6. März 2022 um 21:40 UTC](https://forum.shopware.com/t/preise-und-bestaende-per-skript-updaten-best-practice/93239/4 "2022-03-06T21:40:10Z")

</div>

Guten Abend,  
sofern keine komplexeren regelbasierten Preise hinterlegt sind, geht es, auch bei vielen Produkten, zuverlässig über einen POST an /api/\_action/sync

Hier eine kleine JSON-Vorlage hier als PHP-Array

```auto
'write-rules' => [
	'action' => 'upsert',
	'entity' => 'product',
	'key' => 'write', // Todo Was macht es genau?
	'payload' => [ // payload pro entity, hier product
		[ // product 1
			'id' => 'ProductUuid',
			'stock' => xxx,
			'price' => [ // Preis gilt pro Währung
				[
					'currencyId' => 'b7d2554b0ce847cd82f3ac9bd1c0dfca', // EUR default
					'net' => 100,
					'gross' => 119,
					'linked' => true,
				],
			],
		],
	],
]

```

Ein Update über die Artikelnummer (zusammen mit der taxId und dem Artikelnamen) schlägt leider mit CONTENT\_\_DUPLICATE\_PRODUCT\_NUMBER fehl obwohl es sich um das angepriesene „upsert“ handelt. Hier besteht Nachbesserungsbedarf. Die ProductUuid muss also vorher separat abgefragt werden.

Die Shopware docs dazu sind nicht erschöpfend aber zumindest für den Anfang hilfreich:

> **[Bulk Payloads | Admin API](https://shopware.stoplight.io/docs/admin-api/ZG9jOjEyMzA4NTUx-bulk-payloads)**
>
> The Sync API is an add-on to the Admin API that allows you to perform multiple write operations (creating/updating and deleting) simultaneously. All entities that can be written via the Admin API can also be written via the Sync API. Powered by...
