Back to Sagegmbh

Platzhalter für Metadaten

wiki-spaces-s1-pages-50888741.md

latest20.5 KB
Original Source

Platzhalter für Metadaten

By Andreas Langmaack (Unlicensed)

Apr 20, 2023

8 min

Add a reaction

Es sind folgende Platzhalter für Metadaten definiert. Bei Verwendung müssen die Platzhalter in der Form "$[...]" verwendet werden, wobei die Punkte durch den Platzhalter-Namen ersetzt werden müssen):

Platzhalter für

  • SQL-Strings

  • Default-Werte

  • Validierungsausdrücke

  • Makro-Parameter

Ergänzungen:

  • "Eigenwaehrung" auch für Titel-Attribut bei Trendvergleich-Elementen

  • "Call(...)" nicht für Datenklassen

|

Name

|

Inhalt

| | --- | --- | |

CheckLicence(lizenzkuerzelausdruck)

(Ab Version 9.0.3)

|

Prüfen der übergebenen Lizenzeigenschaft

Parameter:

  • Entweder ein einziges Lizenzkürzel für die jeweilige Lizenzeigenschaft oder ein mit "AND", "OR" oder "NOT" verknüpfter Ausdruck von Lizenzkürzeln.

Rückgabe:

  • Für Makros, Validierungsausdrücke und Default-Werte werden die Konstanten "True" bzw. "False" zurückgegeben, für SQL-Strings die Werte -1 bzw. 0.

Beispiele (Makros):

$[CheckLicence(Anbu)]

$[CheckLicence(Not LagerErweitert)]

$[CheckLicence(xRMBasic OR xRMProfessional OR xRMEnterprise)]

Beispiele (SQL):

$[CheckLicence('Projekt')] <> 0

$[CheckLicence('NichtSkontierfähigeArtikel')] <> 0

| |

Country

|

Land des Mandanten:

  • 1 = Deutschland

  • 2 = Schweiz

  • 4 = Österreich

  • 32 = International

| |

Database(kuerzel)

|

Tabellen-Präfix der durch „kuerzel“ referenzierten Datenbank „kuerzel“ (z.B. „CRM“ und „HR“)

Hinweise:

  • Identity-Spalten („Autowert“-Spalten) in Tabellen verknüpfter Datenbanken werden nicht unterstützt. Die Nutzung einer TAN (auf Basis der Tabelle "KHKTan") ist möglich. Hierbei müssen gleichnamige Tabellen in der Sage 100 Datenbank und der verknüpften Datenbank vermieden werden. Andernfalls nutzen beide Datenbanken den selben TAN n, so dass in den Ziel-Tabellen der Datenbankbanken TAN scheinbar übersprungen werden.

  • Transaktionen werden bei schreibenden Zugriffen auf verknüpfte Datenbanken vom SQL Server nicht unterstützt. Daher erfolgen schreibende Zugriffe auf Tabellen aus verknüpften Datenbanken ohne Transaktion.

| |

Mandant

|

Mandantennummer der OL-Datenbank

| |

ApplicationName

|

Name der Applikation über die das Element aufgerufen wurde, mögliche Werte sind "Rewe" und "Abf"

| |

CurrentDate

|

Server-Systemdatum

  • Bei Verwendung in SQL-Strings wird folgender Ausdruck geliefert (bei Systemdatum 21.05.2014): CONVERT(DATETIME,'21.05.2014',104)

  • Bei Verwendung in Ausdrücken (z.B. für Makro-Funktion „FestlegenFeldWert“ oder Eigenschaft „DefaultValue“) wird ein Datumstext im ISO-Format geliefert (YYYY-MM-DD), eingefasst in „#“.

| |

DatenreferenceFilter

(Ab Version 9.0.4)

|

Nur für Datenreferenzen:

  • Definiert die Stelle innerhalb des Attributes "SqlQuery" einer Datenreferenz (z.B. innerhalb einer Unterabfrage), an welcher der Filterwert eingefügt werden soll (Attribut "DataReferenceFilter" eines Datensatzfeldes).

| |

Eigenwaehrung

|

Eigenwährung des Mandanten (dreistelliges Kürzel)

| |

Geschaeftsjahr

|

Aktuelles Geschäftsjahr, berechnet auf Basis des aktuellen Server-Systemdatums

  • Für noch nicht angelegte Geschäftsjahre erfolgt die Berechnung analog zur Rewe-Planung auf der Annahme, dass es sich um volle Geschäftsjahre handelt.

Tipp: In einem Makro-Ausdruck kann das aktuell gewählte Geschäftsjahr, das beim Start der Anwendung definiert wurde, mit der vordefinierten lokalen Makro-Variablen "[_AppYear]" adressiert werden.

| |

GeschaeftsjahrClient (Ab Version 9.0.5)

|

Aktuell gewähltes Geschäftsjahr, das beim Start der Anwendung definiert wurde (Nur zulässig

in Primärschlüsselfelder von Feldern einer Datenwertliste).

| |

Periode

|

aktuelle Periode (z.B. für Filter „letzte 3 Perioden“) berechnet auf Basis des aktuellen Server-Systemdatums

  • Für noch nicht angelegte Geschäftsjahre erfolgt die Berechnung analog zur Rewe-Planung auf der Annahme, dass es sich um volle Geschäftsjahre handelt und diese die gleiche Periodenlänge wie das letzte Geschäftsjahr haben.

| |

PeriodeStart

|

erste Periode des Geschäftsjahres berechnet auf Basis des aktuellen Server-Systemdatums

  • Für noch nicht angelegte Geschäftsjahre siehe „Periode“

| |

PeriodeEnde

|

letzte Periode des Geschäftsjahres berechnet auf Basis des aktuellen Server-Systemdatums

  • Für noch nicht angelegte Geschäftsjahre siehe „Periode“

| |

PeriodeStartOperativ

|

erste operative Periode des Geschäftsjahres berechnet auf Basis des aktuellen Server-Systemdatums (bei Rumpfgeschäftsjahren ist dies nicht di erste Periode)

  • Für noch nicht angelegte Geschäftsjahre siehe „Periode“

| |

PeriodeEndeOperativ

|

letzte Periode des Geschäftsjahres berechnet auf Basis des aktuellen Server-Systemdatums

  • Für noch nicht angelegte Geschäftsjahre siehe „Periode“

| |

PeriodeStartVorjahr

|

erste Periode des vorherigen Geschäftsjahres berechnet auf Basis des aktuellen Server-Systemdatums

  • Für nicht vorhandene Vorjahre wird 0 zurückgegeben

| |

PeriodeEndeVorjahr

|

letzte Periode des vorherigen Geschäftsjahres berechnet auf Basis des aktuellen Server-Systemdatums

  • Für nicht vorhandene Vorjahre wird 0 zurückgegeben

| |

PeriodeStartOperativVorjahr

|

erste operative Periode des vorherigen Geschäftsjahres berechnet auf Basis des aktuellen Server-Systemdatums Systemdatums (bei Rumpfgeschäftsjahren ist dies nicht di erste Periode)

  • Für nicht vorhandene Vorjahre wird 0 zurückgegeben

| |

PeriodeEndeOperativVorjahr

|

letzte operative Periode des vorherigen Geschäftsjahres berechnet auf Basis des aktuellen Server-Systemdatums

  • Für nicht vorhandene Vorjahre wird 0 zurückgegeben

| |

UserName

|

Anwendername

| |

GetString(index)
bzw.
GetString(name, index)
bzw.
GetString(partnerid, packageid, name, index)

|

String-Ressource auf Basis der Parameter ermitteln. Als Default für „name“ wird „Common“ verwendet, für Partner- und Lösungs-ID die Lösung, aus der der Aufruf erfolgt. Die Funktion wird für die Übersetzbarkeit fester Strings – wie z.B. „Grundartikel“ in der Warenwirtschaft – verwendet.

Der String wird in Hochkommata eingeschlossen. Hochkommata innerhalb des Strings werden verdoppelt.

| |

GetConstant(name)
bzw.
GetConstant(partnerid, packageid, name)

|

Numerische Konstante auf Basis der Parameter ermitteln. Als Default für Partner- und Lösungs-ID wird die Lösung, aus der der Aufruf erfolgt, verwendet.

| |

Call(assemblyname, classname, params…)

|

Aufruf der Funktion „Entry“ der Klasse „classname“ in der Assembly „assembly“ mit maximal 4 Parametern (Rückgabewert ist vom Typ String). Zusätzlich wird ein ParameterBag übergeben, der bei mehrfacher Verwendung von „Call“ Konfigurationswerte zwischenspeichern kann, wobei die Aufrufreihenfolge nicht garantiert wird.

Als Parameter können übergeben werden:

  • Andere Platzhalter wie z.B. „Parameter“

  • konstante Integer-Werte

konstante String-Werte (in einfache Hochkommata ( ‘ ) eingeschlossen und enthaltene einfache Hochkommata durch Doppel-Hochkomma maskiert)

| |

GetMandantProperty(index)
bzw.
GetMandantProperty(index, default)
bzw.
GetMandantProperty(name)
bzw.
GetMandantProperty(name, default)
bzw.
GetMandantProperty(partnerid, packageid, name)
bzw.
GetMandantProperty(partnerid, packageid, name, default)

|

Mandanten-Eigenschaft ermitteln

Je nach Inhalt des Feldes "Typ" in der Tabelle "KHKMandanten" werden automatisch folgende Maskierungen mit eingefügt:

  • 1 = Date:
    Maskierung gemäß SQL-Datumskonvention

  • 2 = Int, 3 = Lng, 4 = Sng, 5 = Dbl, 6 = Cur:
    keine Maskierung für nummerische Werte

  • 0 = Vnt, 7 = Sperrwort, 8 = Feldformat:
    String-Maskierung mit String-Begrenzungszeichen (enthaltene String-Begrenzungszeichen werden verdoppelt)

Parameter:

  • "index":
    nummerischer Index der Mandanten-Eigenschaft

  • "name":
    direkte Angabe für einen „GetConstant“-Aufruf, wodurch direkt auf die jeweilige benannte Konstante zugegriffen wird und die zugehörige Mandanten-Eigenschaft ermittelt wird

  • "partnerid", "packageid" und "name":
    direkte Angabe für einen „GetConstant“ Aufruf inkl. Lösung

  • "default":
    Dient zur Angabe eines Standardwertes. Dieser darf die Zeichenfolge „)]“ nicht enthalten.

Beispiel für Makro-Ausdruck:

$[GetMandantProperty(125, "Defaultwert")]

oder für Leerstring als Default-Wert:

$[GetMandantProperty(125, "")]

Beispiel für SQL:

$[GetMandantProperty(125, 'Defaultwert')]

oder für Leerstring als Default-Wert:

$[GetMandantProperty(125, '')]

|

Platzhalter für SQL-Strings

Ergänzungen:

  • "ParentKeyField(n)" ist nur in Child-Elementen sinnvoll und auch als Parameter für Drilldown-Funktionsaufrufe verfügbar

  • "PartGuid" ist auch bei Parametern für VBA-Funktionsaufrufe, Drilldown-Funktionsaufrufe (nicht für Inplace) und die Eigenschaft „Aktualisierungsbenachrichtigungen“ in List-Elementen verfügbar

  • "Parameter" ist auch bei Parametern für VBA-Funktionsaufrufe, Drilldown-Funktionsaufrufe, für Drag-Funktionsaufrufe, für die Where-Clause von Datenreferenzen, den Titel von Detail-Elementen in Master-Detail-Elementen und der Eigenschaft "Parameter für Anpassungen" bei den Detail-Elementen des Master-Detail-Elements verfügbar

|

Name

|

Inhalt

| | --- | --- | |

UserDefinedFieldsList(userdefinedfields)

|

Feldliste der benutzerdefinierten Felder „userdefinedfields“ einer Tabelle (z.B. „Artikel“) zur Verwendung in Datenquellen, die verschachtelte Abfragen enthalten (Angabe „userdefinedfields“ ohne Anführungsstriche)

| |

InnerClause

|

Platzhalter für die Filter-Kriterien einer inneren SQL-Abfrage. Dieser wird aus den in der Datenquelle mit „UseFilterInInnerClause“ markierten Feldern gebildet, wenn diese gefiltert werden. Er ist entweder leer (kein Filter für innere SQL-Abfrage gesetzt) oder beginnt grundsätzlich mit einem „AND“, auf das die einzelnen Filter (ebenfalls mit „AND“ verknüpft) folgen.

Anmerkungen:

  • Der Platzhalter kann bei mehreren inneren Abfragen ggf. auch mehrfach genutzt werden. Allerdings ist hier die Performance zu prüfen.

Falls die innere Where-Clause nur die Filter enthalten soll, muss sie mit einem Dummy-True beginne, damit die AND-Syntax keinen Fehler verursacht.

| |

IfParameterExists(name, “sqltrue“)
bzw.
IfParameterExists(name, “sqltrue“, "sqlfalse")

|

Die Funktion dient dem Zusammenbau von Where-Clauses bei optionalen Selektions-Parametern.

  • Parameter 1: Name

  • Parameter 2: SqlTrue

  • Parameter 3: SqlFalse (optional, Default="")

Die SQL-Ausdrücke müssen in Anführungszeichen ("") eingeschlossen werden, die bei der Ersetzung entfernt werden. Evtl. vorhandene Anführungszeichen im SQL-Ausdruck müssen verdoppelt werden.

| |

AppendAndParameterFromTo(name, sqlfieldname)

|

Die Funktion dient dem Zusammenbau von Where-Clauses für Von-Bis-Parameter, inkl. der Behandlung von Mehrfachselektion (siehe Metadaten-Attribute "IsFromTo" und "AllowMultiselect" der Datenstruktur).

  • Parameter 1: name
    (Name des Metadaten-Feldes)

  • Parameter 2: sqlfieldname
    (Name des korrespondierenden SQL-Feldes)

Der Platzhalter wird in Abhängigkeit der Inhalte der Parameter

  • name + "Von" für den Von-Wert

  • name + "Bis" für den Bis-Wert

  • name (ohne Ergänzung) bei Mehrfachselektion

durch einen entsprechenden SQL-Ausdruck ersetzt:

  • Ist weder "Von" noch "Bis" noch eine Mehrfachselektion definiert, ist dies ein leerer String.

  • Ist "Von" oder "Bis" definiert, ist dies eine entsprechende Größer-Gleich-/Kleiner-Gleich-Abfrage mit vorangestelltem „AND“.

  • Sind "Von" und "Bis" definiert, ist dies eine entsprechende "BETWEEN"-Abfrage mit vorangestelltem "AND".

  • Sind weder "Von" noch "Bis", aber eine Mehrfachselektion definiert, ist dies eine entsprechende "IN"-Abfrage mit vorangestelltem "AND".
    (Bei mehreren Schlüssel-Segmenten kann dieser Platzhalter nicht verwendet werden.)

| |

ParameterValueList(name)

|

Enthält ein Feld eine Werteliste, wie sie in der Oberfläche und in Makros verwendet wird (Semikolon-separierte Liste von Werten; Texte müssen in Anführungszeichen eingefasst werden; innenliegende Anführungszeichen sind verdoppelt), kann sie mit diesem Platzhalter in eine SQL-konforme Werteliste umgewandelt werden, z.B. zur Verwendung im IN-Operator.

Szenarien:

  • An ein Master-Detail-Element von außen übergebener benannter Parameter, der an die Datenquellen der enthaltenen Elemente weitergereicht wird.

  • In einem Ausdruck, wie er z.B. im Metadaten-Attribut "DataReferenceFilter" verwendet werden kann. Siehe hierzu Kapitel "Metadaten Abfragesprache".

Hinweis: Wertelisten, die in einer Selektion mit Mehrfachauswahl entstehen können (Metadaten-Attribute "IsFromTo" und "AllowMultiselect"), müssen mittels Platzhalter "AppendAndParameterFromTo" ausgewertet werden.

Achtung: Wertelisten, die im Frontend entstehen (Client-seitig). dürfen wegen der Gefahr von SQL-Injection nicht ungeprüft in SQL verwendet werden. Es ist immer eine typsichere Zerlegung in Einzelwerte und ein neues, maskiertes Erzeugen der Werteliste notwendig. Das ist mit Verwendung dieses Platzhalters sichergestellt.

| |

ParentKeyField(n)

|

An ein Child-Part übergebener Inhalt von Key-Feld <n>
(n darf aktuell nur zwischen 1 und 9 liegen)

| |

ParentFieldValue(name)

|

nur für Datensätze: ruft beim Lesen eines Child-Records den Inhalt des Parent-Feldes „name“ (Angabe ohne Anführungszeichen) ab.

Anwendungsbeispiel: Beim Lesen mit Left Join können Felder den Wert NULL haben, die in Unterabfragen aber verwendet werden. Falls die Felder auch im Hauptsatz existieren, können sie mit diesem Platzhalter ermittelt werden
(siehe Element "recArtikelstammArtikelpreise.Sage.Wawi", Feld "StatusStaffelpreise").

| |

PartGuid

|

GUID der Part-Instanz (z.B. für Konfigurationsdialoge der „Trend…“-Parts)

| |

Parameter(name)

|

Ein von außen übergebener benannter Parameter.

Beispielsweise:

  • Beim Makro-Befehl "AuskunftÖffnen" aus Parameter 2.

  • Beim Anwenden eines Datenfilters aus den Parametern der Bedingungen.

Hinweis:

  • Leere Strings werden als NULL im SQL ersetzt. Deshalb kann es angeraten sein, die SQL-Funktion "ISNULL()" zu verwenden, um den Unterschied zwischen Leerstring und NULL zu beseitigen.
    Beispiel: ISNULL(KHKAdressen.LieferPLZ, '') = ISNULL($[Parameter(Plz)], '')

|

Platzhalter für die WHERE-Bedingung bei Datenklassen-Lokatoren mit Fremdtabelle

|

Name

|

Inhalt

| | --- | --- |

|

Name

|

Inhalt

| | --- | --- | |

SearchValue

|

Dieser Platzhalter wird in der WHERE-Bedingung durch den Wert ersetzt, nach dem gesucht wird.

Der Wert, der eingesetzt wird, wird automatisch so formatiert, dass er in einer WHERE-Bedingung funktioniert.

  • Handelt es sich um ein String-Feld, wird dem Wert ein "%" angefügt, und der Wert wird in Apostrophe eingefasst und maskiert. Der Platzhalter muss zusammen mit "LIKE" verwendet werden, wodurch sich eine "Beginnt mit"-Abfrage ergibt.

  • Handelt es sich um ein numerisches Feld oder ein Datumsfeld, wird der Wert entsprechend formatiert. Der Platzhalter muss zusammen mit "=", "<>", "<", "<=", ">" oder ">=" verwendet werden.

|

Platzhalter bei Parametern für VBA-Funktionsaufrufe, Drilldown-Funktionsaufrufe (nur Inplace) sowie Drag&Drop-Funktionsaufrufe verfügbar

|

Name

|

Inhalt

| | --- | --- | |

KeyField(n)

|

Inhalt von Key-Feld <n>
(n darf aktuell nur zwischen 1 und 9 liegen);

im Normalfall ergibt dies direkt den Wert, bei Multiselect wird als Inhalt eine Semikolon-separierte Liste verwendet

Strings werden in Anführungszeichen eingeschlossen und darin enthaltene Anführungszeichen durch zwei Anführungszeichen maskiert

| |

FieldValue(Name)

|

nur für Data-Edit- und Multi-Data-Edit-Elemente: Inhalt des Feldes „name“ (Angabe des Parameters ohne Anführungszeichen), im Normalfall ergibt dies direkt den Wert, bei Multiselect wird als Inhalt eine Semikolon-separierte Liste verwendet

Strings werden in Anführungszeichen eingeschlossen und darin enthaltene Anführungszeichen durch zwei Anführungszeichen maskiert

| |

KeyFieldMaskedForList(n)

|

Inhalt von Key-Feld <n>
(n darf aktuell nur zwischen 1 und 9 liegen)

Der Platzhalter dient zum Zusammenstellen von Parameter-Listen, die als Funktionsparameter an Access-Funktionen übergeben werden (wie z.B. "Artikelnummer:=" & $[KeyFieldMaskedForList (1)] & ";AuspraegungID:=" & $[KeyFieldMaskedForList (2)] & ";Dispoauskunft:=-1"). String-Werte werden in Anführungszeichen gesetzt, darin enthaltene Anführungszeichen durch zwei Anführungszeichen maskiert. Alle anderen Werte sind identisch mit den Werten aus Platzhalter "KeyField".

| |

FieldValueMaskedForList(n)

|

nur für Data-Edit- und Multi-Data-Edit-Elemente: Inhalt des Feldes „name“ (Angabe des Parameters ohne Anführungszeichen)

Der Platzhalter dient zum Zusammenstellen von Parameter-Listen, die als Funktionsparameter an Access-Funktionen übergeben werden (wie z.B. "Artikelnummer:=" & $[FieldValueMaskedForList (Artikelnummer)] & ";AuspraegungID:=" & $[FieldValueMaskedForList (AuspraegungID)] & ";Dispoauskunft:=-1"). String-Werte werden in Anführungszeichen gesetzt, darin enthaltene Anführungszeichen durch zwei Anführungszeichen maskiert. Alle anderen Werte sind identisch mit den Werten aus Platzhalter "FieldValue".

| |

SenderField(n)

|

nur bei Drop-Funktionen: Über „SenderField(n)“ stehen die Funktions-Parameter der aufrufenden Drag-Funktion zur Verfügung

(n darf zwischen 1 und 6 liegen)

|

Platzhalter für Diagramm-Element-Kontextmenüs

|

Name

|

Inhalt

| | --- | --- | |

ChartSeriesNumber

|

Übergabe der Kurvennummer einer aufgerufenen Funktion des Kontextmenüs

|

Platzhalter für die Eigenschaft "SQL-Bedingung berechneter Filter" (Datenquellenfeld)

|

Name

|

Inhalt

| | --- | --- | |

KeyValue

|

Filter-Wert

|

Platzhalter für die Eigenschaft „SQL-Ampelermittlung“ (Datenquellenfeld)

|

Name

|

Inhalt

| | --- | --- | |

TrafficLightParameter1

|

Ampel-Parameter 1

| |

TrafficLightParameter2

|

Ampel-Parameter 2

|

Platzhalter für Titel-Attribute

Ergänzungen:

  • "ParameterValue" steht nur für Listen-Elemente zur Verfügung

|

Name

|

Inhalt

| | --- | --- | |

RecordCount

|

Anzahl der Datensätze in einem Listen-Element:

  • soweit alle Datensätze geladen sind: echte Anzahl

  • soweit die Seitengröße überschritten wird: „>n“

soweit die Daten noch nicht geladen sind: „…“

| |

ParameterValue(n)

|

Referenziert im Titel eines Link-Element-Links auf das Link-Datenfeld mit "Type"=n

|

Collapse action bar

View all comments

Open Details Panel

Create page

Open Rovo Chat

Comments

Add a reaction

Anonymous

Mar 5

Beim Import eines Metadatenpakets wird bei GetString() Metadaten-Platzhaltern in der 4-Paramter Variante die referenzierte Sting-Ressource der Lösung zu einer 2-Parameter Variante geändert.

Das hat Auswirkungen wenn z.B. ein Makrobaustein mit diesem Platzhalter in dieser Lösung aus einer anderen Lösung aufgerufen wird. Der String wird dann in der aufrufenden Lösung gesucht und nicht gefunden.

  • Lösung „A“ erstellen

  • String-Resource “TestStrRes”, 0, “TEST” in Lösung “A” anlegen

  • Makro-Baustein “mbbTest” in Lösung „A“ erstellen

  • FestlegenLokaleVar, _TestVar, $[GetString(<PartnerID>, A, TestStrRes, 0)]

  • Lösung “B” erstellen

  • Z.B. Kontextmenüeintrag mit Makro erstellen und dort mbbTest.<PartnerID>.A aufrufen / einbinden

Die Lösung mit dem Kontextmenüeintrag bzw Auskünfte mit diesem Konstextmenüeintrag können in der Anwendung nicht geladen werden und produzieren einen Fehler.

Workarounds:

  • String redundant in allen Lösungen anlegen

  • Makrobaustein redundant anlegen

  • Lösungen „mergen“

  • Nach jedem Import des Metadatenpakets (z.B. zwischen Entwicklungs und Live System) die PartnerID und LösungsID erneut hinzufügen

Alles keine schönen Optionen. Ich nutze derzeit die letzte Option.

Meiner Meinung nach ein unnötiger Automatismus. Der Entwickler hat selber die Option und kann entscheiden ob er relativ (2 Parameter) oder absolut (4 Parameter) für GetString() nutzt. Das sollte durch Automatismen nicht überschrieben werden.

Im exportierten Metadatenpaket ist die Referenz übrigens noch korrekt. Scheint erst beim Import zu erfolgen.

Reply

Add a comment