Bug in Konfigurationsformulare fehlerhafter Aufruf von onChange in List of List

Moin Moin,

ich habe ein Problem mit einer onChange Funktion im Konfigurationsformular.

Hier ein Auszug des Form-Arrays

   {
    "elements": [
     {
            "type" : "RowLayout",
            "items" : [
                {
                    "type": "List",
                    "name": "panelPageValuesArray",
                    "caption": "Wertzuweisung",
                    "rowCount": 5,
                    "add": true,
                    "delete": true,
                    "columns": [
                        {
                            "caption": "Seite",
                            "name": "panelPage",
                            "width": "50px",
                            "visible": true,
                            "add" : "0",
                            "edit" : {
                                "type": "Select",
                                "width" : "200px",
                                "options" : [
                                ] ,
                                "onChange" : "DBNSP_LoadPageColumns($id,$panelPage);"
            
                            }

                        },
                        {
                            "caption": "Variablenverknüpfung",
                            "name": "panelPageValues",
                            "width": "350px",
                            "visible": true,
                            "add": "",
                            "edit": {
                                "type": "List",
                                "enabled": true,
                                "visible": true,
                                "rowCount": 4,
                                "add": true,
                                "delete": true,
                                "columns": [
                                    {
                                        "caption": "Variable",
                                        "name": "objectId",
                                        "width": "300px",
                                        "add": 0,
                                        "edit": {
                                            "type": "SelectObject", 
                                            "options" : [
                                            ]
                                        }
                                    },
                                    {
                                        "caption": "Trenner",
                                        "name": "split",
                                        "width": "120px",
                                        "add": "",
                                        "edit": {
                                            "type": "ValidationTextBox"
                                        }
                                    },
                                    {
                                        "caption": "formatiert",
                                        "name": "formatted",
                                        "width": "120px",
                                        "add": false,
                                        "edit": {
                                            "type": "CheckBox"
                                        }
                                    },
                                    {
                                        "caption": "Ergebnisspalte",
                                        "name": "resultField",
                                        "width": "300px",
                                        "add": 0,
                                        "edit": {
                                            "type": "NumberSpinner", 
                                            "options" : [
                                            ]
                                        }
                                    }

                                ]
                            }
                        }
                    ]
                },
                {
                    "type": "List",
                    "name": "panelActionValuesArray",
                    "caption": "Aktionszuweisung",
                    "rowCount": 5,
                    "add": true,
                    "delete": true,
                    "columns": [
                        {
                            "caption": "Seite/ Object",
                            "name": "panelPage",
                            "width": "50px",
                            "visible": true,
                            "add" : "0",
                            "edit" : {
                                "type": "NumberSpinner",
                                "width" : "200px",
                                "minimum": 0,
                                "maximum": 60000
                            }
                        },
                        {
                            "caption": "Variablenverknüpfung",
                            "name": "panelActionValues",
                            "width": "350px",
                            "visible": true,
                            "add": "",
                            "edit": {
                                "type": "List",
                                "enabled": true,
                                "visible": true,
                                "rowCount": 4,
                                "add": true,
                                "delete": true,
                                "columns": [
                                    {
                                        "caption": "result",
                                        "name": "result",
                                        "width": "300px",
                                        "add": 0,
                                        "edit": {
                                            "type": "ValidationTextBox"
                                        }
                                    },
                                    {
                                        "caption": "Aktion",
                                        "name": "action",
                                        "width": "120px",
                                        "add": "RequestAction",
                                        "edit": {
                                            "type": "Select",
                                            "options" : [
                                                {"caption" : "RequestAction", "value" : 0},
                                                {"caption" : "start script", "value" : 1},
                                                {"caption" : "call Page", "value" : 2}
                                            ]
                                        }
                                    },
                                    {
                                        "caption": "Seite / Object",
                                        "name": "id",
                                        "width": "300px",
                                        "add": 0,
                                        "edit": {
                                            "type": "NumberSpinner"
                                        }
                                    },
                                    {
                                        "caption": "toggle",
                                        "name": "toggle",
                                        "width": "120px",
                                        "add": false,
                                        "edit": {
                                            "type": "CheckBox",
                                            "onChange" : "DBNSP_PanelActionToggle($id);"
                                        }
                                    },
                                    {
                                        "caption": "maxstep",
                                        "name": "maxstep",
                                        "width": "300px",
                                        "add": 0,
                                        "edit": {
                                            "type": "NumberSpinner"
                                        }
                                    },
                                    {
                                        "caption": "value",
                                        "name": "value",
                                        "width": "300px",
                                        "add": 0,
                                        "edit": {
                                            "type": "ValidationTextBox"
                                        }
                                    }
                                ]
                            }
                        }
                    ]
                }
            ]
        },

In einer geschachtelten Liste habe ich einen „onChange“ : „DBNSP_PanelActionToggle($id);“ definiert
Wenn der Wert der Checkbox geändert wird bekomme ich eine Exception angezeigt:

Fatal error: Uncaught Exception: Instance does not implement this function in /var/lib/symcon/scripts/__generated.inc.php:3234
Stack trace:
#0 /-(9): DBNSP_PanelActionToggle(0)
#1 {main}
thrown in /var/lib/symcon/scripts/__generated.inc.php on line 3234

in /var/lib/symcon/scripts/__generated.inc.php ist die Funktion korrekt eingetragen.

function DBNSP_PanelActionToggle($InstanceID)
{
        if(IPS_GetInstance($InstanceID)["ModuleInfo"]["ModuleID"] == "{60160581-6E5D-B2F6-9DD7-C8EAC0C7B878}") {
                require_once('/var/lib/symcon/modules/nspanel-by-boni/NSPanelConfig/module.php');
                $result = (new NSPanelConfig($InstanceID))->PanelActionToggle();
        }
        else {
                throw new Exception("Instance does not implement this function");
        }
        return $result;
}

Ich vermute, hier wird $id nicht korrekt an die Funktion übertragen.

Definiere ich im Formular die Instanz-ID anstatt der Variablen $id, funktioniert alles prima.

 "onChange" : "DBNSP_PanelActionToggle(57890);"

Liegt es am Konfigurationsformular, oder habe ich mein Formular falsch gebaut?

Grüße aus dem kalten Münsterland.

Detlev.

id wird hier auch benutzt. Benutze einen anderen Namen für die Spalte.
Michael

Hallo Michael,

danke für den Tipp, da hätte ich lange nach gesucht :slight_smile:

Nun ergibt sich noch ein kleines Problem:

Über „Hinzufügen“ wird nun die Eingabemaske aufgerufen

Meine „onchange“ Funktion ist der Checkbox zugeordnet und schaltet die Felder maxstep und value auf enable / disable

Setze ich die Checkbox auf True werden die Felder maxstep und value korrekt auf disable gesetzt. Speichere ich die Seite und lege eine neue an, bleiben sie auf disable.

Ich habe keine OnXXX für die Liste gefunden, die beim Editieren eines Listeneintrags oder beim Hinzufügen eine Aktion ausführen kann.

Einzig nach dem Speichern oder nach dem Editieren direkt in der Liste.

Grüße Detlev.

Gibt es alles. Nennt sich onAdd und onEdit.
Allerdings werden die nach dem hinzufügen und nach dem bearbeiten ausgeführt.
Wobei du natürlich nach dem onEdit/onAdd ja die Felder wieder aktivieren kannst.
Aber sie dann beim öffnen zum editieren, je nach Status der checkbox zu deaktivieren, geht glaube ich nicht.
Michael