Evt. ist es ja für den ein oder anderen hilfreich.
Mir kam die Idee, gewisse Eigenschaften nur bei der Erstanlage der Instanz einstellen zu können.
In meinem speziellen Fall ging es darum, das Logging für die erzeugten Variablen nur einmalig beim Start über alle Variablen zu definieren. Im Anschluss sollen die Einstellungen des Anwenders bestehen bleiben und ggf. pro Variable manipuliert werden.
Folgendes kurzes Beispiel ist dabei rausgekommen:
class ConfigurationExample extends IPSModule
{
const CREATE_TIME = "IPSCreate";
public function Create()
{
parent::Create();
//Buffer mit Create-Time erstellen
$this->SetBuffer(self::CREATE_TIME, round(microtime(true)));
$this->RegisterPropertyBoolean("CheckBoxProperty", true);
}
private function CheckCreating()
{
$ret = false;
$aktTime = round(microtime(true));
$creTime = (float) $this->GetBuffer(self::CREATE_TIME);
//Innerhalb der ersten 2 Sekunden zulassen, sollte auch auf langsamen Systemen reichen
if (($aktTime - $creTime) <= 2)
{
$ret = true;
}
return $ret;
}
public function GetConfigurationForm()
{
$elements = '{ "type": "Label", "label": "Dieser Text ist immer sichtbar!" },';
//Nur beim ersten Mal anzeigen
if ($this->CheckCreating())
{
$elements .= '{ "type": "Label", "label": "ACHTUNG! Diese Einstellung steht nur bei Erstanlage der Instanz zur Verfügung!" },';
$elements .= '{ "type": "CheckBox", "name": "CheckBoxProperty", "caption": "CheckBoxProperty - Caption" },';
}
return '{"elements": [ ' . $elements . ' ]}';
}
public function ApplyChanges()
{
parent::ApplyChanges();
//Einstellung nur bei erstem erstellen auswerten
if ($this->CheckCreating())
{
//Do Something special
}
}
}
Anregungen, Kritik usw. erwünscht, vor allem wenn es einen eleganteren Weg geben sollte.