Setzen des "changed" beim Anlegen eines Article via API hat keinen Effekt auf das "changetime" Feld

Seid dem Update von Shopware wird das “changed” Feld bei der Erstellung eines Artikels ignoriert und stattdessen die akutelle Zeit (des Request) als “changetime” in der “s_articles”-Tabelle gesetzt.

Beispiel:

{
	'name': 'MeinArtikel',
	'tax': {
		'tax': '19.00',
		'name': 'VAT 19'
	},
	'priceGroupId': 1,
	'mainDetail': {
		'supplierNumber': 2,
		'descriptionLong': '',
		'shippingTime': '3-4',
		'prices': [{
				'customerGroup': {
					'key': 'B2C',
					'name': 'B2C',
					'tax': True,
					'taxInput': True,
					'mode': False
				},
				'price': '17.0876',
				'from': '1'
			}
		],
		'inStock': 10,
		'active': 1,
		'shippingFree': False
	},
	'supplier': 'My Supplier',
	'descriptionLong': '',
	'changed': '2019-05-12T09:31:06+0100',
	'active': 1,
	'keywords': '',
	'meta': '',
	'priceGroupActive': True,
	'lastStock': False,
	'crossBundleLook': False,
	'categories': [{
			'id': 9
		}
	]
}

Trotzdem erhält das “changetime” Feld folgenden Timestamp:

2019-05-12 13:36:43

Wieso willst du das changed setzen? Das ist eigentlich ein dynamisches Feld, was automatisch befüllt wird, sobald eine Änderung getan wurde

1 „Gefällt mir“

@Shyim schrieb:

Wieso willst du das changed setzen? Das ist eigentlich ein dynamisches Feld, was automatisch befüllt wird, sobald eine Änderung getan wurde

Weil wir alle Artikel-Details bereits in einem anderen System setzen und einen Vergleich haben möchten, ob nach dem Einspielen per API manuelle Änderungen im Shopware-Backend vorgenommen wurden. Diese müssten wir dann ggf. wieder zurückspielen in unser System. Ohne Setzen des Timestamp funktioniert dies nicht.

In älteren Versionen ging dies übrigens problemlos, seit 5.5 wird das „changed“-Feld einfach ignoriert. Warum sollte man es dann überhaupt per API setzen können?!

Seit 5.5 wird das während des LifecycleEvents von Doctrine gesetzt, das passiert viel später nach den API Operationen. Von daher hast du zurzeit keine Chance die zu setzen. Ich würde hier eher empfehlen ein Attribute anzulegen und dort dein Wert abzuspeichern. 

Okay, vielen Dank, dieser Umstand war mir tatächlich noch nicht bekannt.

Die Frage, wieso dieses Feld per API dann überhaupt gesetzt werden kann, bleibt allerdings immer noch unbeantwortet. Habe daher trotzdem einmal einen Bug-Report gemacht.

Ein Problem habe ich jedoch noch mit deinem Vorschlag: Sollten wir tatsächlich ein zusätzliches Attribut anlegen, um unseren internen Timestamp zu speichern, wie können wir dann sicherstellen, dass dieses Feld ebenso automatisch aktualisiert wird, sobald der Backend-User manuelle Änderungen vornimmt? Gibt es hier eine einfache Lösung, um dies zu realisieren?

Ich weiß nicht wie du die Sachen dann ausliest, aufjedenfall könntest du ein max machen auf die beiden Feldern (Den höchsten Wert holen)