Mehrstufige Referenz

Ausgangslage: Einstufige Referenz

Einstufige Referenzen standen schon immer zur Verfügung. Die Verwendung von zusammengesetzten Schlüsseln ist möglich.
Beispiel für eine einstufige Referenz von SalDocItem zu SalDoc:
SalDoc.Number(SalDocItem.SalDocInternalNo)
Beispiel für eine einstufige Referenz mit zusammengesetztem Schlüssel:
AddrPoolItem.BoName("73,[Addr.Number],0")
Hinweis
Hinweis
Fehlerhaft erfasste Referenzen wurden teilweise "geschluckt" und führten nicht zu Fehlern.
Beispiel einer fehlerhaften Referenz:
AddrPoolItem.BoName(73,Addr.Number,0)
Es tritt kein Fehler auf, es wird aber auch kein Resultat zurückgegeben.
Beispiel einer fehlerhaften Referenz mit zusammengesetztem Schlüssel:
number(DispoControl.PrimInTotal("[ConnectedArt.ConnectedArtBoId],1,,2,Time.MonthLastDay,")) -number(DispoControl.PrimOutTotal("[ConnectedArt.ConnectedArtBoId],1,,2,Time.MonthLastDay,"))
Es tritt kein Fehler auf, das Resultat ist aber falsch!
Attribute eines anderen BOs (hier Time.MonthLastDay) können nicht für Referenzen verwendet werden.

Mehrstufige Referenz

Sie können bei virtuellen Attributen mehrstufige Referenzen bilden. Mehrstufige Referenzen funktionieren grundsätzlich wie einstufige Referenzen, können aber verschachtelt werden. Die Aktivierung erfolgt dabei von innen nach aussen.
Syntax: Bo.Attr(Bo.Attr(Bo.Attrr("Activation-Key")))
Ein "Activation-Key" kann dabei auch berechnet werden. Für diese Berechnung sind beliebige Expressions unterstützt.
Beispiel einer Referenz mit Berechnung: v1=Addr.FullName(73+1)
Wichtig
Wichtig
Für String-Literale sind Quotes notwendig.
Innerhalb einer Expression kann auch die if-Funktion verwendet werden.

Escaping in Strings

Unterstützte Escape-Sequenzen: \t \n \r \' \" \\
Unicode-Zeichen können via Hex-Code erzeugt werden: \x0000 ... \xFFFF
Beispiel: "Das ist ein Text mit \"Double Quotes\" "

Singletons und BO Time

Für Singleton-BOs (z.B. Insyde) ist keine Referenz notwendig. Attribute von Singleton-BOs können beliebig verwendet werden.
Attribute des BO Time (z.B. Time.Today) können beliebig verwendet werden.
Beispiele
Anzeigen von verknüpften Dokumenten (bestimmte Laufnummer und bestimmter Verknüpfungstyp) in der BO-Liste 50000.
Bekannt sein muss:
  • Dokumenttyp (hier im Beispiel: 1)
  • Verknüpfungstyp (hier im Beispiel: 7
  • Laufnummer (hier im Beispiel: 9)
Für die Referenz auf das BO ConnectedDoc wird der Index 1 verwendet (hier im Beispiel: idx.1).
SalDoc.BoNumber(ConnectedDoc.ConnectedDocInternalNo(Idx.1,1,SalDoc.InternalNo,7,9))
Verwendung des BO Time in einer Referenz.
Differenz=number(DispoControl.PrimInTotal(ConnectedArt.ConnectedArtBoId,1,"",2,Time.MonthLastDay,""))- number(DispoControl.PrimOutTotal(ConnectedArt.ConnectedArtBoId,1,"",2,Time.MonthLastDay,""))
Zusätzliche Berechnung (Umsatz aktuelles Jahr und Vorjahr) mit Hilfe des BO Time.
Biz.GetBo
Cust
2005
ne

10


Addr.Number,Addr.FullName,Time.Year
ThisYear=MisSal.Turnover("Cust:"+Cust.Number,"C:"+string(Time.Year)+":1:12")
LastYear=MisSal.Turnover("Cust:"+Cust.Number,"C:"+string(Time.Year-1)+":1:12")

Vergleich alte und neue Syntax

Die folgenden Konstrukte (alte Syntax) dürfen nicht mehr verwendet werden!
Main-Bo-Attribute in eckigen Klammern.
Bo.Attr("[MainBo.MainBoAttr],2")
String-Literale ohne Quotes.
Bo.Attr(2,A)
Leere bzw. nicht vorhandene Segmente.
Bo.Attr(2,)
Bo.Attr(,A)
Vergleich einer etwas komplexeren Referenz.
Alte Syntax - Nicht mehr verwenden:
MisSal.Turnover("Cust:[CustArtCond.AddrNo]:Art:[CustArtCond.ArtInternalNo],C::1:12")

Neue Syntax
MisSal.Turnover("Cust:" + CustArtCond.AddrNo + ":Art:" + CustArtCond.ArtInternalNo, "C::1:12")
Hinweis
Hinweis
Im obigen Beispiel besteht die Referenz nach neuer Syntax aus zwei, durch ein Komma separierten, Segmenten.
Beispiel mit Kunden-Nr. 1070 und interner Artikel-Nr. 169
Segment 1: Cust:1070:Art:169
Segment 2: C::1:12
Die beiden Segmente bestehen jeweils aus einem String. Bei Segment 1 wird der String mit Plus-Zeichen aus fixen Teilen (in Quotes) und Attributen zusammengesetzt.

Label der Rückgabespalten

Beachten Sie folgenden Umstand: Die Label der Rückgabespalten entsprechen neu immer 1:1 der vollständigen Definition des virtuellen Attributs. Das ist ein breaking change.
Beispiele
Definition:
v1=Insyde.BoName
v2=Cust.Remark

Label der Rückgabespalten ALT:
v1=Insyde.BoName()
v2=Cust.Remark(Addr.CustBoId)

Label der Rückgabespalten NEU:
v1=Insyde.BoName
v2=Cust.Remark