Query - Specials

In diesem Kapitel wird auf Spezialthemen und häufig verwendete Funktionen eingegangen. Eine Liste aller Funktionen etc. können Sie der Referenz entnehmen.

Konvertieren von String zu Datum

Bei der Verwendung von Datumswerten ist darauf zu achten, die entsprechenden Columns explizit in ein Datum zu konvertieren. Dies ist insbesondere beim Vergleichen mit EMPTY_DATE und dem Sortieren nach Datum wichtig. Nur "echte" Datumswerte funktionieren in diesen Fällen korrekt.
Da in fast allen Fällen die Datumswerte als String "angeliefert" werden, lassen sie sich mit der Funktion strToDate einfach in echte Datumswerte konvertieren.
Beispiel: Innerhalb einer Adressliste sind im Attribut Addr.Free4 Datumswerte erfasst. Damit in der Query-Abfrage nach diesem Datum sortiert werden kann, ist eine Konvertierung vorzunehmen.
Query
Query
Main=Addr
MaxRows=All
Filter=strToDate(Addr.Free4) <> EMPTY_DATE
Columns=Addr.Number,Addr.FullName
Column=KontaktDatum,strToDate(Addr.Free4)
OrderBy=-KontaktDatum
Resultat
Addr.Number Addr.FullName KontaktDatum
1000
Werkzeug AG
11.10.2014
1047
Louis Dubois SA
12.06.2012
1032
TecTrade AG
28.11.2004
1045
Carlo Santini SA
25.09.2001
1041
Achermann & Cie. AG
06.06.1998
Wichtig
Wichtig
Vermeiden Sie aus folgendem Grund unbedingt implizite "ToDate"-Konversionen.
Microsoft SQL-Server konvertiert (bei Bedarf) folgendermassen implizit (und für unsere Zwecke falsch:
  • "01.02.2015" -->> 02.01.2015
  • "" (Leerstring) -->> 01.01.1900
Beachten Sie deshalb folgende drei Punkte:
  • Verwenden Sie wenn immer möglich, Date-Literale anstelle von String-Literalen.
  • Falls eine Konversion notwendig ist, verwenden Sie die strToDate-Funktion.
  • Führen Sie eine Prüfung auf leere Datumswerte mit Hilfe von EMPTY-DATE aus.

Kontextabhängige Redefinitionen auslesen (pro Sprache)

BO-Attr-Redefinitionen können für alle Beschriftungssprachen erfasst werden. Sollen die Bezeichnung/Kurzbezeichnung von BO-Attr-Redefinitionen ausgelesen werden, kann die gewünschte Sprache "byName" über die Konstanten-View angesprochen werden. (Siehe auch: Zugriff auf name und shortName)
Beispiel: Das Attribut SalDoc.Free7 wurde für die Dokumentart AB-X (Kontext) redefiniert. Bei der Redefinition wurde eine eigene Code-Tabelle hinterlegt. Ziel ist es nun, die Bezeichnung (name) der Redefinition auszulesen. Gewünschte Sprachen: Deutsch und Englisch.
Query
Query
Main=SalDoc
MaxRows=All
Filter=SalDoc.InternalNo = 11568
Columns=SalDoc.InternalNo,SalDoc.Free7
Column=StornoDE,name(SalDoc.Free7, ["2,X"], NativeLang.German)
Column=StornoEN,name(SalDoc.Free7, ["2,X"], NativeLang.English)
Da die Redefinition nur für eine bestimmte Dokumentart vorgenommen wurde, muss bei der Query-Abfrage der Kontext mitgegeben werden. Im obigen Beispiel steht der Kontext in eckigen Klammern, weil er aus zwei Segmenten besteht.
Für das Abfragen von Bezeichnung (name) und Kurzbezeichnung (shortName) können drei Argumente angegeben werden:
  • Attribut (zwingend)
  • Kontext (optional)
  • Sprache (optional)

Auslesen von Werten aus freien Hilfstabellen (FreeTableItems)

Ist einem BO-Attribut über die BO-Redefinition eine freie Hilfstabelle zugeordnet, kann sehr einfach auf die Attribute dieses Tabellen-Eintrags zugegriffen werden.
Beispiel: Dem Attribut AddrPoolItem.Free4 ist im Kontext von Pool Nr. 947 eine freie Hilfstabelle zugewiesen.
Query
Query
Main=AddrPoolItem
Columns=AddrPoolItem.BoId, AddrPoolItem.Free4
Column=FreeTableNo,FreeTableItem.TableNo
Column=,FreeTableItem.ShortName
Related=FreeTableItem,FreeTableItem,,,FreeTableItem.Value=AddrPoolItem.Free4 and FreeTableItem.TableNo= freeTableNo(AddrPoolItem.Free4, AddrPoolItem.AddrPoolNo)
Filter=AddrPoolItem.AddrPoolNo=947 and AddrPoolItem.Free4<>''
MaxRows=50
Resultat
AddrPoolItem.BoId AddrPoolItem.Free4 FreeTableNo FreeTableItem.ShortName
947,5057,3
XS
23
XSmall
947,180027,1
L
23
Large
947,180027,3
XL
23
XLarge

Auslesen von freien Attributen der Objektverwaltung

Beispiel: In den Studio-Einstellungen der Objektverwaltung (BC 93502) ist das freie Attribut ObjItem.FreeA9 als (Typ) Datum definiert.
Wie für alle Biz-Views gilt auch hier: Es sind die Definitionen gem. "NoContext" relevant. Das bedeutet, dass als DataTypeCd "A" zurückgeliefert wird. Die Information, dass die Definition vom Typ "D" ist, wird in Biz-Views nicht abgebildet! Die Auswertung gemäss Datentyp muss deshalb innerhalb der Query-Abfrage gelöst werden!
Query
Query
Main=ObjItem
Columns=ObiItem.BoId
Column=FreeA9,ObjItem.FreeA9
Column=FreeA9asDate,intToDate(ObjItem.FreeA9)
MaxRows=10
Filter=ObjItem.FreeA9<>''
Hinweis
Hinweis
In den freien Attributen der Objektverwaltung sind Datums-Informationen als Integer gespeichert!
Grund: So ist direkt eine korrekte Sortierung möglich.
Konsequenz: Bei Bedarf ist eine Konvertierung (Cast) mittels intToDate notwendig.
Resultat
ObjItem.BoId ObjItem.FreeA9 FreeA9asDate
7
729871
12.04.1998
39
729870
11.04.1998
41
729860
01.04.1998
53
729433
29.01.1997
...
...
...