Dynamische Konfigurationsformulare

Ich hätte mal eine Frage zu Dynamische Konfigurationsformularen, da mir die Doku hierzu noch nicht ganz klar ist.

Wo muss ich $this->GetConfigurationForm(); aufrufen, unter Create?

Kann ich dann mit einem Konfigurationsformular starten und wenn der User dann dort einen Eintrag auswählt das Formular dynamisch überschreiben oder muss die Instanz dann neu geöffnet werden?

Du rufst gar nix auf, Das macht IPS.
Du musst halt in der Methode dein JSON zurückgeben und die Methode wird nur beim öffnen aufgerufen.
Michael

Kann ich dann mit einem Konfigurationsformular starten und wenn der User dann dort einen Eintrag auswählt das Formular dynamisch überschreiben oder muss die Instanz dann neu geöffnet werden?

Das ist leider nicht möglich. Du musst die Instanz neu öffnen bevor die neuen Elemente dann sichtbar wären.

Schau dir mal das Beispiel an. Das erklärt eigentlich ganz gut, was möglich ist. Mehr leider noch nicht :slight_smile:
SymconTest/module.php at master · paresy/SymconTest · GitHub

paresy

Hab mir das mal angeschaut und wollte damit mal rumprobieren.

Ich bekomme die Fehlermeldung:
Declaration of GetConfigurationForm() sould be compatible with IPSModule:GetConfigurationForm()

Folgendes hatte ich eigentlich vor vielleicht geht das aber auch nicht oder was mache ich falsch?

Instanz öffnet sich mit dem Standard Formular. Der Benutzer wählt etwas aus und geht auf Übernehmen. Jetzt wird der Wert den der Benutzer ausgewählt hat ausgelesen und an GetConfigurationForm übergeben.


$form = "Usereingabe";
$this->GetConfigurationForm($form);

public function GetConfigurationForm($form)
{
if (form == 0)
{
   $form = '{ "actions": [ { "type": "Label", "label": "Ausgabe 1'" } ] }';
			return $form;
}
elseif(form == 1)
{
$form = '{ "actions": [ { "type": "Label", "label": "Ausgabe 2'" } ] }';
			return $form;
}
elseif(form == 2)
{
$form = '{ "actions": [ { "type": "Label", "label": "Ausgabe 3'" } ] }';
			return $form;
}
}

Dann sollte entsprechend die passende Form nach der Userauswahl übergeben werden. Was mache ich denn da falsch?

Die Fehlermeldung sagt es doch.
Deine Deklaration ist nicht identisch wie in ipsmodule.
Du kannst beim überschreiben einer Methode nicht einfach Parameter ergänzen.
Davon abgesehen funktioniert dein Vorhaben nicht weil IPS diese Methode selbstständig aufruft.
Michael

Wenn ich keine Parameter übergeben kann, dann gibt es logischerweise ja auch keine Auswahl. Was ist dann aber der tiefere Sinn hinter dieser Funktion wenn einfach nur eine einzige alternative Form geladen wird?

Wenn ich den Funktionsaufruf logischerweise nicht ändern kann ist es dann aber dennoch möglich innerhalb der Funktion auf Parameter abzufragen und einen passenden Wert zurückzugeben oder ist tatsächlich nur eine Option erlaubt?

In der Funktion kannst du (im Rahmen) machen was du willst und abhängig von was auch immer jedesmal ein anderes Formular erzeugen und ausgeben.

Und Parameter gibt es nicht, weil IPS die Funktion aufruft, wenn du in der Console eine Instanz öffnest.

Michael
PS: komme mir gerade vor wie am Murmeltiertag.

Es gibt Murmeltiertage ;), und Tage da ist meine Leitung manchmal etwas länger. Hast Du vielleicht ein sinnvolles Beispiel wie Du diese Funktion bei Dir nutzt und wie das dann aussieht?

Schau mal beim Kodi Modul in den Konfigurator.
Dort werden Buttons zum anlegen von Instanzen nur dann angezeigt wenn diese noch nicht existiert.
Michael

Das mit dem Wechseln der Inhalte klappt schon mal. Das einzig blöde ist halt das man die Instanz schließen muss und dann neu öffnen. Gibt es eine Möglichkeit dies vom Modul selber machen zu lassen? Also das ich prüfe wenn auf Übernehmen gedrückt wurde ob eine Bedingung greift und dann gegebenenfalls vom Modul selber die Instanz Schließe und dann gleich wieder die gleiche Instanz öffne. Dann müsste zumindest nicht der Nutzer selbst schließen und wieder öffnen.

Feature kommt im nächsten Update! Sobald man die Konfiguration übernimmt, überprüft die Konsole ob sich die Konfigurationsseite geändert hat. Falls ja, wird diese neu gerendert. Das sollte einiges an Dynamik hinzufügen.

paresy

Cool. Das ist ja ein Fortschritt zum alten SDK.
Wenn das mit den Kernel Shutdown auch noch kommt, habe ich den Winter ja viel vor :smiley:
Michael

Das ist prima :D, da habe ich auch darauf gewartet.

Bis vor dem Update hat das mit den Dynamischen Konfigurationsformularen bei mir funktioniert. Ich musste nur bei grundlegenden Änderungen die zu einem Neuaufbau des Formulars führen die Instanz einmal schließen und wieder neu öffnen. Jetzt habe ich mal das neuste Update getestet, jetzt wird nur noch die Ursprungsansicht geladen ein umschalten auf andere Zustände ist nun nicht mehr möglich :mad:. Was hat sich denn geändert ist das eventuell noch ein Bug oder muss da jetzt wieder was im Code angepasst werden? Könntest Du mal schauen was da vielleicht die Ursache sein könnte.

Die beiden Module nutzten bei mir Dynamische Konfigurationsformulare
Microsoft Flow Modul
IFTTT Modul

Beide sind mit dem Update von heute nicht mehr lauffähig :(. Hast Du einen Tipp wie man die auch mit dem neuen Update wieder lauffähig bekommt?

Das ist bestimmt ein Bug… Update kommt gleich.

paresy

Ok ab 4.1-522 funktioniert es. Danke für das schnelle Beheben jetzt muss man auch nicht mehr die Instanz schließen sehr praktisch und die oben genannten Module gehen wieder.