Datenstrukturen

Datenstrukturen definieren nicht Datenbank-gebundene Datenstrukturen, z.B. für Selektions-Elemente und für Daten-Edit-Elemente und Multi-Daten-Edit-Elemente, wobei die Datenstrukturen dann als Datencontainer fungieren und die CRUD-Methoden via Geschäftsprozess behandelt werden. Datenstrukturen können den folgenden Metadatenobjekten zugeordnet werden:

  • Selektionselemente
  • Daten-Edit-Elemente
  • Multi-Daten-Edit-Elemente

Eigenschaften Datenstrukturen

BereichEigenschaftWert
Allgemeines

Name

(Name)

Name der Datenstruktur


Titel

(Title)

Titel der Datenstruktur

Nur vorhandene Datensätze editieren?

(EditOnlyExistingData)

Sollen nur vorhandene Datensätze editiert werden? In diesem Fall können keine neuen Datensätze angelegt werden und die entsprechenden Funktionen im UI werden nicht zur Verfügung gestellt.

Verweis auf benutzerdefinierte Felder

(UserDefinedFieldsSource)

Verweis auf benutzerdefinierte Felder (Definition in Tabelle „USysSetup, Einträge "Tree"="UserFields"; z.B. "Adresse" oder "Artikel"“), die dem Anwender beim Editieren zur Verfügung stehen sollen.

Anhängen an Datenstruktur der Partner-Kennung

(AppendToPartnerId, AppendToPackageId)

Partner- und Lösungs-Kennung (bei Sage „Sage“) der gleichnamigen Datenstruktur, an den diese Definition angehängt werden soll;

Einsatzzwecke:

  • Makro-Funktionen an Ereignisse der Datenstruktur bzw. deren Felder anhängen
  • Felder an die Datenstruktur anhängen
  • "Detail-Datenstrukturen“ an die Datenstruktur anhängen

Hinweis: Anhängen ist immer einstufig, Verkettungen sind nicht möglich


Kommentar

(Comment)

Beliebiger Kommentar zur Dokumentation.

Der Kommentar wird nicht zum Client übertragen und dient nur zur Dokumentation von Besonderheiten, Hinweisen, etc. Bei Auslieferung/Weitergabe der Lösung wird der Kommentar eingeschlossen, so dass der Empfänger ihn im AppDesigner sieht.

Daten

Ab Version (9.0.4)

Primärschlüsselfeld 1 bis 9

(PrimaryKeyField 1 bis 9)

Feldname des ersten bis neunten Primärschlüsselfeldes

Falls hier NICHT definiert, müssen die Primärschlüsselfelder in der "PrepareMetaData"-Methode des Datenservice gesetzt werden


 Ab Version (9.0.4)

Primärschlüsseltyp 1 bis 9

(PrimaryKeyType 1 bis 9 

Primärschlüsselfeld 1 ist

  • 0 = variabel
  • 6 = Fremdschlüssel

Hinweise für die verschiedenen Einsatzfälle:

  • Schlüssel des Typs 0 muss der Anwender eingeben
  • Schlüssel des Typs 6 muss der Anwender eingeben, wobei er auf die vorhandenen Werte der jeweiligen Datenklasse eingeschränkt und nur für Datenklassen-Felder erlaubt.
Beziehungen

Detail-Datensätze

(DetailDataStructureReferences)

Liste von Verweisen auf abhängige Datenstrukturen (1:N-Beziehung) (logischer Feldname (zur Referenzierung aus dem Daten-Edit-Element), Partner-Kennung, Lösungs-Kennung, Schlüssel)

Ist maximal vierstufig erlaubt.

Daten-Service

Daten-Service-Dll-Name

(DataServiceAssemblyName)

Bei Datenstrukturen, die in Edit- oder Multi-Data-Edit-Formularen genutzt werden, muss ein Dienst hinterlegt werden, der die AppServer-seitig benötigten Methoden enthält.

Hier wird der Name der aufzurufenden DLL (ohne Verzeichnisname, aber mit Dateinamenerweiterung „.dll“) angegeben

Die DLL wird immer im OL-Shared-Verzeichnis gesucht.


Daten-Service-Klassenname

(DataServiceClassName)

Name der aufzurufenden Klasse, die von DataServiceBase ableiten muss.


Geschäftslogik-Dll-Name

(BusinessAssemblyName)

Name der DLL, aus der im AppDesigner die Datenstruktur erzeugt wurde (schreibgeschützt)

Geschäftslogik-Klassenname

(BusinessClassName)

Vollqualifizierter Name der Klasse, aus der im AppDesigner die Datenstruktur erzeugt wurde (schreibgeschützt)
Ereignisse (Makros)

Beim Laden

(OnLoad)

Makros, die nach dem Laden der Metadaten aufgerufen werden.

Das Ereignis wird nur auf Server-Seite ausgelöst.


Vor Änderung

(BeforeUpdate)

Makros, die vor dem Einfügen oder vor Änderungen einer Datenstruktur aufgerufen werden (Rückgabe eines Cancel-Flags und einer Cancel-Meldung)

Die Ereignisse werden auf Client- und Server-Seite ausgelöst (sinnvollerweise im Makro die Funktion „IsRunningOnServer“ verwenden, um nur auf dem Server auszuführen und Roundtrips zu vermeiden)

Bei Unter-Datenstrukturen (in Multi-Data-Edit-Elementen) gilt Folgendes:

  • Client-seitig: Vor- bzw. nach der CRUD-Methode wird nur das Makro des obersten (Haupt-)Datensatzes ausgeführt.
  • Es erfolgt keine Server-seitige Ausführung.

Hinweis: Auf die Schlüsselfelder kann mit dem Ausdruck "GetKeyFieldValue()" zugegriffen werden.


Vor Löschung

(BeforeDelete)

Makros, die vor der Löschung einer Datenstruktur aufgerufen werden

Hinweis: Auf die Schlüsselfelder kann mit dem Ausdruck "GetKeyFieldValue()" zugegriffen werden.

  • In diesem Ereignis aufgerufenen Geschäftsprozessen (siehe Makro-Befehl "AufrufenDll") werden automatisch die zu löschenden Daten zur Verfügung gestellt
  • Rückgabe eines Cancel-Flags und einer Cancel-Meldung
  • Server-seitige Ausführung innerhalb der Transaktion

Beim Löschen von Teil-Datenstrukturen (nur in Multi-Data-Edit-Elementen):

  • Es erfolgt zunächst die Client-seitige Ausführung und beim Speichern der kompletten Datenstruktur die Server-seitige Ausführung.
  • Auch wenn mehrere Zeilen gelöscht werden, wird dieses Makro für alle Zeilen nur einmal zusammen ausgeführt.

Die Ereignisse werden auf Client- und Server-Seite ausgelöst (sinnvollerweise im Makro die Funktion „IsRunningOnServer“ verwenden, um nur auf dem Server auszuführen und Roundtrips zu vermeiden)

Bei Unter-Datenstrukturen (in Multi-Data-Edit-Elementen) gilt Folgendes:

  • Client-seitig: Vor- bzw. nach der CRUD-Methode wird nur das Makro des obersten (Haupt-)Datensatzes ausgeführt.
  • Es erfolgt keine Server-seitige Ausführung.

Nach Einfügung

(AfterInsert)

Makros, die nach dem Einfügen einer neuen Datenstruktur aufgerufen werden (Server-seitige Ausführung innerhalb der Transaktion)

Die Ereignisse werden auf Client- und Server-Seite ausgelöst (sinnvollerweise im Makro die Funktion „IsRunningOnServer“ verwenden, um nur auf dem Server auszuführen und Roundtrips zu vermeiden)

Bei Unter-Datenstrukturen (in Multi-Data-Edit-Elementen) gilt Folgendes:

  • Client-seitig: Vor- bzw. nach der CRUD-Methode wird nur das Makro des obersten (Haupt-)Datensatzes ausgeführt.
  • Es erfolgt keine Server-seitige Ausführung.

Nach Änderung

(AfterUpdate)

Makros, die nach dem Ändern einer Datenstruktur aufgerufen werden (Server-seitige Ausführung innerhalb der Transaktion)

Die Ereignisse werden auf Client- und Server-Seite ausgelöst (sinnvollerweise im Makro die Funktion „IsRunningOnServer“ verwenden, um nur auf dem Server auszuführen und Roundtrips zu vermeiden)

Bei Unter-Datenstrukturen (in Multi-Data-Edit-Elementen) gilt Folgendes:

  • Client-seitig: Vor- bzw. nach der CRUD-Methode wird nur das Makro des obersten (Haupt-)Datensatzes ausgeführt.
  • Es erfolgt keine Server-seitige Ausführung.

Nach Löschung

(AfterDelete)

Makros, die nach dem Löschen einer Datenstruktur aufgerufen werden (Server-seitige Ausführung innerhalb der Transaktion)

Beim Löschen von Teil-Datenstrukturen (nur in Multi-Data-Edit-Elementen):

  • Es erfolgt zunächst die Client-seitige Ausführung und beim Speichern der kompletten Datenstruktur die Server-seitige Ausführung.
  • Auch wenn mehrere Zeilen gelöscht werden, wird dieses Makro für alle Zeilen nur einmal zusammen ausgeführt.

Die Ereignisse werden auf Client- und Server-Seite ausgelöst (sinnvollerweise im Makro die Funktion „IsRunningOnServer“ verwenden, um nur auf dem Server auszuführen und Roundtrips zu vermeiden)

Bei Unter-Datenstrukturen (in Multi-Data-Edit-Elementen) gilt Folgendes:

  • Client-seitig: Vor- bzw. nach der CRUD-Methode wird nur das Makro des obersten (Haupt-)Datensatzes ausgeführt.
  • Es erfolgt keine Server-seitige Ausführung.

Hinweis: Auf die Schlüsselfelder kann mit dem Ausdruck "GetKeyFieldValue()" zugegriffen werden.


Vor Änderung durch API

(BeforeUpdateByApi)

(ab Version 9.0.4)

Makros, die vor Änderung und Neuanlage eines Datensatzes nach dem Setzen der Standard-Werte und vor der Feldvalidierung aufgerufen werden.

Der Zweck des Ereignisses ist es, Werte von Feldern zu setzen, die als Pflichtfelder definiert sind oder Daten-abhängig befüllt werden müssen, im zugehörigen API-Endpunkt jedoch nicht zur Verfügung gestellt werden.

  • Die Funktion "IsRecordInsert" gibt im Makro an, ob es sich um einen neuen Datensatz handelt.
  • In in diesem Ereignis aufgerufenen Geschäftsprozessen (siehe Makro-Befehl "AufrufenDll") werden automatisch die neuen und alten Daten zur Verfügung gestellt.
  • Rückgabe eines Cancel-Flags und einer Cancel-Meldung.

Beispiel: Der API-Endpunkt für Kunden enthält zwar die Felder "Name" und "LieferOrt", zur Speicherung wird allerdings auch das Pflichtfeld "Matchcode" benötigt. Dieses kann im Makro gebildet werden.

Das Ereignis wird nicht auf Client- sondern nur Server-Seite ausgelöst, wenn das Speichern durch einen API-Aufruf initiiert wurde.

Lizenzierung

Lizenz-Kürzel

(LicenseTokens)

Applikationskürzel der zu prüfenden Lizenz (nur in Nicht-Sage-Lösungen verwendbar und änderbar)


Lizenz-Kürzel für Sage

(SageLicenseTokens)

Applikationskürzel der zu prüfenden Lizenz (nur in Sage-Lösungen verwendbar und änderbar)

Eigenschaften der Datenstrukturfelder

BereichEigenschaftWert
Allgemeines

Feldname

(Name)

Eindeutiger Feldname (für Anwender nicht sichtbar)



Feldtitel

(Title)

Titel des Feldes (für Anwender sichtbar)

Feld-Attribute anhängen?

(DoAppendTo)

Sollen Eigenschaften an das gleichnamige Feld der in "Anhängen an..." referenzierten Datenstruktur angehängt werden?

Einsatzzweck:

  • Makro-Funktionen an Ereignisse des Feldes anhängen
  • Datenreferenz-Filter, Datenreferenz-Parameter und Datenklassen-Filter erweitern/anhängen
  • Festlegen/Überschreiben von Eigenschaften von Standard und benutzerdefinierten Feldern (siehe Anhängen an…)

Datentyp

Datentyp

(DataType)

Datentyp:

  • 1 = Boolean
  • 2 = Int32
  • 3 = Decimal
  • 4 = Date
  • 5 = String
  • 6 = DateTime
  • 7 = Time
  • 8 = Duration
  • 15 = indexed String
  • 16 = indexed Image
  • 23 = Currency
  • 100 = Schlüssel 1 einer Datenklasse (zusätzlich sind ggf. Felder der Typen 101, 110, 111, 120 und 121 erforderlich; wird intern als Datentyp „String“ behandelt (z.B. in Makros), unabhängig vom konkreten Datentyp des Schlüssels in der Datenklassen-Definition bzw. der Datenbank)
  • 101 = Matchcode für Schlüssel 1 einer Datenklasse
  • 110 = Schlüssel 2 einer Datenklasse (zusätzlich ist ggf. ein Feld des Typs 111 erforderlich; wird intern als Datentyp „String“ behandelt (z.B. in Makros), unabhängig vom konkreten Datentyp des Schlüssels in der Datenklassen-Definition bzw. der Datenbank)
  • 111 = Matchcode für Schlüssel 2 einer Datenklasse
  • 120 = Schlüssel 3 einer Datenklasse (zusätzlich ist ggf. ein Feld des Typs 121 erforderlich; wird intern als Datentyp „String“ behandelt (z.B. in Makros), unabhängig vom konkreten Datentyp des Schlüssels in der Datenklassen-Definition bzw. der Datenbank)
  • 121 = Matchcode für Schlüssel 3 einer Datenklasse
  • 200 = Land/PLZ/Ort: Land
  • 201 = Land/PLZ/Ort: PLZ
  • 202 = Land/PLZ/Ort: Ort

Datentypen 101, 110 und 120 erfordern, dass ein Feld des Datentyps 100 vorhanden ist, das die gleiche Klasse referenziert oder ein Datenreferenzfeld vorhanden ist, für das "LoadBehaviour" ungleich "Immer laden" (d.h. Wert <>0) eingestellt ist und die gleiche Klasse referenziert.

Datentypen 111 erfordert, dass ein Feld des Datentyps 110 vorhanden ist, das die gleiche Klasse referenziert.

Datentypen 121 erfordert, dass ein Feld des Datentyps 120 vorhanden ist, das die gleiche Klasse referenziert.

Die Datentypen 200, 201 und 202 müssen immer zusammen vorkommen, wobei die Felder mit den Datentypen 201 und 202 in der Eigenschaft "Datenklassen-Schlüsselfeld“ auf das Feld mit dem Datentyp 200 verweisen müssen. In der UI-Definition (Daten-Edit-Element) müssen alle drei Felder referenziert werden, wobei die Platzierung anhand des Land-Feldes erfolgt.



Datentyp-Ergänzung

(DataTypeIndexedInfos)

Liste mit Key sowie mit "PackageId", "PartnerId", "Name" und "Id" zur Referenzierung eines Strings aus "StringResources.xml";

bei Datentyp 16 (indexed Image) zusätzlich:

  • "Value" als Verweis auf ein Bild in "Shared\Bitmaps\UI" (bei Datentyp 15 (indexed String) leer; "empty" = leere Anzeige, d.h. kein Icon; Dateinamen ohne Erweiterung, Standard ist automatisch hier ".png"; im Rahmen der Belegerfassung auch Semikolon-separierte Liste mehrerer Bilder, jedoch als hart-codierter Sonderfall für Sage-Einsatz)

Anzeigereihenfolge gemäß der Liste

Tipp:

  • Soll eine Liste fester Texte (analog Werteliste im Aufgabencenter) verwendet werden, kann stattdessen eine Datenreferenz mit "FROM (VALUES ..." erstellt werden.


Datenreferenz

(DataReferencePartnerId, DataReferencePackageId, DataReferenceName)

Partner-Kennung, Lösungs-Kennung und Name für die Datenreferenz, die als Grundlage für ein Auswahllisten-Eingabefeld dient.

Wenn die Eigenschaften "Datenreferenz-Filter", "Datenreferenz-Service-Dll-Name" und "Datenreferenz-Service-Klassenname" nicht verwendet werden, handelt es sich um eine sogenannte "statische" Datenreferenz. In diesem Fall werden die Daten beim Öffnen des jeweiligen Elementes einmalig eingelesen. Zum manuellen Aktualisieren steht der Makro-Befehl "DatenReferenzAktualisieren" zur Verfügung. Anderenfalls wird sie zur "dynamischen" Datenreferenz. Der Client liest dann jeweils beim Aufklappen der Liste die Daten automatisch neu ein.

Eine detaillierte Beschreibung der Datenrefernztypen finden Sie in Datenreferenzen.

Zulässig nur für Datentypen 1 (Boolean), 2 (Int32) und 5 (String)



Datenreferenz-Filter

(DataReferenceFilter)

Zusätzliche Bedingungen, welche die WHERE-Bedingung der SQL-Abfrage zur Laufzeit erweitern. Der Client liest jeweils beim Aufklappen der Liste die Datenreferenz neu ein.

Format:

  • Aus Sicherheitsgründen kann auf dem Client nicht direkt in SQL formuliert werden. Stattdessen wird die "SData Query Language" (siehe http://sage.github.io/SData-2.0/pages/core/0212/) verwendet, welche einem vereinfachten SQL entspricht.

    Einschränkungen:

    • Eine Negierung mit "not" muss sich immer auf einen booleschen Ausdruck beziehen.
      Richtig: not (UserName like '%Sage%')
      Falsch: UserName not like '%Sage%'

Platzhalter:

  • Im Filter können Platzhalter verwendet werden, um die Daten des aktuell geladenen Datensatzes im Filter zu verwenden. Das Format entspricht den üblichen Makro-Ausdrücken/Feldreferenzen.

Beispiel:

MyUnion.Periode=[Periode] AND MyUnion.Benutzer=[Benutzer]



Datenreferenz-Info-Felder

(DataReferenceInfoFields)

In einem Datenreferenz-Feld werden im UI neben dem eigentlichen Schlüssel (optional) auch alle anderen in der Datenreferenz referenzierten Felder angezeigt. Bei einem zusätzlichen Filter ("Datenreferenz-Filter") oder wenn eine DLL/Klasse und "Datenreferenz-Parameter“ hinterlegt sind wird die Datenreferenz erst beim Anzeigen der Auswahlliste komplett geladen. Für die Anzeige im Datenreferenz-Feld sind in der Datenstruktur die dort verwendeten Felder anzulegen und über die Liste "Datenreferenz-Info-Felder" in der gleichen Reihenfolge zu referenzieren.

Wird aktuell in Selektionselementen nicht unterstützt.



Datenreferenz-Parameter

(DataReferenceServiceParameters)

Übergabe von Werten an die 

Geschäftsprozesse:

  • An die in Eigenschaft DataReferenceServiceAssemblyName / DataReferenceServiceClassName angegebene Klasse
    (Basisklasse DataReferenceProcessBase, NamedParameters).
  • An den Geschäftsprozess der Datenreferenz, soweit vorhanden
    (Basisklasse  BusinessProcessBase, ServiceParameters).

Semikolon-separierte Liste von Name-/Ausdruck-Paaren. Konstante Texte müssen in Anführungszeichen eingefasst werden, innen liegende Anführungszeichen sind zu verdoppeln.

  • Format:
    Name:=Ausdruck[;...]

  • Beispiel:
    Art:=1;Typ:=[Typ];Kahn:="Kahn ""Der Titan"""

Datenreferenz muss definiert sein;

nur für dynamisch-gefilterte und dynamische Datenreferenz zulässig;

für Standardfelder:

  • Beim Anhängen (siehe "DoAppendTo") wird der Wert Semikolon-separiert erweitert.

für benutzerdefinierte Felder:

  • bei angehängten Feldern (siehe "DoAppendTo") wird der Wert verwendet, da das benutzerdefinierte Feld keine Festlegung enthält (beim Anhängen aus mehreren Lösungen heraus aber nur für die Lösung mit der niedrigsten Partner-/Lösungs-ID)


Datenreferenz-Service-Dll-Name

(DataReferenceServiceAssemblyName)

Definition einer DLL, über die die Datenreferenz dynamisch gefiltert wird. Der Geschäftsprozess liefert aus der Gesamtmenge der Daten nur die gültigen Schlüssel zurück.

Der Client liest jeweils beim Aufklappen der Liste die Datenreferenz neu ein.

Achtung: Die Daten werden zuerst komplett eingelesen und an den Client übertragen, der dann die Filterung initiiert. Bei großen Datenbeständen kann dies zu Performance-Problemen führen.

Hier wird der Name der aufzurufenden DLL (ohne Verzeichnisname, aber mit Dateinamenerweiterung „.dll“) angegeben.

Die DLL wird immer im OL-Shared-Verzeichnis gesucht



Datenreferenz-Service-Dll-Klassenname

(DataReferenceServiceClassName)

Name der aufzurufenden Klasse.

Als Basisklasse ist "DataReferenceProcessBase" zu verwenden.

Hinweis für Developer Partner

WDB-Eintrag 203334:
Dokument "Zusatzdokumentation zum Wiki für Developer Partner", DataReferenceProcessBase



Datenklasse

(DataClassPartnerId, DataClassPackageId, DataClassName)

Partner- und Lösungs-Kennung und Name der Datenklasse.




Datenklassen-Schlüsselfeld

(DataClassKeyField)

Verweis auf Schlüsselfeld der Datenklasse (zugehöriges Feld mit Datentyp 100 (Schlüssel 1 einer Data Class))

bzw. bei "Verbund Land/PLZ/Ort" Verweis auf Landes-Feld (zugehöriges Feld mit Datentyp 200 (Land))

bzw. auf Datenreferenz-Feld mit "LoadBehaviour" ungleich "Darstellung als Datenreferenz" (d.h. Wert <> 0)



Suchfilter

(FilterParameters)

Übergabe von Werten an die Datenklasse und an den angeschlossenen Suchdialog, um die Daten zu filtern. Dort können sie als Platzhalter für SQL verwendet werden (z.B. "$[Parameter(name)]") bzw. werden direkt an das dem Such-/Filterfeld zugeordnete Such-Element übergeben.

Außerdem Übergabe von Werten zur Verwendung in den Makros des Kontextmenüs der Datenklasse. Die Namen werden automatisch um einen führenden Unterstrich ergänzt und stehen damit in den Makros als lokale Variablen zur Verfügung.

Format:

  • Semikolon-separierte Liste von Name-/Ausdruck-Paaren
  • Konstante Texte müssen in Anführungszeichen eingefasst werden, innenliegende Anführungszeichen sind zu verdoppeln

Syntax:

  • <name>:=Makroausdruck[;...]

Beispiel:

  • Art:=1;Typ:=[Typ];Kahn:="Kahn ""Der Titan"""

Hinweis:

  • Wenn die Ausführung der Datenklasse erst zusammen mit der Server-seitigen Geschäftslogik erfolgt (weil "Automatische Datenklassen-Validierung" deaktiviert wurde), unterstützt die Geschäftslogik nur bei Bedarf diese erweiterte Filterung. Die Auswertung dieser Ausdrücke ist dann auf die Grundfunktionen beschränkt und auf die Daten des aktuellen Satzes.


Automatische Datenklassen-Validierung

(DataClassAutoValidation)

Definiert, ob die Datenklassen-Werte automatisch validiert werden. Wird keine automatische Validierung eingestellt, so muss ein unmittelbar nachfolgender Geschäftsprozess die Validierung durchführen. Der Normalfall ist daher immer "Ja".

Das Attribut dient zur Performance-Optimierung, wenn ein nachfolgender Geschäftsprozess ohnehin den Datenklassen-Wert validiert.

Ohne Validierung kann die Eingabehistorie des Feldes mangels Daten nicht automatisch erzeugt werden. Dies muss dann mit dem Makro "EintragenEingabeHistorie" im "Nach Änderung"-Makro des Feldes manuell erfolgen.



Standard-Wert

(DefaultValue)

Standardwert für die Eingabe.

Die Angabe eines Ausdrucks (muss mit „=“ beginnen) ist zulässig, wobei dort kein Zugriff auf andere Felder erlaubt ist.

Gilt auch bei Datenreferenzen, wobei dort geprüft wird, ob der Wert in der Liste vorhanden ist, ansonsten dort keine Vorbelegung.

Datumswerte müssen im ISO-Format („yyyy-mm-dd“ bzw. „yyyy-mm-ddThh:mm:ss“) angegeben werden.

Wird das Feld im User Interface als Hilfetext verwendet (für Assistenten-Dialoge), muss der Text, damit er übersetzbar ist, aus den String-Ressourcen gelesen werden (siehe Platzhalter "GetString()").

Ist "Von-Bis-Feld?" gesetzt, werden Von- und Bis-Wert mit diesem Standardwert belegt.



Formatierter Text?

(IsFormattedText)

Handelt es sich um einen formatierten Text?

  • 0 = Nein
  • 1 = Ja, RTF-formatierter Text
  • 2 = Ja, HTML-formatierter Text

In den Fällen 1 und 2 wird im Feld nur der RTF- bzw. HTML-Text gespeichert; werden beim Speichern andere Textvarianten (RTF, HTML oder Plain-Text) benötigt, so sind diese im Geschäftsprozess durch Konvertierung zu erzeugen.

Wird aktuell in Selektionselementen nicht unterstützt.



Textformatierung abschaltbar?

(IsTextFormattingSwitchable)

Soll der Anwender zwischen formatiertem und unformatiertem Text umschalten können?

Feld unformatierter Text

(PlainTextFieldName)

Feldname des Feldes, welches den unformatierten Text enthält.

Pflichtfeld?

(IsMandatory)

Markierung für Pflichtfeld

(ab Version 9.0)

Bei nummerischen Nicht-Pflicht-Feldern werden leere Felder und der Wert '0' unterschiedlich behandelt:

  • Leeres Feld: Wird als NULL in der Datenbank gespeichert, falls die SQL-Spalte Nullable ist.
  • Feldinhalt '0': Wird als '0' in der Datenbank gespeichert.

Beispiel-Szenario ist die erfasste Menge in der Inventur, bei der zwischen "noch nicht eingegeben" (NULL) und dem Lagerbestand '0' unterschieden werden muss.

Bei Datentyp 1 (Boolean) werden in Nicht-Pflicht-Feldern leere Felder über einen dritten Status "unbestimmt" visualisiert (NULL in der Datenbank). Im UI wird bei Pflicht-Feldern keine Pflichtfeldmarkierung angezeigt, weil aus Anwendersicht sowohl der Wert "False" als auch "True" zulässige Eingaben sind.

Felder der Datentypen 15 und 16 (indexed String und indexed Image) werden immer als Pflichtfeld behandelt, aber im UI nicht markiert, da sie generell immer eine Vorbelegung haben).

Von-Bis Felder ("IsFromTo"=True) können keine Pflichtfelder sein ("IsMandatory"=True).



Schreibschutz?

(IsReadOnly)

Markierung für Nur-Lese-Felder

"Schreibschutz?" wird für folgende Fälle aktiviert:

  • nicht Update-fähige Felder, z.B. Aggregate oder Sub-Queries
  • Felder, die für interne, rein Client-seitige Steuerungen verwendet werden
    (und die nicht im Datenbankschema enthalten sind)

Wird "Schreibschutz?" aktiviert, hat dies folgende Auswirkungen:

  • Die Einstellung kann zur Laufzeit nicht mehr umgeschaltet werden (auch nicht mit dem Makro-Befehl "FestlegenNurLesen").
  • Wird der Feldinhalt geändert (dies kann für interne oder auch temporäre Zwecke sinnvoll sein), führt dies nicht dazu, dass die Daten dirty werden.

Wird "Schreibschutz?" nicht aktiviert, kann zur Laufzeit Client-seitig mit dem Makro-Befehl "FestlegenNurLesen" die Einstellung auf "True" gesetzt werden.

  • Hierbei entsteht ein im UI schreibgeschütztes Feld, welches aber auf Datenebene beschreibbar bleibt.
  • Im UI wird dadurch eine direkte Änderung im Eingabefeld durch den Benutzer verhindert. Das Eingabefeld kann aber weiterhin fokussiert werden, z.B. um den Inhalt kopieren zu können und um am Feld hängende Funktionen ausführen zu können.
  • Programmatische Änderungen des Feldinhaltes (Client- und Server-seitig) werden nicht eingeschränkt. Das Dirty-Flag wird bei Änderungen gesetzt.
  • Das Dirty-Flag wird bei Änderungen nur dann gesetzt, wenn das Feld auch tatsächlich Update-fähig ist. Zum Abfragen dieses Zustandes steht in den Metadaten des Clients das ermittelte Flag "IsUpdateable" zur Verfügung (True, wenn die zugeordnete SQL-Anweisung gefüllt ist, bzw. bei Datenstrukturen immer, da es dort kein zugeordnetes SQL gibt).

Ein Anwendungsbeispiel ist z.B. in der Belegerfassung zu finden:

  • Bei Artikeln mit Dimensionen wird das Mengenfeld gesperrt. Der Inhalt kann aber per Funktions-Schaltfläche über einen Zusatzdialog, in dem Länge/Breite/Höhe eingegeben werden, geändert werden.

Rechteverwaltung:

  • Hat der Benutzer keine Schreib-Berechtigung für das Feld, wird diese Eigenschaft vom System beim Lesen der Metadaten automatisch auf True gesetzt.


Maximale Länge

(MaxLenght)

Maximale Länge für Strings (0 bedeutet "unendlich")

Hinweis: Im Datensatz (Data Record) wird dieser Wert automatisch aus dem Datenbankschema ermittelt.



Maximal Länge gemäß Feld

(MaxLengthDefinedByField)

Name des Feldes, das zur Laufzeit die Anzahl der maximale Länge enthält

das referenzierte Feld muss Int16 oder Int32 als Datentyp haben



Nachkommastellen

(DecimalPlaces)

Anzahl Nachkommastellen oder variable Anzahl (d.h. Nachkomma-Nullen ausblenden)


für mehr als 4 Nachkommastellen ist der Datentyp "FLOAT" in der SQL-Datenbank erforderlich;



Nachkommastellen-Definition in übergeordnetem Element?

(IsDecimalPlacesDefinitionInParent)

Erfolgt die Definition der Anzahl der Nachkommastellen über ein Feld des jeweils übergeordneten Elementes (bzw. deren jeweiligen Datenquelle)?



Nachkommastellen gemäß Feld

(DecimalPlacesDefinedByField)

Name des Feldes, das zur Laufzeit die Anzahl der Nachkommastellen enthält.

Das Attribut hat Vorrang vor dem Attribut "Nachkommastellen"

Das referenzierte Feld muss Int16 oder Int32 als Datentyp haben.



Von-Bis-Feld?

(IsFromTo)

Markierung für Von-Bis-Felder

Von-Bis-Felder dienen i.d.R. dazu, mittels Platzhalter "$[AppendAndParameterFromTo()]" eine Einschränkung im SQL zu erzeugen. Weitere Details siehe dort.

Werden Datenreferenzen verwendet, wird deren Eigenschaft "Mehrfach-Selektion erlaubt?" ignoriert.

Wird aktuell nur für Selektionselemente unterstützt.



FromToAutoValidation
(Automatische Von-Bis-Feld-Validierung?)

Ab 9.0.7

Definiert, ob die Werte eines Von-Bis-Feldes automatisch validiert werden; wird keine automatische Validierung eingestellt, so muss ein unmittelbar nachfolgender Geschäftsprozess die Validierung durchführen. Der Normalfall ist daher immer "Ja".


"Ja" nur erlaubt, wenn "IsFromTo"=Ja


Mehrfachauswahl erlaubt bei Von-Bis-Feld?

(AllowMultiselectForFromTo)

Selektions-Element:

  • Bei Von-Bis-Feldern mit Datenklasse inkl. Suchdialog:
    • Bei "Ja" ist alternativ zur Von-Bis-Auswahl eine Auswahl einzelner Zeilen über den Suchdialog der Datenklasse möglich.
  • Bei einem Listen-Unterelement:
    • Bei "Ja" können mehrere Einträge markiert und deren Schlüssel übernommen werden.
      • Es wird nur ein Schlüsselsegment pro Zeile berücksichtigt (siehe Datenquelle, "KeyFieldName1").
      • Der Feldwert besteht in diesem Fall aus einer Semikolon-separierten Liste der Schlüsselwerte. Texte sind in Anführungszeichen eingefasst, innenliegende Anführungszeichen sind verdoppelt.
      • Im Unterschied zur Einzelselektion wird der Feldwert erst aktualisiert, wenn das Feld verlassen wird (siehe Ereignis "ValidationAfterChange" etc.).
    • Handlungsempfehlung: Die Mehrfachauswahl über ein Feld mit einem Listen-Unterelement ist bei einer überschaubaren Anzahl von Datensätzen sinnvoll. Das Selektions-Element ist dann quasi ein erweitertes Kombinationsfeld.
      Bei vielen möglichen Datensätzen ist ein Von-Bis-Feld mit Mehrfachauswahl sinnvoller. Dort bleibt im Suchdialog die Selektion auch bei Filterungen erhalten und es gibt eine Übersicht über alle selektierten Zeilen.

      "Ja" nur erlaubt, wenn "IsFromTo"=Ja und

      • Datums-Feld (DataType 4),
      • "DataType = 100 Schlüssel einer Data Class" oder
      • das Attribut "Type" des Selektions-Element-Felds 2 ist (Listen-Unter-Element).


Mehrfachauswahl erlaubt bei Datenklasse?

(AllowMultiselectForDataClass)

Multi-Daten-Edit-Element:

  • Im Schlüsselfeld mit Datenklasse inkl. Suchdialog:
  • Bei "Ja" können aus dem Suchdialog der Datenklasse mehrere Schlüssel übernommen werden.

    "Ja" nur erlaubt, wenn

    • "IsFromTo"=Nein
    • "DataType"=100 (Schlüssel einer Datenklasse)




Massendaten-Filterfeld?

(UseMassDataFilter)

Selektions-Element:

  • Bei Nicht-Von-Bis-Feldern ohne Datenklasse:
    • Bei "Ja" wird das Feld im UI als Filterfeld für die Erstellung von Massendatenfiltern verwendet.

      • "Ja" nur erlaubt, wenn

        • "IsFromTo"=Nein
        • "DataType"=100 (Schlüssel einer Datenklasse)

Validierung

Minimalwert

(MinValue)

Minimalwert für Validierung; bei nicht Pflicht-Feldern kann das Feld zusätzlich leer bleiben.

Datumswerte müssen im ISO-Format („yyyy-mm-dd“ bzw. „yyyy-mm-ddThh:mm:ss“) angegeben werden



Maximalwert

(MaxValue)

Maximalwert für Validierung;bei nicht Pflicht-Feldern kann das Feld zusätzlich leer bleiben.

Datumswerte müssen im ISO-Format („yyyy-mm-dd“ bzw. „yyyy-mm-ddThh:mm:ss“) angegeben werden



Liste zulässiger Werte

(ValueList)

Werteliste für Validierung (Auswertung nach Min/Max, falls definiert); bei nicht Pflicht-Feldern kann das Feld zusätzlich leer bleiben.

Datumswerte müssen im ISO-Format („yyyy-mm-dd“ bzw. „yyyy-mm-ddThh:mm:ss“) angegeben werden



Validierungs-Ausdruck

(ValidationExpression)

Validierungs-Ausdruck mit Boolean-Rückgabewert (bei nicht Pflicht-Feldern kann das Feld zusätzlich leer bleiben):

  • True = Validierung in Ordnung
  • False = Validierungsfehler

(Auswertung nach Min/Max und Werteliste, falls definiert)

Hinweis: Dieser Ausdruck ist nicht geeignet, um Abhängigkeiten zwischen mehreren Feldern zu validieren, weil es keinen mehrfachen Feldbezug gibt (wie beispielsweise beim Makro-Befehl „FehlerMelden“).



Validierungs-Ausdruck-Fehlermeldung

(ValidationExpressionMessage)

Fehlermeldung, falls ein Validierungsfehler auftritt



Lade-/Darstellungsverhalten

(LoadBehaviour)

Ab Version 9.0.3

Lade-/Darstellungsverhalten einer Datenreferenz:

  • 0 = Darstellung als Datenreferenz
  • 1 = Einstellbar, im Standard Darstellung als Datenreferenz
  • 2 = Einstellbar, im Standard Darstellung als Datenklasse
  • 3 = Darstellung als Datenklasse

Das Lade-/Darstellungsverhalten einer Datenreferenz kann angepasst werden, so dass (auch einstellbar) anstelle der Datenreferenz ein Datenklassenfeld mit Suchlupe angezeigt wird. Für große Datenbestände ist die Datenklassen-Variante deutlich performanter und erlaubt auch die dann die notwendige Suchfunktionalität.



Partner-Kennung Such-Element

(SearchPartPartnerId)

Lösungs-Kennung Such-Element

(SearchPartPackageId)

Name Such-Element

(SearchPartName)

Ab Version 9.0.3

Such-Element zur Eingabe von "Nicht-Datenklassen", insb. hierarchischen Daten wie z.B. Artikelgruppen und Lagerplätzen, in Selektions-Elementen und Daten-Edit-Elementen

Es wird automatisch Mehrfachauswahl unterstützt. Das Feld wird im UI automatisch schreibgeschützt, was nicht umgeschaltet werden kann. Es wird nicht der Wert im Feld dargestellt, sondern die Anzahl der gewählten Datensätze.

Der Feldwert enthält die ausgewählten Schlüssel als Semikolon-separierte Liste. Schlüsselsegmente werden durch Kommata getrennt. Texte werden in Anführungszeichen eingefasst, innenliegende Anführungszeichen werden verdoppelt.

Über das "BeforeSearch"-Makro des UI-Elementes können mit dem Makro-Befehl "FestlegenAdhocFilterSuche" Filter gesetzt werden.

Abgrenzung zur Suche per Datenklasse:

  • Dort kann keine hierarchische Suche durchgeführt werden.

Abgrenzung zur Verwendung eines Funktionsaufrufes am Feld mit dem Makrobefehl "DatensatzSuchen":

  • Dort würde die Semikolon-separierte Schlüsselliste im Feld sichtbar.

nur für für Datentyp 5 (String) mit NumberOfLines = 1 erlaubt (keine Memo-Darstellung mit Suchen Schaltfläche);

für Datenreferenzen, Datenklassen und Hilfetexte nicht erlaubt


Ereignisse (Makros)

Validierung nach Änderung

(ValidationAfterChange)

Makros zur Validierung.

Client-seitig wird das Ereignis bei Änderungen wie folgt aufgerufen:

  • in Eingabefeldern für Texte, Zahlen, etc. beim Fokusverlust
  • bei Kombinationsfeldern und Checkboxen sofort
  • bei programmgesteuerten Änderungen, beispielsweise nach dem Makro-Befehl „FestlegenFeldwert“

Im Daten-Edit-Element wird das Ereignis außerdem wie folgt behandelt (wenn diese in der Eigenschaft "Verwendung" auf die Verwendung von Datenstrukturen konfiguriert sind:

  • Das Ereignis tritt beim Erzeugen neuer bzw. beim Laden vorhandener Datensätze nicht auf.
  • Server-seitig wird das Ereignis vor dem Speichern ausgelöst. Bei Updates erfolgt dies nur, wenn sich der Feldwert geändert hat. Eine fehlgeschlagene Validierung führt dort zur Ablehnung der Operation. Die Ausführung erfolgt innerhalb der Transaktion.

In Selektionselemente wird das Ereignis außerdem wie folgt behandelt:

  • Da hier nur die Client-Seite vorhanden ist, werden bei "OK" alle Einzelfeld-Validierungen inkl. dieses Makros ausgeführt.
  • Existieren danach Fehler, oder wurde ein Makro mit den Makro-Befehlen "Fehler" oder "Abbruch" abgebrochen, wird die ganze Aktion abgebrochen.

Das Ereignis wird bei Daten-Edit-Elementen auf Client- und Server-Seite und bei Selektionselementen nur auf Client-Seite ausgelöst (sinnvollerweise im Makro die Funktion „IsRunningOnServer“ verwenden, um nur auf dem Server auszuführen und Roundtrips zu vermeiden)

  • Das Ereignis kann bei angehängten Feldern (siehe „DoAppendTo“) definiert werden, um zusätzliche Makros ausführen zu lassen. Die Ausführung der Makros erfolgt jeweils nach aufsteigenden Partner- und Lösungs-Ids mit Sage beginnend.
  • Falls ein Feld in einem "ValidationAfterChange"-Makro eines anderen Feldes referenziert wird, wird auch das ValidationAfterChange-Ereignis des anderen Feldes ausgelöst.