Zum Hauptinhalt springen

Profile-Konfiguration Referenz

Zweck

Profile definieren in centraQuest, wie ein Objekt fachlich verwendet, angezeigt, gesucht, importiert, bearbeitet und in Tabellen dargestellt wird. Ein Profil ist dabei nicht zwingend identisch mit einer Datenbanktabelle oder einem DMS-Aspekt. Es ist eher die fachliche Sicht auf eine oder mehrere technische Masken/Aspekte.

Diese Seite dokumentiert die Struktur eines Eintrags unter profiles: und erklärt die Wirkung der wichtigsten und in den Konfigurationen tatsächlich vorkommenden Eigenschaften. Für die Analyse wurden die Standardkonfigurationen in centraquest und die kundenspezifischen Konfigurationen unter C:\Users\danie\IdeaProjects\centraquestCustom berücksichtigt.

Grundprinzip

Ein Profil steht in einer YAML-Datei unter dem Schlüssel profiles::

profiles:
- id: obj_table_invoice_account
label: Accounts
profile_type: ["insert", "internal", "view"]
mask: obj_table_invoice_account
fields:
- id: cq_account_no
label: Account
type: string
searchable: true
result_columns:
- id: cq_account_no
label: Account
table:
enabled: true
route: /webui/profile_table?profile_id=obj_table_invoice_account

Die wichtigsten Bausteine sind:

  • id: fachliche Profil-ID. Diese ID wird in URLs, obj_profile, Importen, Dialogen und Details verwendet.
  • profile_type: Kontext, in dem das Profil gültig ist, zum Beispiel insert, view, search, table, internal oder folder.
  • mask: technische Maske oder Aspekt, auf dem die Felder gespeichert werden.
  • fields: Felder und UI-Verhalten im Detailformular.
  • result_columns: Spalten für Trefferlisten und Tabellen.
  • table: moderne Tabellen-/Admin-Konfiguration für /webui/profile_table.

Lade- und Transformationslogik

Die Profile werden beim Start aus allen geladenen YAML-Konfigurationen zusammengeführt. Danach transformiert der Default-Configurator die Profile:

  • Globale fields und field_groups werden in Profile expandiert.
  • inherit wird aufgelöst.
  • Für view-Profile können automatisch search-Profile erzeugt werden, wenn create_search_profiles aktiv ist.
  • Bei Vererbung werden Listen mit id nicht stumpf ersetzt, sondern Einträge mit gleicher id aktualisiert und neue Einträge angehängt.

Wichtig: Die am Ende wirksame Konfiguration ist nicht immer exakt die YAML-Datei. Sie ist das Ergebnis aus globalen Feldern, Field-Groups, Vererbung und automatischer Search-Profil-Erzeugung.

Top-Level-Eigenschaften eines Profils

Identität und Typ

EigenschaftWirkung
idEindeutige fachliche Profil-ID. Wird unter anderem in profile_id, obj_profile, Import-URLs und Tabellenlinks verwendet.
labelSichtbarer Name des Profils. Wird in Dialogen, Details, Tabellen und Menüs verwendet.
titleAlternativer Titel für spezielle Reports oder Dialoge. Wenn vorhanden, kann dieser statt label verwendet werden.
profile_typeGültigkeitsbereich des Profils. Häufige Werte sind insert, view, search, table, internal, folder. Kann String oder Liste sein.
maskTechnische Maske oder Aspekt. Kann ein String oder eine Liste sein. Bei Listen nimmt generische Tabellenlogik oft den ersten Eintrag als Hauptaspekt.
table_nameAlternativer technischer Tabellen-/Aspektname, vor allem bei tabellarischen oder importnahen Profilen.
typeFachlicher Sondertyp. Kommt in gewachsenen Konfigurationen vor und wird von Speziallogik interpretiert.

Formulare und Details

EigenschaftWirkung
fieldsListe der Felder, die im Profil sichtbar, editierbar, suchbar oder technisch relevant sind.
tab_idsTabs für generische Detailseiten. Felder mit tab_id werden diesen Tabs zugeordnet.
invoice_tab_idsInvoice-spezifische Tab-Liste für Rechnungsdetailseiten.
visible_tabsEinschränkung oder Steuerung sichtbarer Tabs in älteren oder kundenspezifischen Masken.
edit_tabsTabs für Editierdialoge, wenn Bearbeitungs- und Anzeigeansicht auseinanderfallen.
properties_dialogPfad zu einem Microclient-/YAML-Properties-Dialog. Wird für klassische Dialoge und bestimmte Import-/Edit-Flows genutzt.
main_dialogHauptdialog für Spezialmasken. Kommt in Custom-Konfigurationen vor.
detail_page_templateEigene HTML-Detailseite statt generischer Detaildarstellung.
formReport- oder Spezialformular-Konfiguration. Häufig mit tab_ids, Eingabefeldern oder Filterfeldern.
form_columnsAnzahl Spalten im generischen Formularlayout.
form_heightVorgabe für Dialog- oder Formularhöhe.
label_spacingAbstand/Label-Layout in Formularen.
initial_window_widthStartbreite für Dialogfenster.
initial_window_heightStarthöhe für Dialogfenster.
widthBreite eines Dialogs, Reports oder Formularbereichs. Kontextabhängig.
heightHöhe eines Dialogs, Reports oder Formularbereichs. Kontextabhängig.
edit_side_panelAktiviert oder konfiguriert seitliche Bearbeitungspanels in Spezialansichten.
split_windowSteuert geteilte Ansichten bei älteren Microclient-/Viewer-Flows.

Tabellen, Listen und Suche

EigenschaftWirkung
result_columnsTrefferlisten-/Tabellenspalten auf Profilebene. Wird verwendet, wenn table.result_columns fehlt.
result_columns_shortKürzere Spaltenvariante für kompakte Listen.
short_result_columnsAlternative Bezeichnung für kompakte Spaltenlisten.
columnsSpaltenliste bei Reports oder Speziallisten.
tableModerne Tabellenkonfiguration für Profil-Tabellen. Siehe eigener Abschnitt.
queryDQL- oder SQL-Query für Report-/Listenprofile.
paramsParameterliste für Queries oder Value-Assistance-Konfigurationen.
dql_templateDQL-Template, häufig in generischen Reports oder kundenspezifischen Listen.
initial_searchVorgabewerte oder Startverhalten für Suchprofile.
result_limitMaximale Anzahl Treffer in Report-/Suchansichten.
limit_fieldFeld, über das ein Limit oder Mandantenfilter gesteuert wird.
map_resultsMapping für Query-Ergebnisse in Reports oder Speziallisten.
report_typeReport-Variante oder Renderer-Auswahl.
refresh_onEreignisse oder Felder, bei denen eine Liste/ein Report neu geladen wird.
double_click_actionAktion beim Doppelklick auf einen Treffer.
EigenschaftWirkung
menuMenüeinbindung oder Menüdefinition für klassische Navigation.
show_menuSteuert, ob Menüeinträge angezeigt werden.
context_menuKontextmenü für Objekte oder Tabellenzeilen.
portlet_menuMenüeinträge für Portlets/Dashboards.
button_idsListe aktivierter Buttons in klassischen Dialogen.
buttonsDirekte Button-Konfiguration in kundenspezifischen Profilen.
actionZielaktion, URL oder Import-/Microclient-Aktion.
attachmentsKonfiguration für Anhänge oder zugehörige Dokumente.
referencesReferenzbeziehungen oder verknüpfte Objekte.
list_versionsSteuert, ob Versionen in Listen/Details angezeigt werden.

Sicherheit und Sichtbarkeit

EigenschaftWirkung
aclRollen-/ACL-Beschränkung auf Profilebene. Wird von einigen Menüs, Reports oder Spezialansichten ausgewertet.
insert_grpRollen/Gruppen, die dieses Profil für Neuanlage/Import verwenden dürfen.
read_only_disabledSchaltet Readonly-Verhalten in bestimmten Masken aus oder um.
show_subscriptionSteuert Abonnement-/Benachrichtigungsfunktionen.
notify_on_saveBenachrichtigung nach Speichern, wenn von Speziallogik unterstützt.
debug / debug0Aktiviert Debug-Verhalten in einzelnen Profilen oder historischen Custom-Flows.

Import, Integration und Sonderlogik

EigenschaftWirkung
import_dialogDialog für Importprozesse.
import_excelExcel-Import-Konfiguration.
database_connectionDatenbankverbindung für import- oder reportnahe Profile.
controllerSpezialcontroller für ein Profil.
modeModus für Spezialrenderer, Importer oder Reports.
constantsProfilbezogene Konstanten für Templates, Queries oder Controller.
variablesVariablen für Templates, Reports oder kundenspezifische Logik.
keyinfo_queryQuery für Kontextinformationen.
keyinfo_dqlDQL für Kontextinformationen.
keyinfo_functionFunktion zur Ermittlung von Kontextinformationen.
folder_maskZiel- oder Kontextmaske für Ordnerprofile.
filename_fieldFeld, das Dateinamen oder Exportnamen liefert.
has_obj_nameHinweis für Speziallogik, ob obj_name vorhanden ist.
center_onZentrier-/Fokusfeld in bestimmten Speziallisten.
layoutLayoutvariante für kundenspezifische Seiten.
styleStilvariante, meistens Custom- oder Portal-spezifisch.

Client-Unterstützung

Die folgende Matrix zeigt, welche Profileigenschaften vom klassischen Microclient und/oder von der WebUI ausgewertet werden. Ein x bedeutet: Der Client unterstützt diese Eigenschaft direkt oder über die generischen Profile-/Tabellen-/Formularrenderer. Leere Zellen bedeuten nicht zwingend, dass der Key wirkungslos ist; er kann trotzdem von kundenspezifischen Templates, Jobs, Imports oder Spezialcontrollern gelesen werden.

Top-Level-Profileigenschaften

EigenschaftmicroclientwebuiHinweis
idxxZentrale Profil-ID für beide Clients.
labelxxSichtbarer Name in Dialogen, Listen und Admin-Seiten.
titlexxAlternativer Titel in Reports, Dialogen oder Tabellen.
profile_typexxFiltert Profile nach insert, view, search, table usw.
maskxxTechnische Maske bzw. Aspektbasis.
table_namexxWird vor allem von Tabellen-/Importlogik verwendet.
typexxSpezialtyp für gewachsene Renderer oder Controller.
fieldsxxFormular-, Such- und Tabellenbasis.
tab_idsxxGenerische Tab-Struktur.
invoice_tab_idsxInvoice-WebUI-Detailseiten.
visible_tabsxxLegacy- und Spezialmasken.
edit_tabsxxEditieransichten mit separater Tab-Steuerung.
properties_dialogxKlassischer YAML-/Microclient-Dialog.
main_dialogxHistorische Spezialdialoge.
detail_page_templatexEigene WebUI-Detailseite.
formxxReports und Spezialformulare.
form_columnsxxFormularlayout.
form_heightxxDialog-/Formularhöhe, je nach Renderer.
label_spacingxxLayoutsteuerung.
initial_window_widthxMicroclient-Fensterbreite.
initial_window_heightxMicroclient-Fensterhöhe.
widthxxKontextabhängige Breite.
heightxxKontextabhängige Höhe.
edit_side_panelxWebUI-Spezialansichten.
split_windowxKlassische geteilte Microclient-Ansichten.
result_columnsxxTrefferlisten, Reports und WebUI-Tabellen.
result_columns_shortxxKompakte Listenvarianten.
short_result_columnsxxAlternative Schreibweise.
columnsxxReport- und Speziallisten.
tablexModerne /webui/profile_table-Konfiguration.
queryxxReport-/Listenabfragen.
paramsxxQuery- und Formularparameter.
dql_templatexxDQL-Templates für Reports/Speziallisten.
initial_searchxxStartfilter oder Suchvorgaben.
result_limitxxTrefferbegrenzung.
limit_fieldxxLimit-/Mandantensteuerung.
map_resultsxxMapping für Queryresultate.
report_typexxReport-Renderer-Auswahl.
refresh_onxxNeuladen bei Ereignissen/Feldänderungen.
double_click_actionxKlassische Listenaktion.
menuxxNavigation/Legacy-Menüeinbindung.
show_menuxxSichtbarkeit von Menüeinträgen.
context_menuxxKontextmenüs.
portlet_menuxMicroclient-/Portlet-Menüs.
button_idsxKlassische Dialogbuttons.
buttonsxxSpezialbuttons, je nach Renderer.
actionxxURL, Controller- oder Client-Aktion.
attachmentsxxAnhänge/Zusatzdokumente.
referencesxxVerknüpfte Objekte.
list_versionsxxVersionsanzeige.
aclxxRollen-/ACL-Beschränkung.
insert_grpxxBerechtigung für Anlage/Import.
read_only_disabledxxReadonly-Sonderlogik.
show_subscriptionxxAbonnements/Benachrichtigungen.
notify_on_savexxBenachrichtigung nach Speichern.
debug / debug0xxDebug-Sonderlogik.
import_dialogxKlassischer Importdialog.
import_excelxxExcel-Import-Konfiguration.
database_connectionxxImport-/Report-Verbindungen.
controllerxxSpezialcontroller.
modexxRenderer-/Import-/Reportmodus.
constantsxxTemplate-/Controller-Konstanten.
variablesxxTemplate-/Controller-Variablen.
keyinfo_queryxxKontextinformationen per Query.
keyinfo_dqlxxKontextinformationen per DQL.
keyinfo_functionxxKontextinformationen per Funktion.
folder_maskxxOrdner-/Importkontext.
filename_fieldxxDateiname/Exportname.
has_obj_namexxHinweis für Objektname-Logik.
center_onxFokus/Zentrierung in klassischen Listen.
layoutxxLayoutvariante in Spezialseiten.
stylexxStilvariante in Spezialseiten.

Feld- und Spalteneigenschaften

EigenschaftmicroclientwebuiHinweis
idxxFeld- oder Spalten-ID.
labelxxSichtbarer Text.
typexxRenderer/Datentyp.
valuexxDefault oder statischer Wert.
read_onlyxxSperrt Bearbeitung.
hiddenxxTechnisch vorhanden, nicht sichtbar.
display_onlyxxNur Anzeige, keine persistente Eingabe.
external_onlyxxNicht direkt in der Maske gespeichert.
required / minxxPflichtfeld/Validierung.
maxxxMaximalwert/-länge.
lengthxxtechnische/UI-nahe Länge.
tab_idxxTab-Zuordnung.
field_sizexxFormularbreite.
widthxxFeld-/Spaltenbreite.
heightxxFeldhöhe.
new_linexxLayoutumbruch.
hide_labelxxLabel ausblenden.
invisible_labelxxLabelplatz ohne sichtbares Label.
label_orientationxxLabelausrichtung.
label_spacingxxLabelabstand.
group_titlexxGruppentitel.
group_descriptionxxGruppenbeschreibung.
group_columnxxGruppenspalte.
group_pairxxPaarweise Anordnung.
fieldsetxxFieldset-/Rahmenzuordnung.
render_zonexWebUI-Spezialrenderer.
draw_linexxTrennlinie.
stylexxInline-/Renderer-Stil.
background_colorxxHintergrundfarbe.
hide_on_mobilexMobile WebUI.
keywordsxxWerteliste.
keywords_onlyxxNur Wertelistenwerte zulassen.
keywordxxLegacy-/Alternativwerteliste.
comboxxSuchoperatoren.
value_assistancexxValue Assistance.
value_assistance_propertiesxxMapping aus Value Assistance.
select2xWebUI-Select2-Verhalten.
multivaluexxMehrwertfeld.
multi_valuexxHistorische Alternative.
keywords_separatorxxTrenner für Mehrwerte.
translatexxÜbersetzung von Werten/Labels.
add_wildcardxxSuch-/Value-Assistance-Wildcards.
searchablexxSuch-/Tabellenfeld.
filterxxSpalten-/Tabellenfilter.
priorityxFallback-Spalten in generischen WebUI-Tabellen.
result_widthxxSpaltenbreite generierter Result-Columns.
label_templatexxSpalten-/Suchresultat-Template.
clickxxKlickaktion.
actionsxxFeld-/Spaltenaktionen.
validation_typexxFormularvalidierung.
change_scriptxKlassische Feldänderungslogik.
changexxFeldänderungskonfiguration.
focusxxInitialfokus.
placeholderxxPlatzhaltertext.
tooltipxxTooltip/Hilfe.
infoxxZusatzinformation.
exec_sumxxSummen-/Berechnungslogik.
make_pathsxxPfadgenerierung.
wysiwygxxRich-Text-Editor, je nach Renderer.
rowsxxZeilenanzahl.
aclxxFeld-/Spalten-ACL.
tab_offxxFeld/Tab deaktivieren.

table-Eigenschaften

EigenschaftmicroclientwebuiHinweis
enabledxAktiviert generische WebUI-Profil-Tabelle.
idxHTML-/DataTable-ID.
titlexSeitentitel.
routexTabellenroute.
details_route / detail_routexDetail-/Editroute.
edit_modexModal/Detail-Editiermodus.
server_sidexServerseitiges Paging/Suchen/Sortieren.
order_byxDQL-Sortierung.
row_templatexEigene Row-Darstellung.
detail_modal_basexBasis-Template für Modal-Details.
allow_add_itemxAdd-Button.
fixed_filtersxPermanente Tabellenfilter.
result_columnsxTabellenspalten.
searchxSuchkonfiguration.
placementxAdmin-/Invoice-Admin-Einordnung.
filtersxErweiterte Filterkonfiguration.
search.enabledxAktiviert Suche.
search.fieldsxSuchfelder.
placement.areaxHauptbereich.
placement.sectionxGruppe/Sektion.
placement.navigationxNavigationsschlüssel.
placement.menu_labelxMenülabel.
placement.iconxIcon.
placement.orderxSortierung.
placement.aclxRollenbeschränkung.
placement.group_titlexGruppentitel.
placement.group_orderxGruppenreihenfolge.
placement.group_iconxGruppenicon.

profile_type

profile_type entscheidet, in welchem Kontext ein Profil gefunden wird.

WertBedeutung
insertProfil darf für Neuanlage oder Import verwendet werden.
viewProfil darf für Detailanzeige verwendet werden.
searchProfil ist Suchprofil. Kann automatisch aus view erzeugt werden.
tableProfil beschreibt eine tabellarische Stammdaten- oder Admin-Ansicht.
internalInternes Profil. Oft für technische Tabellen, Admin-Objekte oder Systemprozesse.
folderOrdnerprofil. Wird bei Ordnerimporten oder Baumstrukturen verwendet.

Ein Profil kann mehrere Typen haben:

profile_type: ["insert", "internal", "view"]

Bei getProfileById(profile_id, profile_type='view') wird nur ein Profil gefunden, dessen profile_type view enthält. Darum kann dieselbe id mehrfach existieren, zum Beispiel einmal als view und einmal als search.

mask und obj_profile

mask ist der technische Speicherort. id ist die fachliche Sicht.

Beispiel:

id: cq_acc_invoice
mask: ["obj_accounting", "object"]

Das bedeutet:

  • Die Objekte werden technisch auf den Aspekten obj_accounting und object gespeichert.
  • Fachlich werden sie als Profil cq_acc_invoice behandelt.
  • In vielen Tabellen wird zusätzlich nach obj_profile='cq_acc_invoice' gefiltert, wenn der Aspekt ein Feld obj_profile besitzt.

Bei Tabellenprofilen ist id häufig identisch mit mask, zum Beispiel obj_table_invoice_currency. Bei Dokumentprofilen ist das oft nicht der Fall.

Vererbung mit inherit

inherit erlaubt, ein bestehendes Profil als Basis zu verwenden:

profiles:
- id: cq_acc_invoice_custom
inherit: cq_acc_invoice
profile_type: ["view"]
label: Custom Invoice
fields:
- id: cq_custom_field
label: Custom Field

Wirkung:

  • Das Elternprofil wird kopiert.
  • Felder und Listen mit gleicher id werden aktualisiert.
  • Neue Felder werden angehängt.
  • Normale Werte wie label, mask, properties_dialog werden überschrieben.

Wenn inherit auf eine Liste zeigt, werden mehrere Profile nacheinander gemerged. Wenn kein Profil mit passender id und passendem profile_type existiert, bricht die Konfiguration mit einem Fehler ab.

fields

fields ist die wichtigste Liste innerhalb eines Profils. Jeder Eintrag beschreibt ein Feld im Formular, in der Suche, in Tabellen oder für technische Verarbeitung.

Basis-Eigenschaften

EigenschaftWirkung
idFeld-ID. Muss zur technischen Maske passen, außer bei external_only oder display_only.
labelSichtbarer Feldname. Wird in Formularen, Tabellen und Suchmasken angezeigt.
typeFeldtyp oder UI-Renderer, zum Beispiel string, text, date, timestamp, select, multiselect, textarea, checkbox, number.
valueDefaultwert oder statischer Wert. In automatisch erzeugten Search-Profilen wird value meist entfernt.
read_onlyFeld ist nicht editierbar.
hiddenFeld wird nicht sichtbar angezeigt, bleibt aber technisch Teil des Profils.
display_onlyFeld existiert nur für Anzeigezwecke und wird als read-only Property erzeugt.
external_onlyFeld kommt nicht aus der Maske, wird aber als Profileigenschaft in Dialogen/Flows bereitgestellt.
required / minPflicht-/Validierungslogik. In den gewachsenen Konfigurationen wird häufig min: 1 als Pflichtfeld genutzt.
maxMaximalwert oder maximale Länge, je nach Renderer.
lengthTechnische oder UI-nahe Länge.

Layout-Eigenschaften

EigenschaftWirkung
tab_idTab, in dem das Feld angezeigt wird. Muss zu tab_ids oder invoice_tab_ids passen.
field_sizeBreite im Formular. Häufig small, mid, large, full.
widthDirekte Breitenangabe für spezielle Renderer.
heightHöhe für Textareas, WYSIWYG-Felder oder Spezialfelder.
new_lineBeginnt eine neue Zeile im Formularlayout.
hide_labelBlendet das Label aus.
invisible_labelReserviert ggf. Labelplatz, ohne sichtbares Label.
label_orientationAusrichtung des Labels.
label_spacingAbstand zwischen Label und Feld.
group_titleGruppentitel im Formular.
group_descriptionBeschreibung einer Feldgruppe.
group_columnGruppierung/Spaltensteuerung.
group_pairPaarweise Anordnung von Feldern.
fieldsetFieldset-/Rahmenzuordnung.
render_zoneZielbereich für Spezialrenderer.
draw_lineVisuelle Trennlinie.
styleInline- oder Renderer-Stil.
background_colorHintergrundfarbe, sofern vom Renderer unterstützt.
hide_on_mobileFeld auf mobilen Ansichten ausblenden.

Auswahl und Value Assistance

EigenschaftWirkung
keywordsStatische Werte oder URL/DQL-basierte Werteliste.
keywords_onlyNur Werte aus keywords zulassen.
keywordHistorische oder alternative Einzelwert-Konfiguration.
comboSuchoperatoren in Search-Profilen, zum Beispiel enthält/gleich.
value_assistanceVerweist auf eine konfigurierte Value Assistance.
value_assistance_propertiesMapping zwischen Auswahlwerten und Zielfeldern.
select2Aktiviert Select2-ähnliches UI-Verhalten.
multivalueTechnisches Multivalue-Feld. Werte werden zusätzlich in <aspect>_multivalue gespeichert.
multi_valueHistorische/alternative Schreibweise. Wenn möglich multivalue verwenden.
keywords_separatorTrenner für mehrwertige Keyword-Darstellung.
translateWerte oder Labels übersetzen.
add_wildcardFügt bei Suche oder Value Assistance Wildcards hinzu.

Suche und Tabellenverhalten

EigenschaftWirkung
searchableFeld darf in globaler Tabellen-/Reportsuche verwendet werden.
filterFiltertyp für Tabellen, zum Beispiel select oder multiselect.
priorityFeld kann als Fallback-Spalte in generischen Tabellen verwendet werden.
result_widthBreite der automatisch erzeugten Result-Column in Search-Profilen.
label_templateTemplate für Spalten-/Suchergebnisdarstellung.
clickKlickaktion auf Feld oder Tabellenspalte.
actionsFeldbezogene Aktionen.

Validierung und dynamisches Verhalten

EigenschaftWirkung
validation_typeValidierungsart, wenn vom Formularrenderer unterstützt.
change_scriptScript bei Feldänderung.
changeAlternative oder ältere Änderungskonfiguration.
focusFeld erhält initialen Fokus oder dient als Fokusziel.
placeholderPlatzhaltertext im Eingabefeld.
tooltipHilfetext/Tooltip.
infoZusatzinformation im Formular.
exec_sumSummen-/Berechnungslogik in Spezialmasken.
make_pathsPfadgenerierung oder Pfadlogik in Dokument-/Folder-Profilen.
wysiwygAktiviert Rich-Text-Editor.
rowsZeilenanzahl für Textareas oder Tabellenfelder.

Sicherheit auf Feldebene

EigenschaftWirkung
aclFeld nur für bestimmte Rollen/Gruppen anzeigen oder editieren, sofern der Renderer das prüft.
tab_offFeld oder Tab abhängig von Kontext deaktivieren.
read_onlyWichtigste Feldsperre. Kann zusätzlich von Workflow- oder Rechte-Logik überschrieben werden.

Beobachtete Legacy-/Tippfehler-Keys

In den gewachsenen Konfigurationen kommen auch Tippfehler oder historische Varianten vor, zum Beispiel:

  • lable statt label
  • filed_size statt field_size
  • keywordd statt keywords

Diese Keys sollten nicht neu verwendet werden. Wenn sie in einer bestehenden Kundenkonfiguration vorkommen, muss vor dem Aufräumen geprüft werden, ob Speziallogik sie auswertet oder ob sie wirkungslos sind.

result_columns

result_columns beschreibt Spalten in Trefferlisten, Reports und Tabellen.

result_columns:
- id: obj_date
label: Date
type: date
width: 120px
searchable: true
EigenschaftWirkung
idFeld-ID oder Sonderspalte wie _checkbox oder _actions.
labelSpaltenüberschrift.
typeRenderer/Formatierung, zum Beispiel date, timestamp, amount.
widthSpaltenbreite.
searchableDarf in der globalen Tabellensuche verwendet werden.
filterSpaltenfiltertyp.
multivalueKennzeichnet Multivalue-Spalten. Relevant für Suche und Filter.
label_templateTemplate zur Darstellung des Werts.
click / actionKlick- oder Zeilenaktion, wenn vom Row-Template unterstützt.

Wenn keine result_columns definiert sind, versuchen generische Tabellen eine Fallback-Auswahl:

  1. table.result_columns
  2. profile.result_columns
  3. Felder mit priority
  4. Standardfelder wie obj_name, obj_title, obj_description, obj_status, obj_modified, obj_modifier

table

table ist die neuere Konfiguration für generische Profil-Tabellen, insbesondere /webui/profile_table?profile_id=....

table:
enabled: true
route: /webui/profile_table?profile_id=obj_user
details_route: /webui/profile_details?profile_id=obj_user
edit_mode: modal
server_side: true
order_by: Aobj_user_id
result_columns:
- id: obj_login_name
label: Login Name
searchable: true
search:
enabled: true
fields:
- obj_login_name
- obj_email
placement:
area: admin
section: users
navigation: admin.users
menu_label: User Management
icon: users
order: 100
acl: ["rolle_Administrator"]
EigenschaftWirkung
enabledAktiviert die generische Tabellenansicht.
idHTML-/DataTable-ID. Wenn nicht gesetzt, wird sie aus der Profil-ID abgeleitet.
titleSeitentitel für die Tabelle.
routeURL zur Tabellenansicht. Empfohlen ist /webui/profile_table?profile_id=<profile>.
details_route / detail_routeZiel für Detail-/Editansicht.
edit_modeBearbeitungsmodus, häufig modal.
server_sideServerseitiges Paging/Suchen/Sortieren. Wichtig bei großen Tabellen.
order_byDQL-Sortierung. In DQL keine SQL-DESC-Syntax verwenden, sondern bestehende Sortierpräfixe wie A.../D..., wo im Code unterstützt.
row_templateEigenes Row-Template.
detail_modal_baseBasis-Template für Modal-Details.
allow_add_itemSteuert, ob der Add-Button angeboten wird.
fixed_filtersFeste Filter, die immer an die generierte DQL-Query angehängt werden.
result_columnsSpalten nur für diese Tabellenansicht. Überschreibt Profilebene.
searchSuchkonfiguration. Siehe unten.
placementEinordnung in Admin-/Invoice-Admin-Menüs.
filtersErweiterte Filterkonfiguration in einzelnen Profilen.

table.search

EigenschaftWirkung
enabledAktiviert Suchfunktion.
fieldsFeld-IDs, die in der globalen Suche berücksichtigt werden.

Wenn search.fields fehlt, nimmt die generische Tabelle alle Spalten mit searchable: true. Wenn auch das fehlt, werden textartige Felder als Fallback verwendet.

table.placement

placement beschreibt, wo ein Profil in Admin- oder Invoice-Admin-Übersichten erscheinen soll.

EigenschaftWirkung
areaHauptbereich, zum Beispiel admin oder invoice.
sectionGruppe innerhalb des Bereichs.
navigationLogischer Navigationsschlüssel.
menu_labelSichtbarer Menüname.
iconIcon-ID, häufig Tabler/Lucide-kompatibel.
orderSortierung innerhalb der Gruppe.
aclRollenbeschränkung für diesen Menüpunkt.
group_titleGruppentitel in einigen Admin-Layouts.
group_orderReihenfolge der Gruppe.
group_iconIcon der Gruppe.

Report-Profile

Profile mit IDs wie report_* oder cq_*_report verwenden häufig zusätzliche Eigenschaften:

EigenschaftWirkung
queryDQL/SQL-Grundquery.
columns / result_columnsErgebnisdarstellung.
formFilter-/Eingabeformular für den Report.
dql_templateDQL mit Platzhaltern.
paramsParameter für Query oder Template.
map_resultsMapping der Querywerte auf Anzeigenamen.
report_typeAuswahl eines Report-Renderers.
initial_searchStartfilter.

Reports sind historisch sehr flexibel. Vor Änderungen immer prüfen, welches Template oder welcher Controller das konkrete Report-Profil rendert.

Invoice-spezifische Profile

Invoice-Profile verwenden zusätzlich fachliche Felder und einige Invoice-spezifische Konventionen:

KonventionBedeutung
cq_acc_invoice*Rechnungs-/Belegprofile für Kreditoren, Debitoren, Kreditkarten, Orders, PO usw.
obj_table_invoice_*Invoice-Stammdaten- und Admin-Tabellen.
invoice_tab_idsTabs in den großen Invoice-Detailseiten.
cq_client_accountingMandanten-/Buchhaltungskreis. Viele Tabellen werden darüber automatisch eingeschränkt.
cq_doctypeDokumenttyp innerhalb eines Invoice-Profils.
cq_currency, cq_amount_*, cq_tax_*Rechnungsbeträge, Währung und Steuerlogik.
cq_accounting_areaBuchungs-/Kontierungsbereich.
obj_assignee*Workflow-Zuweisungen.

Bei obj_table_invoice_* und obj_table_address fügt die generische Tabellenansicht mandantenbezogene Filter hinzu, wenn das Feld cq_client_accounting existiert und ein aktiver Mandant ausgewählt ist.

Multivalue-Felder

Ein Feld mit multivalue: true wird technisch speziell behandelt:

  • Im Hauptaspekt liegt meist eine JSON-/Textrepräsentation.
  • Zusätzlich existiert eine Tabelle <aspect>_multivalue mit einem Datensatz pro Einzelwert.
  • DQL-Filter auf Multivalue-Felder müssen über EXISTS statt Join laufen, sonst werden Objekte mehrfach zurückgegeben.

Beispiel:

- id: obj_user_roles
label: Roles
multivalue: true
searchable: true
filter: multiselect

Beim Suchen nach Rollen darf ein User mit mehreren Rollen trotzdem nur einmal in der Trefferliste erscheinen. Deshalb ist Multivalue-Suche ein sensibler Bereich.

Für neue generische Tabellenlinks bevorzugen:

/webui/profile_table?profile_id=<profile_id>

Für Details:

/webui/profile_details?profile_id=<profile_id>&id=<obj_id>

Historische Routen wie /admin/users können weiter existieren, sollten aber für neue Admin-/Invoice-Admin-Links möglichst durch Profil-URLs ersetzt werden, wenn die generische Tabelle das Profil vollständig abbildet.

Häufige Fehlerquellen

Gleiche id mehrfach

Mehrere Profile mit gleicher id sind erlaubt, wenn sie unterschiedliche profile_type haben. Problematisch wird es, wenn dieselbe id und derselbe profile_type mehrfach geladen werden. Dann hängt das Ergebnis von Lade- und Merge-Reihenfolge ab.

mask passt nicht zu fields

Jedes normale Feld muss in der technischen Maske existieren. Ausnahmen sind external_only und display_only. Wenn ein Feld nicht existiert, taucht es im generischen Formular nicht wie erwartet auf oder verursacht Fehler.

tab_id ohne passenden Tab

Wenn ein Feld tab_id: accounting hat, aber tab_ids diesen Tab nicht enthält, kann das Feld je nach Renderer verschwinden oder in einem Fallback landen.

searchable auf Multivalue-Feldern

Multivalue-Felder in der globalen Suche müssen korrekt durch DQL behandelt werden. Bei Funktionswrappern wie lower(obj_user_roles) muss die Query weiterhin über EXISTS laufen, nicht über einen Join.

Tippfehler in Keys

lable, filed_size oder keywordd sehen harmlos aus, werden aber von Standardrenderern normalerweise nicht verstanden. Solche Keys sind Kandidaten für Bereinigung, aber nur nach Prüfung der betroffenen Custom-Logik.

Zu viel Logik im Profil

Profile sollten Struktur und UI-Verhalten definieren. Wenn Fachlogik zu komplex wird, sollte sie in Controller, Value Assistance, Extension oder Service-Code ausgelagert werden.

Praktische Checkliste für neue Profile

  1. id, label, profile_type und mask definieren.
  2. Prüfen, ob alle fields.id technisch in der Maske existieren oder bewusst external_only/display_only sind.
  3. Tabs mit tab_ids oder invoice_tab_ids definieren und jedes sichtbare Feld einem sinnvollen tab_id zuordnen.
  4. Für Tabellen table.enabled, route, details_route, result_columns, search.fields und order_by setzen.
  5. Für Admin-/Invoice-Admin-Anzeige table.placement ergänzen.
  6. Bei Mandantenbezug cq_client_accounting bewusst setzen und prüfen, ob automatische Filter greifen sollen.
  7. Multivalue-Felder nur dann searchable setzen, wenn die Suche fachlich gewünscht ist.
  8. Keine neuen Legacy-Schreibweisen verwenden.
  9. UI-Labels in Englisch pflegen und bei sichtbaren Texten Übersetzungen ergänzen.

Gescannte Quellen

Der Scan umfasste:

  • config/**/*.yaml
  • apps/invoice/**/*.yaml
  • C:\Users\danie\IdeaProjects\centraquestCustom/**/*.yaml

Dabei wurden über 500 YAML-Dateien mit profiles: und über 1'000 Profileinträge gefunden. Die häufigsten Top-Level-Keys waren unter anderem label, fields, profile_type, mask, icon, result_columns, insert_grp, tab_ids, visible_tabs, menu, table, properties_dialog und inherit.

Diese Referenz beschreibt die derzeit beobachtete Praxis. Einzelne Kundenprofile können zusätzliche Spezialkeys enthalten, die nur durch kundenspezifische Templates oder Controller ausgewertet werden.