bestehendes Property umbenennen

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?

Viele Grüße

Burkhard

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.

Besten Dank! So sollte es auch bei mir gehen. Die Überführung von alt nach neu macht man dann im Create()?

Gruß

Burkhard

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.

Achso, du hast eine extra Funktion dafür und bittest den Anwender um Übernahme.

Das wollte ich vermeiden. Es soll eine interne Konvertierung werden.

Ich vermute, es geht nicht, da es ja keine Methode zum Setzen einer Property gibt …

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.

Im Alarmierungs-Modul von Symcon Misc wird auch etwas konvertiert. Vielleicht hilft das ja.

Uli

Gesendet von iPhone mit Tapatalk

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 :wink:
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

Danke für eure Ansätze!

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.

Gruß

Burkhard