Query Main=Addr MaxRows=5 Filter=Addr.Number > 1069 Columns=Addr.Number,Addr.LastName,Addr.CountrySc Column=Land,Country.Name
Addr.Number | Addr.LastName | Addr.CountrySc | Land |
2010
|
Hintermoser
|
AT
|
Österreich
|
2011
|
Langhammer
|
CH
|
Schweiz
|
Query Main=Addr MaxRows=10 Filter=Addr.Number>1000 Columns=Addr.Number, Addr.LastName Column=,Contact.LastName OrderBy=Addr.Number
Addr.Number | Addr.LastName | Contact.LastName |
1001
|
Werkzeug AG
|
Meier
|
1002
|
Tool AG
|
|
1003
|
Fein-Werkzeuge AG
|
|
1004
|
Trichter
|
|
1005
|
MAAP Maschinen und Apparate
|
Heer
|
1006
|
Andres AG - Autoservice
|
Sieber
|
1007
|
Hilti Vertriebs AG
|
Maurer
|
1008
|
Heldner
|
|
1009
|
Gisler
|
|
1010
|
Gmür
|
Filter=Addr.Number>1000 and Addr.MainContactNo>0
Query Main=Addr MaxRows=10 Filter=Addr.Number>1000 and exists(Contact)=1 Columns=Addr.Number, Addr.LastName Column=,Contact.LastName OrderBy=Addr.Number
Addr.Number | Addr.LastName | Contact.LastName |
1001
|
Werkzeug AG
|
Meier
|
1005
|
MAAP Maschinen und Apparate
|
Heer
|
1006
|
Andres AG - Autoservice
|
Sieber
|
1007
|
Hilti Vertriebs AG
|
Maurer
|
1016
|
Schreinerei Hügli
|
Hügli
|
1017
|
Distributa AG
|
Bachmann
|
1018
|
BEWE AG
|
Meyer
|
1020
|
Bosch Elektro GmbH
|
Menzi
|
1024
|
Distributa Konzern AG
|
Fankhauser
|
1028
|
Klarsicht AG
|
Meiershofer
|
Related=<Alias>,<Source>,<Count>,<OrderArray>,<FilterExpression>
![]() |
AchtungVersuchen Sie, wenn immer möglich,
auf indexierte Attribute zu referenzieren. Ansonsten resultieren u.U. sehr
lange Laufzeiten für Query-Abfragen.
Relation auf eine Adresse über
ein indexiertes Attribut:
Related=RelAddr,Addr,One,,RelAddr.LastName =
Addr.LastName
Relation auf eine Adresse über ein nicht
indexiertes Attribut: Related=RelAddr,Addr,One,,RelAddr.Free4 =
Addr.LastName
Die zweite Relation führt bei einer Query-Abfrage zu
einer sehr langen Laufzeit.
|
![]() |
WichtigDie Verwendung von Relationen hat einen direkten
Einfluss auf das Laufzeitverhalten von Query-Abfragen. Implementieren Sie
deshalb nicht zu viele Relationen innerhalb einer Query-Abfrage.
Bei
"normalen" Query-Abfragen sollten Sie sich an einen "Richtwert" von
maximal fünf Relationen halten. Für "anspruchsvolle" Query-Abfragen (wie
z.B. MIS) sollten Sie sich an einen "Richtwert" von maximal zwölf
Relationen halten.
|
Argument | Beispiel | ||
<Alias> Bezeichner der
Relation.
<Source> Gewünschte
View (auf die referenziert wird)
|
KorrespondenzPerson Contact |
||
<Count> Anzahl
Elemente.
Mögliche Werte: One, ToOne, First, Last, All, 0
- n
|
All Default: (wenn leer) One
|
||
<OrderArray> Gewünschte
Sortierung.
|
[+Contact.LastName,-Contact.Number]
|
||
<FilterExpression> Filter
für die Relation.
Über den Filter wird die Verbindung vom
Main-BO auf das referenzierte BO hergestellt.
|
Contact.AddrNo=Addr.Number and Contact.IsMainContact=1 |
Query Main=Addr MaxRows=10 Filter=Addr.Number>1000 and KorrespondenzPerson.IsMainContact=1 Columns=Addr.Number, Addr.LastName Related=KorrespondenzPerson,Contact,All,,KorrespondenzPerson.AddrNo=Addr.Number and KorrespondenzPerson.IsMainContact=1 Column=,KorrespondenzPerson.LastName
Addr.Number | Addr.LastName | KorrespondenzPerson.LastName |
1001
|
Werkzeug AG
|
Meier
|
1005
|
MAAP Maschinen und Apparate
|
Heer
|
1006
|
Andres AG - Autoservice
|
Sieber
|
1007
|
Hilti Vertriebs AG
|
Maurer
|
1016
|
Schreinerei Hügli
|
Hügli
|
1017
|
Distributa AG
|
Bachmann
|
1018
|
BEWE AG
|
Meyer
|
1020
|
Bosch Elektro GmbH
|
Menzi
|
1024
|
Distributa Konzern AG
|
Fankhauser
|
1028
|
Klarsicht AG
|
Meiershofer
|
Query Main=SalDoc MaxRows=All Columns=SalDoc.InternalNo,SalDoc.Free7,AbladeOrt.FullName,AbladeOrt.Zip,AbladeOrt.City Filter=SalDoc.InternalNo=12342 Related=AbladeOrt,Addr,,,AbladeOrt.Number = SalDoc.Free7
SalDoc.InternalNo | SalDoc.Free7 | Abladeort.FullName | Abladeort.Zip | Abladeort.City |
12342
|
1040
|
Cantina Zocchi
|
6716
|
Acquarossa
|
![]() |
WichtigWenn mehrmals mit
demselben BO gearbeitet wird, empfehlen wir dringend, einen Alias zu
verwenden. Im obigen Beispiel ist "Abladeort" der Alias für die Adresse
(Addr) welche sich hinter dem freien Attribut (SalDoc.Free7) "versteckt".
Wenn Sie nun zusätzlich auch noch mit der Kundenadresse arbeiten möchten,
beugt die Verwendung eines Alias Verwechslungen vor.
|
Query Main=AddrPoolItem Columns=AddrPoolItem.AddrNo, AddrPoolItem.ContactNo,MyContact.PrivateAddrNo,PrivateAddr.FirstName,MyContact.LastName MaxRows=10 Filter=AddrPoolItem.AddrPoolNo=10 Related=MyContact,Contact,1,,MyContact.Number=AddrPoolItem.ContactNo and MyContact.AddrNo = AddrPoolItem.AddrNo Related=PrivateAddr,Addr,1,,PrivateAddr.Number=MyContact.PrivateAddrNo
AddrPoolItem.AddrNo | AddrPoolItem.ContactNo | MyContact.PrivateAddrNo | PrivateAddr.FirstName | PrivateAddr.LastName |
1070
|
2
|
100700
|
Hans-Heinz
|
Huber
|
RelatedColumn=<Alias>,<Expression>
![]() |
HinweisVia RelatedColumn definierte Spalten werden nicht
automatisch in das Query-Resultat übernommen.
Falls das gewünscht
ist, müssen diese Spalten ganz normal mittels Columns bzw.
Column als Bestandteil des Resultats definiert
werden.
|
Query Main=Addr MaxRows=All Filter=SalDocRel.Total > 0 Columns=Addr.Number,SalDocRel.Total Related=SalDocRel,SalDoc,,,SalDocRel.CustNo = Addr.Number and SalDocRel.SalProcLevelCd = 4 and SalDocRel.DocStateCd > 10 and SalDocRel.IsUndo = FALSE RelatedColumn=Total,ifnull(sum(SalDocRel.TotalInclVat),0) OrderBy=-SalDocRel.Total
![]() |
AchtungWenn für eine Relation keine Rows gefunden werden,
liefern die Aggregat-Funktionen NULL zurück.
Wird dieser Fall nicht
behandelt, entsteht daraus via Query-Aufruf ein Leerstring.
Es wird
deshalb dringend empfohlen, eine Prüfung auf NULL zu implementieren. Siehe
im obigen Beispiel: ...ifnull(sum(...),0)
Beachten Sie auch,
dass bei grossen Datenvolumen Queries mit langer Laufzeit entstehen
können!
|
Query Main=StorageBin MaxRows=10 Columns=StorageBin.Number Column=GrosseHoeheBelegt,if(StorageBinAssignmentSum.Height>100,TRUE,FALSE) Column=KeineHoeheBenoetigt,if(WhTransaction.HeightSum=0,TRUE,FALSE) Columns=StorageBinAssignmentSum.Height,StorageBinAssignmentSum.Weight,StorageBinAssignmentSum.Volume Related=StorageBinAssignmentSum,StorageBinAssignment,,,StorageBinAssignmentSum.StorageBinNo = StorageBin.Number RelatedColumn=Height,ifnull(sum(StorageBinAssignmentSum.Height),0) RelatedColumn=Weight,ifnull(sum(StorageBinAssignmentSum.Weight),0) RelatedColumn=Volume,ifnull(sum(StorageBinAssignmentSum.Volume),0) Columns=WhTransaction.HeightSum,WhTransaction.WeightSum,WhTransaction.VolumeSum Related=WhTransaction,WhTransaction,,,WhTransaction.InStorageBinNo = StorageBin.Number and WhTransaction.TransferCompleted = FALSE RelatedColumn=HeightSum,ifnull(sum(WhTransaction.Height),0) RelatedColumn=WeightSum,ifnull(sum(WhTransaction.Weight),0) RelatedColumn=VolumeSum,ifnull(sum(WhTransaction.Volume),0) Filter=(GrosseHoeheBelegt=TRUE) and (KeineHoeheBenoetigt=FALSE)