# Statusvariablen beim Erzeugen mit Wert initialisieren

**URL:** <https://community.symcon.de/t/statusvariablen-beim-erzeugen-mit-wert-initialisieren/139664>\
**Category:** PHP-Module (Entwicklung)\
**Created:** [5. Januar 2025 um 10:04 UTC](https://community.symcon.de/t/statusvariablen-beim-erzeugen-mit-wert-initialisieren/139664 "2025-01-05T10:04:53Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ian](https://community.symcon.de/user_avatar/community.symcon.de/ian/32/91799_2.png) [@Ian](https://community.symcon.de/u/Ian)\
**Post date:** [5. Januar 2025 um 10:04 UTC](https://community.symcon.de/t/statusvariablen-beim-erzeugen-mit-wert-initialisieren/139664/1 "2025-01-05T10:04:53Z")

</div>

Hallo,

kleine Nachfrage.  
Ich lege im Create Bereich Statusvariablen an.  
$this-\>RegisterVariableInteger(„…“,„…“,„…“);

Ebenfalls im Create Bereich belege ich die Variablen mit sinnvollen Startwerten.  
$this-\>SetValue(„…“, …);

Diese Einträge findet man nun auch im Objektbaum unter dem selbst erstellten Modul. Alles gut soweit. Nur, wenn ich Symcon oder den Server nun neu starte, dann werden vom Benutzer im Objektbau geänderten Variablen leider wieder mit den Standardwerten überschrieben.

Wie macht man es geschickt, dass nur beim ersten Anlegen Startwerte gesetzt werden, aber später vom Nutzer geänderte Werte in vorhandenen Variablen im Objektbaum nicht wieder überschrieben werden?

Sollte man über GetValue zuvor auslesen ob die Variable schon belegt ist? Oder wie stellt man das geschickt an?

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [5. Januar 2025 um 10:43 UTC](https://community.symcon.de/t/statusvariablen-beim-erzeugen-mit-wert-initialisieren/139664/2 "2025-01-05T10:43:51Z")

</div>

Ich persönlich lasse sie einfach ohne Wert.  
Der kommt ja meistens nachdem irgendwas in applychanges passiert ist bzw Werte verarbeitet wurden.  
Aber du kannst natürlich vorher mit GetIdByIdent prüfen ob die Variable schon existiert hat.  
Oder… Gleich auf IPSModuleStrict wechseln.  
Da liefert dir RegisterVariableXYZ einen bool für neu angelegt oder vorhanden.  
Michael

---

<div class="post-metadata">

**Author:** ![Ian](https://community.symcon.de/user_avatar/community.symcon.de/ian/32/91799_2.png) [@Ian](https://community.symcon.de/u/Ian)\
**Post date:** [5. Januar 2025 um 11:04 UTC](https://community.symcon.de/t/statusvariablen-beim-erzeugen-mit-wert-initialisieren/139664/3 "2025-01-05T11:04:09Z")

</div>

Danke für die Info.  
Meinst du GetIDForIdent ? Die soll laut Dokumentaion eine Fehlermeldung zurückgeben, wenn die Variable nicht exitiert. Das wäre nicht unbedingt gut.  
Zu IPSModuleStrict oder IPS\_ModuleStrict finde ich nichts in der Dokumentation. Gibt da nähere Infos zu?

Nachtrag: GetIDForIdent liefert die ID sonst false. Erst eine Fehlermeldung, wenn wenn der Ident nicht vorhanden ist. Damit kann ich dann den Inhalt auslesen und auf Inhalt prüfen. Das sollte gehen. Dachte nur, dass es vielleicht einen einfacheren Weg gibt. Dann scheint dies wohl der übliche Weg zu sein?

---

<div class="post-metadata">

**Author:** ![Ian](https://community.symcon.de/user_avatar/community.symcon.de/ian/32/91799_2.png) [@Ian](https://community.symcon.de/u/Ian)\
**Post date:** [5. Januar 2025 um 11:44 UTC](https://community.symcon.de/t/statusvariablen-beim-erzeugen-mit-wert-initialisieren/139664/4 "2025-01-05T11:44:24Z")

</div>

Nachdem ich das nun versucht habe in meinem Code einzubauen stelle ich fest, dass ich ja gar nicht den Umweg über GetIDForIdent gehen muss. Ich kann ja direkt via $this-\>GetValue(„…“) den inhalt auslesen und auf Inhalt prüfen. Problematisch ist es nur, wenn ich den Inhalt eines Boolean Objekte prüfen muss. Da kann ich im Grunde nur gegen den Standardwert prüfen.

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [5. Januar 2025 um 11:57 UTC](https://community.symcon.de/t/statusvariablen-beim-erzeugen-mit-wert-initialisieren/139664/5 "2025-01-05T11:57:57Z")

</div>

> [@Ian](#):
>
> Meinst du GetIDForIdent ?

Ja.

> [@Ian](#):
>
> Die soll laut Dokumentaion eine Fehlermeldung zurückgeben, wenn die Variable nicht exitiert

Welche man mit @ unterdrücken kann.

> [@Ian](#):
>
> Zu IPSModuleStrict oder IPS\_ModuleStrict finde ich nichts in der Dokumentation

Ja, aber hier im Forum:

> [@IPSModuleStrict Preview](https://community.symcon.de/t/ipsmodulestrict-preview/134914):
>
> Da wir langsam den Changelog für den RC1 vorbereiten, wollte ich die Informationen zu IPSModuleStrict nicht verlieren und diese in einem frischen Thema ablegen. Wir haben uns außerdem entschlossen IPSModuleStrict in der 7.0 noch als „Preview“ zu betiteln, da es noch nicht alle von uns gewünschten Funktionen enthält. Wir werden zur 7.1 daran weiter arbeiten. Hier noch unser Video, in dem wir auf die Hintergründe eingehen und auch unsere Wünsche für IPSModuleStrict: [[IP-Symcon Entwickler…](https://www.youtube.com/watch?v=ASh-bt55VAw&t=2872s)

> [@Ian](#):
>
> Damit kann ich dann den Inhalt auslesen und auf Inhalt prüfen.

Warum willst du den Inhalt auslesen?  
Wenn GetIDForIdent ein false gibt, dann kannst du nach dem RegisterVariableXYZ den Wert setzen.  
Wenn GetIDForIdent ein Integer liefert, dann halt nicht.

> [@Ian](#):
>
> Problematisch ist es nur, wenn ich den Inhalt eines Boolean Objekte prüfen muss.

Darum gibt es ja GetIDForIdent…  
Michael

---

<div class="post-metadata">

**Author:** ![Ian](https://community.symcon.de/user_avatar/community.symcon.de/ian/32/91799_2.png) [@Ian](https://community.symcon.de/u/Ian)\
**Post date:** [5. Januar 2025 um 12:06 UTC](https://community.symcon.de/t/statusvariablen-beim-erzeugen-mit-wert-initialisieren/139664/6 "2025-01-05T12:06:26Z")

</div>

Hmm, so richtig funktioniert das auch nicht. Wenn ich die Variablen auf Inhalt prüfe wie:  
Ungleich der erstmaligen im Modul gesetzten Standards  
oder auf 0 bei Integer bzw. Float bzw. Leerstring bzw. False bei Boolean  
dann könnte der Nutzer keine dieser Werte mehr setzen ohne, dass diese überschrieben werden.

Im Grunde komme ich offensichtlich nicht drum herum irgendwie herauszufinden, ob die Variablen im Objektbaum schon angelegt wurden oder nicht. Wenn da bisher keine Möglichkeit gibt, wird es denn mit IPSModuleStrict möglich sein?

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [5. Januar 2025 um 12:11 UTC](https://community.symcon.de/t/statusvariablen-beim-erzeugen-mit-wert-initialisieren/139664/7 "2025-01-05T12:11:39Z")

</div>

Keine Ahnung was du überhaupt vor hast.  
Sie einmalig setzen wenn sie erzeugt wird?  
Oder was genau?  
Das hier klappt auf jeden Fall:

```php
<?

class Test extends IPSModule
{
    public function ApplyChanges(): void
    {
        $isValid = @$this->GetIDForIdent('Test');
        $this->RegisterVariableString('Test', 'Test');
        if (!$isValid){
            $this->SetValue('Test','NEU');
        }
    }
}

```

Oder halt

```auto
<?

class Test extends IPSModuleStrict
{
    public function ApplyChanges(): void
    {
        if ($this->RegisterVariableString('Test', 'Test')) {
            $this->SetValue('Test','NEU');
        }
    }
}

```

Michael

---

<div class="post-metadata">

**Author:** ![Ian](https://community.symcon.de/user_avatar/community.symcon.de/ian/32/91799_2.png) [@Ian](https://community.symcon.de/u/Ian)\
**Post date:** [5. Januar 2025 um 12:27 UTC](https://community.symcon.de/t/statusvariablen-beim-erzeugen-mit-wert-initialisieren/139664/8 "2025-01-05T12:27:33Z")

</div>

Hab es nun hinbekommen:

```auto
// Wenn die Variable Integer ist, dann gibt es sie sonst bei Boolean wird ein False gemeldet
if ( is_int( $this->GetIDForIdent("...") ) ) {
	// Ist ObjektID, dann gibt es sie schon
	// Dann nichts weiter machen, da der Nutzer evtl. schon Werte definiert hat
} else {
	// Variable muss angelegt werden ggf. mit Standardwerten
	$this->RegisterVariableBoolean("...","....", "...");
	$this->SetValue("...", ...);
}

```

Danke dir für den Hinweis mit GetIDForIdent. Das hat es am Ende gebracht.
