OpenObjectButton mit dynamischer ID

Ich habe in einem Modul eine Liste. In dieser Liste will ich, wenn ich ein Listenelement bearbeite will ich eine Variable auswählen und einen OpenObjectButton haben. Das funktioniert auch.

Der OpenObjectButton erwartet aber als „objectID“: 42563 einen integer Wert.

Wie bekomme ich das dynamisch hin, also die ID der ausgewählten Variable ?

Das Listenelement für die Variable hat den Namen „ID“.

„objectID“: „$ID“ funktioniert nicht, auch „objectID“: $ID natürlich auch nicht.

Ziel ist es direkt in die Variable zu springen, entweder Objektbaum oder in die Eigenschaft (Variable bearbeiten)

Uli

1 „Gefällt mir“

Soweit ich weiß geht dies leider nicht. Du müsstest per Dynamik (=UpdateFormField) die neue ID jeweils beim Auswählen des Listen-Elements senden - aber es gibt aktuell in der Liste kein onClick für die Zeilen.

paresy

@paresy
@Dr.Niels

Danke für die Antwort und dann bitte als Feature Request notieren. Das wäre aus meiner Sicht eine komfortable Funktion.

Uli

+1 würde ich mir auch wünschen

Da hat @paresy die Doku wohl nicht richtig gelesen :wink: Es gibt onClick in der Liste auf Spaltenebene. Wenn ihr da natürlich unabhängig von der Spalte immer das gleiche machen möchtet, dann könnt ihr einfach für jede Spalte das gleiche Skript eintragen.

Wie kann ich dann zum Objekt springen?

Uli

Du hast in deiner Form eine Liste und einen OpenObjectButton (initial deaktiviert, da noch nichts in der Liste ausgewählt wurde, objectID kannst du beliebig setzen, z.B. 0). Für jede Spalte der Liste setzt du den gleichen onClick, sowas wie „PRE_GuiUpdateOpenObjectButton($id, $list[‚objectID‘]);“ In dieser Funktion setzt du dann via Dynamik die ObjektID des OpenObjectButtons auf den passenden Parameter und setzt ihn auf enabled (er könnte ja noch initial deaktivert sein). Das wäre zumindest mein Ansatz.

Hi Niels,

danke, das muss ich mir nachher mal genauer ansehen.

Uli

Hi Niels,

der OpenObjectButton muss dann aber ausserhalb der Liste sein oder kann der auch als „Spalte“ für jede Zeile zur Verfügung stehen?

Uli

@Dr.Niels
ich möchte, nachdem ich die Variable ausgewählt habe, die Möglichkeit habe direkt dorthin zu springen.

Bildschirmfoto 2021-05-10 um 16.16.54

Uli

Ach, innerhalb des „Listenelement bearbeiten“-Dialogs? Dort ist keine Dynamik möglich. Offiziell funktioniert da noch nicht mal der OpenObjectButton (der Button übrigens auch nicht), siehe Doku von List. Der Dialog ist auch nicht dafür gedacht, dass dort irgendwelche Logik passiert. Wenn du da etwas eigenes machen möchtest, dann solltest du eher auf das onClick hin ein eigenes Popup öffnen. Dort kannst du dann deine Wünsche auch per Dynamik umsetzen.

@Dr.Niels

Der Info Button ist in der Liste „visible“: false

Im „Listenelement bearbeiten“ funktioniert er. Dort mache ich aber nur folgendes:

„onClick“: „if($ID != 0){print_r(IPS_GetVariable($ID));}“

Uli

Es mag sein, dass es aktuell funktioniert. Aber das ist undefiniertes und nicht vorgesehenes Verhalten. Verlasse dich also nicht darauf, dass das zukünftig auch so bleiben wird.

@Dr.Niels
@paresy

dann beides als feature request für zukünftige Zwecke.

Uli

@Dr.Niels
Hallo Niels, habe jetzt den OpenObject Button ausserhalb der Liste erstell und deine Anweisungen oben befolgt. Vielen Dank für den Tip, das funktioniert als Workaround.
Schönen Feiertag !

Uli

Ich möchte das Thema nochmal aufgreifen.

Ich habe den Fall, das ich eine (readonly)-Liste (im Action-Bereich) eines Moduls habe, das die mit dieser Instanz diverse Objekte auflistet.
Und da wäre es natürlich schick, wenn ich dann betroffene Objekte (Instanzen, Ablaufpläne etc) aufrufen kann.
Natürlich könnte ich statt einer Liste zu nutzen, ein Formular dynamisch erzeugen, das dann alle Objekte auflistet mit einem OpenObjectButtom -Element für jedes Objekt erzeugt … aber so doll wäre das ja nicht.
Gibt es da eine Perspektive oder habt ihr noch eine andere Idee?

Ich weiß nicht 100% was Du machen willst, aber ich bastele auch gerade an einem sehr dynamischen Konfigurationsdialog in Verbindung mit Listen.

Ich habe es jetzt so gelöst das wenn eine Zeile in der Liste selektiert wird (grau) dann sende ich die Auswahl per IPS_RequestAction und machen Update auf „value“ usw. eines Buttons im Formular den man dann wieder drücken kann!

Wenn es das ist - meld dich einfach im Chat!

vielen Dank für den Tip.
Habe ich aufgegriffen, mache das nicht via RequestAction sondern per UpdateFormField. Da UpdateFormField ja keine globale IPs-Funktion ist musste ich dafür eine eigene winzige Wrapper-Funktion erstellen (bisschen tricky, seil es Bestandteile einer von mir global verwendeten Bibliothek ist).

Halt ein bisschen „durchs Knie ins Auge“, aber machbar.
Was mich bei so etwas etwas stört ist die Tatsache, das solche Funktionen dann auch im Script-Editor angeboten werden, eine Unterscheidung zu „echten“ public-Funktionen gibt es ja leider nicht

Freut mich, für welches Modul machst Du es?

zuerst hierfür: https://community.symcon.de/t/modul-symcon-notifications/ aber ist Bestandteile meiner libs/CommStubs/common.php und wird damit bei ein paar anderen meiner Module auch Verwendung finden