Ich möchte gerne im Rahmen einer Modulweiterentwicklung ein bestehendes Property umbenennen. Dabei sollen die vom Anwender eingegebenen Values erhalten bleiben.
Geht das überhaupt? Wenn ja, hätte da jemand für mich einen Tipp oder ein Beispiel wie es geht?
Ich hatte ähliches Problem bei mir, ich habe das so gelöst das ich eine neue Property angelegt habe bzw. ein Attribute. Im Konfigurationsformular habe ich die alte Property rausgenommen. Sollte jetzt in der alten Property ein Wert stehen und die neue noch leer sein wird der Wert automatisch einmalig in die neue Property bzw. Attribute überführt. So kannst Du dann mit Attributen oder einer neuen Property weiterarbeiten, aber die Werte, die im Modul gespeichert sind, bleiben erhalten.
Nein, ich habe das bei mir so gelöst das im Create ja die alte und die neue Property angelegt werden. Das Konfigurartionsformular ist dynamisch. Wenn dies geöffnet wird, wird zunächst geprüft ob in der alten Property ein Wert steht und die neue Property leer ist. Wenn das der Fall ist zeigt das Konfigurationsformular ein Label und einen Button an. Dann muss man einmalig auf den Button drücken. Durch den Druck auf den Button wird dann die alte Property ausgelesen und in die neue übergeben mit anschließend Apply Changes. Sobald in der neuen Property ein Wert drinnen steht wird auch kein Button mehr im Konfiguartionsformular angezeigt sondern ganz normal die Werte der neuen Property.
Das wird schwierig da Du ja ein Apply Changes brauchst, insofern würde ich das vielleicht einmalig bestätigen lassen. Solltest Du eine interne Konvertierungsmöglichkeit finden ohne eine Endlosschleife durch Aplly Changes zu produzieren lass es uns wissen, das wäre noch praktischer ohne Button.
Ja das sollte (ungetestet) funktionieren.
Kurzer Abriss.
Neues Property im Create erstellen.
Altes nicht mehr erstellen.
Im Applychanges prüfen ob das alte vorhanden ist (IPS_GetConfiguration, json_decode, array_key_exists).
Wenn vorhanden, dann alten Wert in neues Property überführen.
Altes Value vom Key mit neuen Key im Array hinzufügen und alten Key löschen im Array.
Das Array wieder mit json_encode und IPS_SetConfiguration als neue Einstellung setzen.
Die Config mit IPS_Applychanges übernehmen, und die Methode verlassen(!).
Dadurch wird natürlich die Applychanges Methode vom Modul erneut aufgerufen, nun sollte aber die alte Property nicht mehr existieren und die erste Abfrage verhindert eine Endlosschleife.
Achtung, nicht testen wenn IPS läuft und du in der Konsole einfach Übernehmen klickst.
Da dann die neue Property ja nicht registriert ist, hagelt es Fehler und mit Pech eine Endlosschleife
Die Konvertierung läuft nur, wenn IPS startet (Modul wurde also im Dateisystem verändert) oder das Modul neu geladen wird (Module Control bzw. Store).
Michael
Es sieht so aus, als ob es wohl keinen einfacheren Weg gibt. Gut zu wissen, wie es funktioniert. In meinem konkreten Fall werde ich wohl erst einmal darauf verzichten, um das Modul (das noch keine weite Verbreitung hat) unnötig zu verkomplizieren.