Skip to main content
Glama

Create Interface Definition

onto_interface_create_def
Idempotent

Eine neue Interface-Definition anlegen (neue Sicht/Maske). Aendert das Modell. Nutze es, wenn ein Objekttyp eine zusaetzliche Ansicht bekommen soll. Bestehende Interfaces aenderst du mit onto_interface_update_def. | EN: onto, interface, create, def Verengung (optional): table.scopes mit Scopenamen schraenkt die Zeilen dieser Ansicht zusaetzlich auf diese Scopes ein (nur einschraenkend, unbekannter Name = 400). Die Ansicht zeigt sie unter der Ueberschrift an; trage sie zusaetzlich in die description des Interfaces ein.

Input Schema

NameRequiredDescriptionDefault
nameYesInterface-Name
labelNoLabel
rolesNoRollen
scope_idNoScope-ID (Tuer-Scope)
descriptionNoBeschreibung. Wird die Ansicht per table.scopes verengt, gehoert die Verengung hier hinein (Beispiel: Beschraenkt auf autovermietung1)
view_configNoview_config-JSON. Listen ohne SQL: {"elements":["table"],"table":{"from":"objects","type":"shift","columns":[...]}}. Spalte: {"key", "prop" | "system"(udid,name,created,modified,scope,type) | "link"+"richtung"(vorwaerts/rueckwaerts)+("linkvalue", "type", "prop" = Feld des Ziels), optional "label", "format"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), "bis":"<prop>" (nur mit format zeitspanne; ergibt 09:00 - 15:30), "werte"{Schluessel:Anzeige}, "link_zelle", "hidden"}. Sammelspalte: {"key", "agg":"count|sum|min|max", "link", "richtung", "prop", "ziel":{"wo":[{"prop","op","wert"}]}}. Verengung (optional): Feld scopes mit einer Liste von Scopenamen, z.B. scopes: [autovermietung1], schraenkt die Zeilen zusaetzlich auf diese Scopes ein. Nur einschraenkend, nie erweiternd; ein unbekannter Name bricht mit 400 ab. Die Ansicht zeigt die Verengung unter der Ueberschrift an; nenne sie zusaetzlich in der description des Interfaces. Link-Gruppen: "links":{"Name":{"link","richtung","type","wo":[{...}],"sort":{...}}} — alle Spalten mit "link":"Name" lesen DASSELBE Objekt (Auswahl einmal definiert). "filter", "sort", "zeitraum" nennen nur Spalten-Keys. "person" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: "prop":["firstName","lastName"] verbindet Felder ("trenner"), "bis":"shiftEnd" mit "format":"zeitspanne" ergibt 09:00 - 15:30, "nur":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: "matrix":{"rows":{from,type,label,nur_mit{linktyp,type}},"cells":{from,type,bruecke{linktyp,type},zeitfeld,text[],"wo":[{prop,op,wert}]}}, wobei "wo" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: "detail":{"type":"person","fields":[{prop|system,key?,label,format,werte}],"panels":[{"type":"subform","from":"objects","objekt":"shift","via":{"link":"worksShift"|[...],"richtung":"vorwaerts|rueckwaerts","linkvalue":optional},"wo":[...],"sort":{key|prop,dir},"columns":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt; "wo" auf Tabellen-Ebene sind Bedingungen an die GRUNDMENGE (z.B. Personenbindung "wo":[{"prop":"email","op":"=","wert":"{'current_user_email'}"}]). Der Text-Platzhalter MUSS in der Definition in einfachen Anfuehrungszeichen stehen ({'current_user_email'}) - der Baustein setzt ihn als '{current_user_email}' ein, der Renderer ersetzt ihn roh. Ohne Quotes lehnt der Validator ab.; ein Zelltext-Eintrag mit "werte":{"abgesagt":"abgesagt","_":""} zeigt den Zusatz NUR bei diesem Wert ("_" = alle anderen, leer = Teil weglassen — so wird eine abgesagte Schicht im Raster markiert, ohne sie zu verstecken) (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie "sql" nur fuer Administratoren.
data_scope_idNoLese-Scope der Daten, wenn die Ansicht in einem anderen (Tuer-)Scope liegt. Verlangt eine Personenbindung in der SQL ({current_user_email}, {current_profile_id} oder {current_user_id}).
object_type_idsNoObjekttyp-IDs

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / description / description
      Previous value: -"Beschreibung"New value: +"Beschreibung. Wird die Ansicht per table.scopes verengt, gehoert die Verengung hier hinein (Beispiel: Beschraenkt auf autovermietung1)"
  2. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt; \"wo\" auf Tabellen-Ebene sind Bedingungen an die GRUNDMENGE (z.B. Personenbindung \"wo\":[{\"prop\":\"email\",\"op\":\"=\",\"wert\":\"{'current_user_email'}\"}]). Der Text-Platzhalter MUSS in der Definition in einfachen Anfuehrungszeichen stehen ({'current_user_email'}) - der Baustein setzt ihn als '{current_user_email}' ein, der Renderer ersetzt ihn roh. Ohne Quotes lehnt der Validator ab.; ein Zelltext-Eintrag mit \"werte\":{\"abgesagt\":\"abgesagt\",\"_\":\"\"} zeigt den Zusatz NUR bei diesem Wert (\"_\" = alle anderen, leer = Teil weglassen — so wird eine abgesagte Schicht im Raster markiert, ohne sie zu verstecken) (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Verengung (optional): Feld scopes mit einer Liste von Scopenamen, z.B. scopes: [autovermietung1], schraenkt die Zeilen zusaetzlich auf diese Scopes ein. Nur einschraenkend, nie erweiternd; ein unbekannter Name bricht mit 400 ab. Die Ansicht zeigt die Verengung unter der Ueberschrift an; nenne sie zusaetzlich in der description des Interfaces. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt; \"wo\" auf Tabellen-Ebene sind Bedingungen an die GRUNDMENGE (z.B. Personenbindung \"wo\":[{\"prop\":\"email\",\"op\":\"=\",\"wert\":\"{'current_user_email'}\"}]). Der Text-Platzhalter MUSS in der Definition in einfachen Anfuehrungszeichen stehen ({'current_user_email'}) - der Baustein setzt ihn als '{current_user_email}' ein, der Renderer ersetzt ihn roh. Ohne Quotes lehnt der Validator ab.; ein Zelltext-Eintrag mit \"werte\":{\"abgesagt\":\"abgesagt\",\"_\":\"\"} zeigt den Zusatz NUR bei diesem Wert (\"_\" = alle anderen, leer = Teil weglassen — so wird eine abgesagte Schicht im Raster markiert, ohne sie zu verstecken) (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."
  3. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt; ein Zelltext-Eintrag mit \"werte\":{\"abgesagt\":\"abgesagt\",\"_\":\"\"} zeigt den Zusatz NUR bei diesem Wert (\"_\" = alle anderen, leer = Teil weglassen — so wird eine abgesagte Schicht im Raster markiert, ohne sie zu verstecken) (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt; \"wo\" auf Tabellen-Ebene sind Bedingungen an die GRUNDMENGE (z.B. Personenbindung \"wo\":[{\"prop\":\"email\",\"op\":\"=\",\"wert\":\"{'current_user_email'}\"}]). Der Text-Platzhalter MUSS in der Definition in einfachen Anfuehrungszeichen stehen ({'current_user_email'}) - der Baustein setzt ihn als '{current_user_email}' ein, der Renderer ersetzt ihn roh. Ohne Quotes lehnt der Validator ab.; ein Zelltext-Eintrag mit \"werte\":{\"abgesagt\":\"abgesagt\",\"_\":\"\"} zeigt den Zusatz NUR bei diesem Wert (\"_\" = alle anderen, leer = Teil weglassen — so wird eine abgesagte Schicht im Raster markiert, ohne sie zu verstecken) (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."
  4. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt; ein Zelltext-Eintrag mit \"werte\":{\"abgesagt\":\"abgesagt\",\"_\":\"\"} zeigt den Zusatz NUR bei diesem Wert (\"_\" = alle anderen, leer = Teil weglassen — so wird eine abgesagte Schicht im Raster markiert, ohne sie zu verstecken) (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."
  5. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."
  6. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,zahl,waehrung), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[]}} (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."
  7. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,zahl,waehrung), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Freie \"sql\" nur fuer Administratoren."New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,zahl,waehrung), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[]}} (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."
  8. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON (elements/card/filter)"New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,zahl,waehrung), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Freie \"sql\" nur fuer Administratoren."
  9. Added

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/destructive/idempotent/openWorld, and the description adds genuinely new behavioral facts: it mutates the model ('Aendert das Modell'), an unknown scope name aborts with 400, scope narrowing is only restrictive and never widening, and free SQL is admin-only. It does not describe the response or uniqueness/permission requirements, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, but it is followed by a very long, unstructured wall of view_config detail that largely duplicates the schema, plus a noisy keyword line ('| EN: onto, interface, create, def') that carries no meaning. Mixed German/English and dense parenthetical nesting make the tool hard to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 8-parameter create tool with no output schema, the description covers the mutation semantics, scope behavior, and admin restriction well, but omits what is returned (e.g. created ID), name-uniqueness constraints, and any required permissions for a model-changing operation. It is adequate but leaves real gaps for the creation path.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does add cross-field semantics (the narrowing must also be mirrored into the interface description, placeholder quoting rules for text templates), but the bulk of the view_config prose restates structure the schema already documents, so it does not substantially exceed the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource ('Eine neue Interface-Definition anlegen') plus a plain-language gloss ('neue Sicht/Maske'), and it explicitly routes updates of existing interfaces to onto_interface_update_def. An agent can distinguish this from its closest sibling without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the triggering condition ('Nutze es, wenn ein Objekttyp eine zusaetzliche Ansicht bekommen soll') and names the alternative tool for the modification case. This is an explicit use-vs-alternative mapping, not just implied context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.