Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Feld, wann Menge von Produkt das letzte Mal geändert wurde <> Synchronisation
 
t4deon
Jr. Member
 
Total Posts:  4
Joined:  2013-09-27
 

Hi,

ich würde gerne den Produktbestand in Magento mit einer anderen Datenbank abgleichen und synchronisieren. Dabei ist die Datenbank die Quelldatenbank und neue Produkte in der Datenbank sollen in Magento geschrieben werden. Weiter sollen geänderte Bestände (Menge des Produktes) in Magento mit geänderten Beständen in der Datenbank abgeglichen und auch synchronisiert werden.
Das erste ist kein Problem, aber das zweite ist ein bisschen tricky.
Für den Abgleich würde ich gerne ein Datum/Timestamp nehmen, an dem die Menge des Produktes das letzte Mal geändert wurde. Wenn in Magento neuer >> Bestand in der Datenbank wird angeglichen, wenn in der Datenbank neuer >> Bestand in Magento wird angeglichen.
Ich hab in der Datenbank und Dokumentation von Magento kein Feld gefunden, das mir so einen Timestamp angibt.
Gibt es da überhaupt etwas oder müsste ich jede Rechnung/Bestellung überprüfen, ob der Bestand geändert wurde und mir so einen Timestamp “extrahieren”?

Vielen Dank,
t4deon

 
Magento Community Magento Community
Magento Community
Magento Community
 
PDrache
Jr. Member
 
Total Posts:  8
Joined:  2013-05-15
 

Hallo t4deon,

es gibt die Funktion getUpdatedAt()
du kommst mit php an den Wert wenn du folgendes verwendendes:

$_helper $this->helper('catalog/output');
$_product $this->getProduct()
$product_date strftime('%d. %m. %y',strtotime($_product->getUpdatedAt()));
Dieser Wert ändert sich auf jeden Fall, wenn man den Lagerbestand über die Api ändert.
Selber habe ich noch nicht getestet ob sich der Wert ändert, bei Kundenbestellungen.
Kannst ja mal bescheid geben.

Ach ja, zu meiner Ãœberraschung befindet sich der Wert in catalog_product_flat_1, wobei ich die Flattables nicht eingeschaltet habe,
oder wie man das dann nennt.

Machs gut
Drache

 
Magento Community Magento Community
Magento Community
Magento Community
 
t4deon
Jr. Member
 
Total Posts:  4
Joined:  2013-09-27
 

Moin PDrache,

vielen Dank fuer deine Antwort.
Ich hab die Flattables auch “ausgeschaltet”, diese Moeglichkeit faellt somit weg.
Hab noch das Feld “updated_at” in catalog_product_entity gefunden, das aktualisiert sich aber nicht bei einer Kundenbestellung…
Oder ich muss ein Plugin schreiben, dass bei einer Kundenbestellung ein “last_sold"-Feld in eine Tabelle schreibt/aktualisiert.
Schade, dass Magento da nix von Haus an anbietet?!

Vg,
t4deon

 
Magento Community Magento Community
Magento Community
Magento Community
 
PDrache
Jr. Member
 
Total Posts:  8
Joined:  2013-05-15
 

Hallo t4deon,

danke für die Info, das sich der Wert nicht bei Kundenbestellung ändert.
In meinem Fall ist es besser so.

Eine weitere Möglichkeit, dein Problem zu lösen, wäre es mit einem Trigger
zu machen.

Solltest du zufällig Postgresql einsetzen wäre das super simpel zu lösen,
da der Trigger mit Tcl,Perl oder Python geschrieben werden kann.

Wäre schön, wenn du bescheid gibst, wie du das gelöst hast.

Machs gut
PDrache

 
Magento Community Magento Community
Magento Community
Magento Community
 
t4deon
Jr. Member
 
Total Posts:  4
Joined:  2013-09-27
 

Moin PDrache,

vielen Dank fuer deine Antwort.
Ich benutze MySql. Das mit dem Trigger sollte dann aber wohl auch gehen.
Also immer wenn in sales_flat_order_item ein neues Item geschrieben wird, in catalog_product_entity ein Feld bzw. ein Attribut des entsprechenden Products mit den aktuellen Timestamp updaten?!

Vg,
t4deon

 
Magento Community Magento Community
Magento Community
Magento Community
 
PDrache
Jr. Member
 
Total Posts:  8
Joined:  2013-05-15
 

Hallo t4deon,

zuerst solltest du wissen, das ich noch nicht lange mit php und magento arbeite.
Sollte ich Unsinn schreiben, bitte ich jemand erfahrenen das richtig zu stellen.

In Postgres würde ich einen Trigger erstellen, der sobald sich das Feld “Qty” ändert den Wert in der anderen Datenbank ebenfalls
zu ändern, wobei ich bei Magento das über die api machen würde. Denk aber auch an Kollisionen.
Ist aber wahrscheinlich zu kompliziert gedacht.

Erstell doch in mysql einen Trigger, das wenn sich der Wert ändert, die Änderungen in einer von dir erstellten Tabelle mit einem zusätzlichen Timestamp versehen wird.
Den Trigger erstellst du in beiden Datenbanken und die beiden eigenen Tabellen vergleichst du dann.Jetzt wäre dein Problem schon gelöst.
Den Aufwand dafür halte ich für gering.

Je nachdem wie bei dir die Gegebenheiten sind, musst du natürlich auch hier daran denken wenn der Artikel in beiden Datenbanken gleichzeitig weniger wird.
Vielleicht denkst du darüber nach, mit einem Abgang zu arbeiten. Ich hoffe das du erahnen kannst was ich meine.
Abgang = qty alt - qty neu

Machs gut,
PDrache

Edit: Achtung:So wie ich das gerade geschrieben hat, würde ein “Zirkelbezug” entstehen.
Du müsstest das nochmal selber überdenken.

 
Magento Community Magento Community
Magento Community
Magento Community
 
t4deon
Jr. Member
 
Total Posts:  4
Joined:  2013-09-27
 

Moin PDrache,

die Idee mit dem Trigger funktioniert, danke smile
Der Trigger schreibt nur bei einer Kundenbestellung in eine Tabelle (als neue Zeile oder Update). Dadurch hab ich auch direkt alle Datensaetze die geaendert wurden. Ueber eine eigene API kann ich auch drauf zugreifen und den Inhalt nach jeder Synchronisation loeschen.
Danke fuer deine Hilfe smile

Vg,
t4deon

 
Magento Community Magento Community
Magento Community
Magento Community
 
PDrache
Jr. Member
 
Total Posts:  8
Joined:  2013-05-15
 

Bei den Smileys ist kein Daume hoch,
dann halt so: *Daumen hoch*

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top