bevor ich meinen kompletten Code veröffentlich habe ich folgendes Szenario bei einer Modulerstellung.
Ich habe eine public function GetConfigurationData(), diese liest per curl von einem Server Konfigurationsdaten per json aus. Bestimmte Werte sollen dann in das Konfigurationsformular von dem Modul gespeichert werden.
Generell klappt das auch, ausserhalb der ApplyChanges(), z.B. wenn ich die Funktion manuell aufrufe…
Beispiel (Auszug): innerhalb der GetConfigurationData()
In dem Konfigurationsformular gibt es zwei Textfelder, Username und Passwort.
Wenn diese Werte eingetragen sind und die Änderungen mit „übernehmen“ bestätigt werden, sollen die weiteren Konfigurationsdaten vom Server eingelesen werden.
Wenn ich aber nun innerhalb der Funktion ApplyChanges() eintrage:
$this->GetConfigurationData();
kommt es zum Absturz, vermutlich weil er sich in einer Dauerschleife befindet.
Im Moment komme ich da nicht weiter… jemand eine Idee?
Das auslesen der Daten am besten in eine eigene Methode packen und dann per Button im Elements Bereich der Form unterbringen.
Sprich, der Nutzer gibt erst die Zugangsdaten ein und klickt übernehmen.
Dadurch wird der Button aktiv und kann vom User betätigt werden.
Dann hast du auch keine Endlosschleife.
Gibt natürlich auch andere Wege…
Ein Konfigurator wäre auch eine Möglichkeit.
Hier musst du dir die Frage stellen, wann dein Modul diese Daten die es lädt wann braucht.
Edit:
Sehe gerade dass du im ApplyChanges GetConfigurationForm aufrufst, das hat dort nix zu suchen, diese Methode nutzt nur die Console.
Es sollte also auch so funktionieren wie du es beschreibst.
Ist GetConfigurationData hat nix mit IPS zu tun, war nur als Beispiel kann auch EigeneFunktionName heissen [emoji3]
Ich brauche vom Server den Cookie zur Authentifizierung, der ist nur 24 Stunden gültig, daher muss ich zusätzlich ein Ereignis anlegen, welches erneut ein Login durchführt, um den neuen Cookie im Konfigurationsformular ablegt, für die weitere Kommunikation.
public function MessageSink($TimeStamp, $SenderID, $Message, $Data)
{
if ($Message == 10001) // KERNELSTARTED
{
// Hier ist IPS gestartet und meldet sich als Betriebsbereit.
// $this->GetMyToken();
}
}
Damit IPS auch weiß, dass dein Modul diese Nachricht erhalten möchte, musst du in Applychanges noch das hier einbauen: