BEACHTE
"not" immer mit Klammer schreiben!
Beispiel:
if ( not x.IsEmpty() ) or y then...
Unterschiedliche Rückgabewerte
In V6.5 hat es die "info( "TAG" )"-Funktion schon gegeben. "self.ForDate.GetDay()" geht erst ab V7. "info( "TAG" )" geht aber immer noch, ist jedoch nicht immer gleich mit "self.ForDate.GetDay()".
auf Wochen- und Monatsebene (z.B.: AbschlussWocheStandard,AbschlussMonatKunde) gibt es Unterschiede:
Woche: => alte Sprache liefert Sonntagsdatum => neue Sprache liefert Montagsdatum Monat: => alte Sprache liefert Ultimo => neue Sprache liefert Monatsersten
auf Tagesebene (z.B.: AbschlussTagKunde) gibt es keinen Unterschied:
=> alte und neue Sprache liefern das Tagesdatum
XML Anwendungen
Tage extra bewerten
<property name="SpecialDaykind" from="24.12.2007" to="25.12.2007" value="KSOLL" />
Sommerzeitumstellung
<property name="ComputeWithDaylightSavingTime" from="01.01.1900" to="01.01.2100" value="X" />
Standard-Benutzergruppe setzen
Wird jetzt standardisiert über das Programm angelegt, muss also nicht mehr im XML eingetragen werden.
<UserGroup name="ALLE" label="aus XML: Zugriff auf alle Benutzer" /> <change> <PropertyType name="InUserGroup" inObjectType="AlexUser" defaultValueExpression="root.GetManifestObject.UserGroup('ALLE')"/> </change>
Rahmenplan ("Monatssoll aus WZ-Modell" )
Im Kundenmodul wie folgt eintragen:
<change> <PropertyType name="WithRotatingShiftScheduleRow" label="Monatssoll aus WZ-Modell" > <change><Visibility name="Employee" hide="FALSE" /></change> </PropertyType> </change>
Wochenruhe auf Variante 2 setzen
Im Kundenmodul wie folgt eintragen (hier am Beispiel Bereich):
<change> <PropertyType name="WarrantedIdlePeriodVariant1" > <change><Visibility name="Department" hide="FALSE" /></change> </PropertyType> <change>
XTC + Objects
Root Funktionen:
Jedes Objekt hat ein Attribut "Root" vom Typ RootObject. Zugriff erfolgt über:
object.Root
Dieses Attribut wird in weitere Folge mit "root" abgekürzt.
Infrastruktur
CreateTransient, Login, CurrentUser...
Objekttypen
x = root.ObjectType.Employee()
In x steht der Objekttyp von Employee
Manifeste Objekte
x = root.GetManifestObject.AccountType( "NAME_OF_ACCOUNT" )
In x steht das manifeste Objekt mit dem Namen NAME_OF_ACCOUNT
Abfragen
Query + QueryWith erklären mit Beispiel
Konstruktion
ConstructZombie, Construct,...
employee = root.ConstructZombie.Employee()
Transitionen
Transition, UnloggedTransition,...
root.Transition( def( root ) { employee = root.Construct.Employee() employee.EmployeeID[ timeRange ] = "1002" return 1 })
Bei Verwendung von "Transition" kann man danach speicher oder rückgängig machen. Bei Verwendung von "UnloggedTransition" wird danach automatisch gespeichert.
IsHoliday
root.IsHoliday( self.ForDate )
Info-Tokens:
"CALENDAR_DAYKIND"
z.B.: strDaykind = info_string( "CALENDAR_DAYKIND" )
Object Funktionen:
CloneFrom
InitializeWithDefault
ApplyVisitor
ApplyHistoryVisitor
GetProperty
Erklärung: <Ausdruck> = <Ergebnis des ausgewerteten Ausdrucks als String>
employee.GetProperty( "Surname" ).GetPropertyType().Label = "Zuname"
employee.GetProperty( "Surname" ).GetPropertyType().Name = "Surname"
employee.GetProperty( "Surname" ).GetPropertyType().ItsManifestID = "PropertyType::Surname"
Einfache XTC Funktionen
Erklärung: <Ausdruck> = <Ergebnis des ausgewerteten Ausdrucks als String>
z.B.: 1 + 1 = "2.00"
Gleitkommazahlen Funktionen:
(1.25).ToString() = "1.25"
(1.25).Floor() = "1.00"
(1.25).Ceil() = "2.00"
Datum Funktionen (auf Tag genau):
Date(2007,2,17).GetDay() = "17"
Date(2007,2,17) = "17.02.2007"
Date.Today() = "18.03.2007"
Date.Today().GetYear() = "2007"
Date.Today().GetMonth() = "3"
Date.Today().GetDay() = "18"
Date.Today().ToString() = "18.03.2007"
Date.Today().ToStringYYYYMMDD() = "20070318"
Date.Today().First() = "01.03.2007"
Date.Today().Ultimo() = "31.03.2007"
Date.Today().AddDays( 1 ) = "19.03.2007"
Date.Today().AddMonths( 1 ) = "18.04.2007"
Date.Today().AddYears( 1 ) = "18.03.2008"
Date.Today().AddWeeks( 1 ) = "25.03.2007"
Date.Today().DecDate() = "20070318"
Date.Today().ToDOW() = 0, 1, 2, 3, 4, 5 oder 6 (entspricht Mo,Di,Mi,Do,Fr,Sa oder So)
Kalenderwoche Funktionen:
WeekOfYear() = "2007.11"
WeekOfYear( Date.Today() ) = "2007.11"
WeekOfYear( Date.Today() ).GetYear() = "2007"
WeekOfYear( Date.Today() ).GetWeek() = "11"
WeekOfYear( Date.Today() ).AddWeeks( 1 ) = "2007.12"
WeekOfYear( Date.Today() ).Monday() = "12.03.2007"
WeekOfYear( Date.Today() ).Sunday() = "18.03.2007"
WeekOfYear( Date.Today() ).ToString() = "2007.11"
Datums Funktionen (auf Minute genau):
DateMin.Today() = "18.03.2007 17:49"
DateMin( Date.Today(), 0, 0 ).ToString() = "18.03.2007 0:00"
DateMin().ToString() = "01.01.1900 0:00"
DateMin().AddMins( 1 ) = "01.01.1900 0:01"
DateMin().AddHours( 1 ) = "01.01.1900 1:00"
Zeitraum Funktionen (von/bis auf Minute genau):
TimeRange() = "0.0.0 0:00 - 01.01.2100 0:00"
TimeRange( DateMin(), DateMin().AddDays( 1 ) ) = "01.01.1900 0:00 - 02.01.1900 0:00"
TimeRange.Eternal() = "0.0.0 0:00 - 01.01.2100 0:00"
TimeRange.Eternal().SetFrom( Date.Today() ) = "18.03.2007 0:00 - 01.01.2100 0:00"
TimeRange.Eternal().SetTo( Date.Today() ) = "0.0.0 0:00 - 18.03.2007 0:00"
TimeRange( DateMin.Today(), DateMin.Today() ).GetFrom() = "18.03.2007 17:42"
TimeRange( DateMin.Today(), DateMin.Today() ).GetTo() = "18.03.2007 17:42"
TimeRange( DateMin().AddDays( 1 ), DateMin() ).IsEmpty() = "ja"
TimeRange.Eternal().ToString() = "0.0.0 0:00 - 01.01.2100 0:00"
TimeRange( DateMin(), DateMin().AddYears( 1 ) ).YearsDiff() = "1"
TimeRange( DateMin(), DateMin().AddMonths( 1 ) ).MonthsDiff() = "1"
TimeRange( DateMin(), DateMin().AddWeeks( 1 ) ).WeeksDiff() = "1"
TimeRange( DateMin(), DateMin().AddDays( 1 ) ).DaysDiff() = "1"
TimeRange( DateMin(), DateMin().AddHours( 1 ) ).HoursDiff() = "1"
TimeRange( DateMin(), DateMin().AddMins( 1 ) ).MinsDiff() = "1"
TimeRange.Intersect( range1, range2 ) = "Schittmenge aus range1 und range2 wird als neuer TimeRange zurückgegeben"
Parser Funktionen:
Parse( "1+1" ).AsExpression() = "2.00"
Parse( "1" ).AsExpression()() + 1 = "2.00"
div. def’s:
def() return 1+1 = "2.00"
1 + ( def( x ) return x )( 1 ) = "2.00"
div. maps:
{} = "empty"
{"A"=1,2="B","C"=3} = "[2.00]=B [A]=1.00 [C]=3.00 "
x = {"1"=1,"2"=2,"3"=3} y = {} for next i in x y[ i ] = x[ i ] o = "OK" for next j in y if y[ j ] != x[ j ] then o = "!OK" endif
Nach Durchlauf durch dieses Programmfragment haben die einzelnen Variablen folgende Werte:
i: 3 j: 3 o: OK x: [1]=1.00 [2]=2.00 [3]=3.00 y: [1]=1.00 [2]=2.00 [3]=3.00
div. arrays:
[] = "empty"
[1,2,3] = "1.00 2.00 3.00 "
by_name:
In V7 muss der string der auf by_name folgt in ( Klammern ) geschrieben werden, wenn darauf noch [ eckige Klammern ] folgen. Sonst bekommt man an dieser Stelle eine Laufzeitfehler, ALEX bleibt beim Durchrechnen im XTC hängen.
Bsp.: strAccountName = "ENTITLEMENT_BALANCE_" || serialNumber accountValue = account( by_name ( strAccountName )[ -1 ] )
Zeichenkette Funktionen:
" xyz " = " xyz "
x = "" x.AppendFile( "test.txt" ) danach: Textueller Inhalt der Datei "text.txt" steht in der variable x.
s = "a" || CHAR( 10 ) || "b" || CHAR( 10 ) || "c" v = s.Split( CHAR( 10 ) ) danach: in v[ 0 ] steht a in v[ 1 ] steht b in v[ 2 ] steht c
" xyz ".Trim() = "xyz"
" xyz ".TrimLeft() = "xyz "
" xyz ".TrimRight() = " xyz"
" xyz ".Contains("x") = "ja"
" xyz ".Contains("a") = "nein"
" XYZ ".ToLower() = " xyz "
" xyz ".ToUpper() = " XYZ "
" xyz ".InsertAt( 0, "x" ) = "x xyz "
" xyz ".Left( 3 ) = " x"
" xyz ".Right( 3 ) = "z "
" xyz ".Mid( 3 ) = "yz "
" xyz ".SubString( 2, 1 ) = "x"
"xyx".ReplaceFirst( "x", "a" ) = "ayx"
"xyx".ReplaceLast( "x", "a" ) = "xya"
"xyx".ReplaceNth( "x", "a", 1 ) = "xya"
"xyx".ReplaceAll( "x", "a" ) = "aya"
XTC Beispiele
Vector
Verwendung von "+="
x = [] // [ ] x += 5 // [ 5 ] x += "a" // [ 5, "a" ] y = [ "eins", "zwei", "drei" ] // [ "eins", "zwei", "drei" ] x += y // [ 5, "a", [ "eins", "zwei", "drei" ] ]
Verwendung von "PushBack( .. )"
x = [] // [ ] x.PushBack( 5 ) // [ 5 ] x.PushBack( "a" ) // [ 5, "a" ] y = [ "eins", "zwei", "drei" ] // [ "eins", "zwei", "drei" ] x.PushBack( y ) // [ 5, "a", [ "eins", "zwei", "drei" ] ]
XTC Anwendungen in Berechnung
Rahmenplan
Beispiel für SOLL_WERK
if property( WithRotatingShiftScheduleLine ) then tagessoll = 0.0 if ?self.DayRotaDay then tagessoll = self.DayRotaDay.AssignedForwardTargetTime / 60.0 endif else ...
Beispiel für SOLL_MONAT in AbschlussAbrCodeStandard
monthDays = self.MonthDays monthTargetTime = 0.0 for next i in monthDays { day = monthDays[ i ] monthTargetTime += day.DayTargetTime } set_txn_message monthTargetTime