Zuletzt bearbeitet vor 11 Jahren
von Supervisor

XTC

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