Ich habe noch einen Wunsch. Und zwar hätte ich gerne noch eine Update-Method die nach einem Modulupdate aufgerufen wird. Damit möchte ich Anpassungen die nach einem Modulupdate notwendig sind durchführen lassen ohne das der Benutzer hier aktiv werden muss und ggf. etwas bei ihm nicht mehr funktioniert.
Das wäre inzwischen wirklich wichtig. Da viele alte Module des PHP-SDK schon ganz schön viel ‚Müll‘ mit sich rumtragen.
Michael
Wäre ich auch SEHR dafür - hab immer wieder Kram im Modul-Code der sowas macht - wäre dann viiiel schöner und einfacher!
Danke und Grüße,
Chris
Tatsächliche wäre das für beides Möglich. Was hältst du von sowas?
paresy
Feature landet zum nächsten 7.0er Update. Für IPSModule und IPSModuleStrict.
paresy
Jetzt hätte ich einen Fall wo ich genau die Funktion zum Einsatz bringen möchte.
Ich habe eine List, welche ich in ein Tree konvertieren möchte! Wenn ich das richtig verstehe, wird die funktion immer beim Start und beim Update aufgerufen, d.h.
1.) die alte Liste darf ich nicht aus dem Create-Prozess (und form.json) löschen
2.) ich muss mir irgendwie merken ob ich die Konvertierung schon vorgenommen habe
Richtig?
Mein Vorgehen wäre jetzt …
1.) Ich lege ein Tree Property parallel zur List an
2.) setzt das List Property auf visible false (damit da niemand mehr ran kommt)
3.) in der Migrate Methode mache ich die Konvertierung, z.B. nur wenn der Tree keine Values hat
Korrekt?
Frage: sollte man den Test ob Tree keine Values haben über ReadPropertyString machen oder über die übergebenen JSON Data machen?
Danke & Ciao
Heiko
doch. einfach weglassen.
Migrate hat dann genau einmal die Chance das alte Property zu nutzen.
Nein, nur prüfen ob das alte Property noch existiert.
Nur das JSON nutzen (als Objekt, nicht als Array) und das einfach zurückgeben.
Beispiel von mir, ConditionBoolean
ist alt und wird zu Value
migriert.
public function Create(): void
{
parent::Create();
$this->RegisterPropertyInteger('Source', 1);
$this->RegisterPropertyString('Value', '[]');
// ConditionBoolean ist alt
$this->SourceID = 1;
}
public function Migrate(string $JSONData): string
{
$Data = json_decode($JSONData);
if (property_exists($Data->configuration, 'ConditionBoolean')) {
$VarId = $Data->configuration->Source;
if (IPS_VariableExists($VarId)) {
$Source = IPS_GetVariable($VarId);
switch ($Source['VariableType']) {
case VARIABLETYPE_BOOLEAN:
$Value = (bool) $Data->configuration->ConditionBoolean;
break;
case VARIABLETYPE_INTEGER:
$Value = (int) $Data->configuration->ConditionValue;
break;
case VARIABLETYPE_FLOAT:
$Value = (float) $Data->configuration->ConditionValue;
break;
case VARIABLETYPE_STRING:
$Value = $Data->configuration->ConditionValue;
break;
}
$Data->configuration->Value = json_encode($Value);
}
$this->SendDebug('Migrate', json_encode($Data), 0);
$this->LogMessage('Migrated settings:' . json_encode($Data), KL_MESSAGE);
}
return json_encode($Data);
}
Michael