Inhaltsverzeichnis

Built-In Functions

Alphabetische Liste aller Built-In Functions

Bearbeitung von Strings

Groß- und Kleinschreibung

  _Upper(<expr-1>)
  _Lower(<expr-1>)
  <expr-1>: Eingabestring

Der Inhalt von <expr-1> wird bei _Upper in Großbuchstaben, bei _Lower in Kleinbuchstaben umgesetzt. Nicht-alphabetische Zeichen bleiben unverändert. Ländereinstellungen werden bei der Umsetzung berücksichtigt. Die Konvertierung findet direkt in dem übergebenen String statt. Der neu erstellte String wird außerdem als Ergebnis geliefert.

Zeichenersetzung

  _Xlate(<expr-1>, <von>, <in> [,<item-1>]
  <expr-1>: Eingabestring
  <von>: die zu ersetzenden Zeichen oder Zeichenfolgen, getrennt durch das Trennzeichen.
  <in>: die zu ersetzenden Zeichenfolgen, ebenfalls getrennt durch das Trennzeichen.
  <item-1>: zu verwendendes Trennzeichen in Hochkommata

_Xlate liefert einen String mit dem Inhalt des Eingabestrings, wobei bestimmte Zeichen oder Zeichenfolgen durch andere Zeichen oder Zeichenfolgen ersetzt wurden.

Die Angabe eines Trennzeichens ist optional; Default ist Komma.

_Xlate durchsucht den String von vorne nach hinten nach den in <von> angegebenen Zeichenfolgen. Wird eine davon gefunden, so wird diese Zeichenfolge durch diejenige ersetzt, die in <in> an derselben Stelle in der Liste steht, d.h. <von-1> wird ersetzt durch <in-1>, <von-2> durch <in-2> usw. Wenn für eine Zeichenfolge in <von> kein Gegenstück in <in> vorhanden ist, werden die Zeichen aus dem String entfernt. Alle Zeichen, auch Leerzeichen vor und nach dem Separator, sind relevant.

Der übergebene String bleibt bei dieser Konvertierung unverändert.

Beispiele:

  NeuStr=_Xlate(objData.fldVal, "Ä,Ü,Ö", "AE,UE,OE")
  NeuStr=_Xlate(myLoc.000-pg-txt, "Ä;Ö;Ü;,;", "AE;OE;UE;.;", ";")
  NeuStr=_Xlate("Zählen und Prüfen","ä,ü,l,f,h,und", "ae,ue,f,l,,oder")
        ergibt NeuStr="Zaefen oder Pruelen" 

Teil-String

  _Substr(<expr-1>, <expr-2>, <expr-3>)
  <expr-1>: Eingabestring
  <expr-2>: Startposition (numerisch) 
  <expr-3>: Länge (numerisch)

_Substr liefert den Teil des Eingabestrings, der bei der Startposition anfängt, maximal in der angegebenen Länge. Eine Startposition größer als das letzte Zeichen ist zulässig; in diesem Fall wird das Ergebnis leer sein. Eine Startposition kleiner oder gleich 0 ist unzulässig, und führt zu einem Laufzeitfehler.

Entfernen von Leerzeichen

  _Trim(<expr-1>)
  <expr-1>:  Eingabestring.

_Trim liefert einen String mit dem gleichen Inhalt wie die Eingabe, aber ohne führende und nachfolgende Leerzeichen.

Länge ermitteln

  _Len(<expr-1>)
  <expr-1>:  Eingabestring. 

_Len liefert die Anzahl der Zeichen in dem von <expr-1> gelieferten String.

Sonderzeichen

  _StrCode(<expr-1>)
  <expr-1>:  Zeichenfolgename. 

_StrCode kann benutzt werden, um Sonderzeichen oder spezielle Zeichenfolgen in einen Platzhalter mit aufzunehmen. Folgende Zeichenfolgen sind im Moment implementiert:

Zeichenfolgename Aktion
newline Zeilenumbruch
nbhyphen geschützter Trennstrich
ohyphen Bedingter Trennstrich
nbspace Geschütztes Leerzeichen
tab Tab
page Seitenumbruch
euro Euro-Zeichen
newparagraph Neuer Absatz

Beispiel:

  NeuStr= "Variable mit einem Zeilen-" & _StrCode("newline") & "Umbruch"
  LinkStr ="TeamWiSE" & _StrCode("link") & "http://www.teamwise.de" 
  

StrEncode kann genutzt werden, um Sonderzeichen in einem bestehenden String durch das CTV-Format für spezielle Zeichenfolgen zu ersetzen, wie es auch bei StrCode benutzt wird.

  _StrEnCode(<expr-1>)
  <expr-1>:  Zeichenfolge.

Berücksichtigt werden hier z.Zt.

SonderzeichenCTV-Ersetzung (StrCode) Umschreibung
\r newline Zeilenumbruch
\r\n newline Zeilenumbruch
euro Euro-Zeichen
\t tab Tab
Char[160] nbhyphen geschützter Trennstrich
Char[173] ohyphen Bedingter Trennstrich
  _StrFind(<expr-1>, <expr-2>, [<expr-3>])
  <expr-1>:  zu suchende Zeichenfolge 
  <expr-2>:  Zeichenfolge, in der gesucht werden soll 
  <expr-3>:  Position in der Zeichenfolge, ab der gesucht werden soll (optional). Bei keiner Angabe wird ab Position 1 gesucht.

_StrFind1) liefert die Position der zu suchenden Zeichenfolge innerhalb einer anderen Zeichenfolge zurück. Wenn die gesuchte Zeichenfolge nicht gefunden wird, oder bei Eingabe fehlerhafter Werte, liefert diese Funktion den Wert 0 zurück.

Diese Funktionalität wurde der Excel Funktion "FINDEN" nachempfunden.

  Beispiele:
  
  position1 = _StrFind("st", "testtest")
  position2 = _StrFind("st", "testtest", 4)
  
  ergibt: postion1 = 3 und position2 = 7

Bearbeitung von numerischen Werten

Rundung

  _RoundOff(<expr-1>, <expr-2>)
  _Rounded(<expr-1>, <expr-2>)
  _RoundUp(<expr-1>, <expr-2>)
  <expr-1>: Wert, der gerundet werden soll.
  <expr-2>: Anzahl der Nachkommastellen

Der zu rundende Wert muss numerisch sein, um Laufzeitfehler zu vermeiden.

_RoundOff und _RoundUp liefern den Wert abgeschnitten auf <expr-2> Nachkommastellen. Der Wert wird dabei ab- bzw. aufgerundet.

_Rounded liefert den Wert je nach Inhalt auf- oder abgerundet auf <expr-2> Nachkommastellen.

Mathematische Funktionen

  _Max(<expr-1> [[, <expr-2>] ... ])
  _Min(<expr-1> [[, <expr-2>] ... ])
  <expr-1> ... <expr-n>: müssen einen numerischen Wert ergeben.

_Max liefert den größten Wert aller angegebenen Werte.

_Min liefert den kleinsten Wert aller angegebenen Werte.

Datum und Uhrzeit

Aktuelles Datum und Uhrzeit

  _Now()

_Now liefert die aktuelle Tageszeit und das Datum im Timestamp-Format.

Datumsverschiebung

  _DateShift(<item-1>, <expr-1>, <expr-2>, <expr-3>)
  <item-1>: muss Datum im TimeStamp-Format enthalten
  <expr-1>: enthält Anzahl Jahre; muss einen numerischen Wert ergeben.
  <expr-2>: enthält Anzahl Monate; muss einen numerischen Wert ergeben.
  <expr-3>: enthält Anzahl Tage; muss einen numerischen Wert ergeben.

_DateShift liefert ein Datum, das um die angegebene Anzahl Jahre, Monate und Tage korrigiert wurde. Beispiele:

  if PoVert.DatumBis > _DateShift(PoVert.DatumVon,0,18,0) ....
  bedeutet: wenn die Zeitstrecke mehr als anderthalb Jahre beträgt.
  if _DateShift(PoVert.DatumBis,0,2,0) >= 2000-01-01 ....
  bedeutet: wenn das Endedatum weniger als 2 Monate vor dem 1.Januar 2000 ist.
  PoVert.DatumVon = _DateShift(PoVert.DatumAkt,-1,0,0)
  bedeutet: datiere das Abschlussdatum um ein Jahr zurück.

Differenz zweier Daten in Jahren

  _YearSpan(<item-1>, <item-2>)
  <item-1>: muss Datum im Format JJJJ-MM-TT enthalten
  <item-2>: muss Datum im Format JJJJ-MM-TT enthalten

_YearSpan liefert die Anzahl Jahre, die zwischen den beiden Daten liegen. Es werden auch Nachkommastellen geliefert. Beispiel:

  if _YearSpan("1999-02-20", "2009-03-20") > 10 ....
  bedeutet: wenn die Zeitstrecke mehr als zehn Jahre beträgt.

Funktionen für TAA-Objekte

Eigenschaften von TAA-Objekten

  <obj-1>._objCount
  <obj-2>._objIsEmpty
  <obj-3>._objIsBOL
  <obj-4>._objIsEOL
  <obj-5>._objPosition
  <obj-5>._objIsCurrent
  <obj-1> und <obj-2>:  Name eines Objekts
  <obj-3>, <obj-4> <obj-5>:  Name eines Mengenobjektes

_objCount liefert die Anzahl Einträge in einem Mengenobjekt. Für ein Einzelobjekt liefert diese Eigenschaft 1, wenn es existiert (nach einem New), sonst 0.

_objIsEmpty liefert Wahr, falls das Objekt keine Einträge enthalt, sonst Unwahr. Für ein Einzelobjekt liefert diese Eigenschaft Unwahr, wenn es existiert (nach einem NEW), sonst Wahr.

_objIsBOL liefert Wahr, falls der aktuelle Eintrag der erste Eintrag in einem Mengenobjekt ist, sonst Unwahr.

_objIsEOL liefert Wahr, falls der aktuelle Eintrag der letzte Eintrag in einem Mengenobjekt ist, sonst Unwahr.

_objPosition liefert den Index des aktuellen Eintrages falls es einen aktuellen Eintrag gibt, sonst 0.

_objIsCurrent liefert Wahr, wenn in dem Objekt auf einen gültigen Eintrag positioniert ist.

Beispiele:

  if myobj._objCount > 0 then
     aktindex = myobj._objPosition
  end if
  if not myobj._objisempty then
     get first myobj
     do schleife while not myobj._objIsEOL
        ........
        get next myobj
     end schleife
  end if
  if myobj._objIsCurrent then
      copy myobj to myobj2
  end if

Auswertung von Objektinhalten

  <obj>._ObjFldMax(<objfld>)
  <obj>._ObjFldMin(<objfld>)
  <obj>._ObjFldSum(<objfld>)
   
  <objfld>._Max
  <objfld>._Min
  <objfld>._Sum
  <objfld>._IsEmpty
  <objfld>._FindMatch(<expr-1> [[, <expr-2>] ... ])
  <objfld>: Feld aus einem Objekt (<obj>.<feldname>)
  <expr-1> ... <expr-n>: Suchwerte

_ObjFldMax liefert den größten Wert, den <objfld> besitzt. Wenn das Objekt kein Mengenobjekt ist, ist das Ergebnis identisch mit <objfld>.

_ObjFldMin liefert den kleinsten Wert, den <objfld> besitzt. Wenn obj kein Mengenobjekt ist, ist das Ergebnis identisch mit <objfld>.

_ObjFldSum liefert den Gesamtwert aller <objfld>. Wenn das Objekt kein Mengenobjekt ist, ist das Ergebnis identisch mit <objfld>. Wenn <objfld> kein numerisches Feld ist, ist das Ergebnis 0 (null).

_Max, _Min und _Sum arbeiten wie _ObjFldMax, _ObjFldMin und _ObjFldSum (kürzere Schreibweise).

_IsEmpty liefert Wahr, falls <objfld> den Defaultwert enthält, sonst Unwahr.

Defaultwerte:

Feldtyp Defaultwert
TimeStamp 1000-01-01-00.00.00.000000
Time 00.00.00.000000
Date 1000-01-01
DateTime 1000-01-01-00.00.00.000000
Numeric 0
String <Leerstring>

_FindMatch sucht in <objfld> nach den angegebenen Werten.

Es wird ein numerischer Wert zurückgeliefert der folgende Bedeutung hat:

0: Keiner der angegebenen Werte wurde in <objfld> gefunden. n: Einer der angegebenen Werte wurde im n'ten Objektsatz gefunden (Es wird immer der erste Treffer geliefert).

Schlüsseltabelle lesen

  <obj>._CompleteRef

Anwendbar auf ein TAA-Objekt vom Typ REF. Liest die mit diesem Objekttyp verknüpfte Schlüsseltabelle.

Wenn das Objekt leer ist, wird die Tabelle vollständig gelesen und in dem Objekt bereitgestellt.

Wenn das Objekt Sätze enthält, wird für jeden Satz aus der Schlüsseltabelle der zu dem Primärschlüssel gehörige Schlüsseltabellensetz gelesen und in dem Objekt bereitgestellt.

Achtung: Wenn _Completeref ausgeführt wird auf ein bereits mit der vollständigen Tabelle gefülltes Objekt, wird für jeden Satz im Objekt der passende Satz in der Schlüsseltabelle gesucht und durch diesen ersetzt. Dies kann zu unerwarteten Verzögerungen führen. Im Zweifelsfall fragen Sie vorher ab, ob das Objekt leer ist.

Funktionen für Intrinsic Objects

Enthält Schriftgutstruktur einen bestimmes Modul?

  <intrinsicObject>._Contains(<item-1>)
  <intrinsicObject>: Name des intrinsic Object der gewünschten Hierarchiestufe
  <item-1>: Name eines CTV-Moduls

Wenn ein CTV-Modul dieses Namens in der aktuell bekannten Schriftgutstruktur der referenzierten Schriftgutinstanz enthalten ist, liefert die Funktion _Contains Wahr, sonst Unwahr. Die Funktion liefert auch Unwahr, wenn das benutzte intrinsic Object nicht existiert, bspw. weil keine übergeordnete Instanz des angegebenen Typs vorhanden ist.

Beispiel:

  ctvsstk._contains("LE-BS-ANTRAG-ABLEHNUNG")
  parent._contains(antragsmodul)

Typ von übergeordnetem Schriftgut

_GetType liefert den Typ des Schriftguts, welches <level> Ebenen über dem aktuellen Schriftgut liegt. Wenn _GetType ohne Argument aufgerufen wird, wird der Typ des aktuellen Schriftgutst zurückgegeben. Falls es nicht soviel Ebenen oberhalb des aktuellen Schriftguts gibt, wird ein Leerstring zurückgegeben.

      <code>if me._GetType(2) = "SSTZ" then ...	</code>	

Ausgabe-Typ von übergeordnetem Schriftgut

Die Eigenschaft PreferredDocumentType kann genutzt werden um zur Laufzeit den Ausgabe-Typ von ein Dokument zu Ändern. Momentan werden von TAA nur „RTF“ und „DOCX“ unterstützt bei der Montage von Dokumente.

      <code>ctvcdok.PreferredDocumentType = "DOCX"</code>	

Ist Eigenschaft änderbar?

_varIsReadonly gibt an, ob die angegebene Eigenschaft oder CTV-Variable in dem Modul änderbar ist.

res = _varIsReadonly(me.ACH-KZ) 
res = _varisreadonly(me.Name)
res = _varisreadonly(ctvGevo.ID)

Register

Wenn ein Schriftgut bei der CTV-Laufzeit registriert wird, kann man für dieses Schriftgut zu einem späteren Zeitpunkt die Seitenzahl anhand des angegebenen Namens abzufragen.

      <code>Me.Register("Schriftstück1")		</code>	
      
      

Seitenzahlen

Mitunter möchte man in einem Dokument die Anzahl Seiten eines anderen Dokuments angeben. Hierfür gibt es folgende Möglichkeit:

Zuerst wird das Dokument, dessen Seitenzahl man benötigt, registriert:

 Me.Register("Vertrag-1")

Anschließend kann in dem Dokument, welches die Seitenzahl enthalten soll, diese im Text aufgenommen werden. Dafür muss an der Stelle, wo die Seitenzahl im Text erscheinen soll, wie üblich ein Platzhalter im Text vorhanden sein. Dieser Platzhalter kann in PseudoCode mit dem Befehl ctvEngine.ResolveTotalPages bestückt werden:

  SeitenPlatzhalter = ctvEngine.ResolveTotalPages("Vertrag-1")

Wenn man die Seitenzahlen mehrerer Dokumente addieren möchte, kann man diese Dokumente mit einem Semikolon als Trennzeichen übergeben:

  SeitenPlatzhalter = ctvEngine.ResolveTotalPages("Vertrag-1;Vertrag-2;Vertrag-3")    

Neben ResolveTotalPages gibt es auch ResolveTotalPagesWord und ResolveTotalPagesPdf. Bei ResolveTotalPages wird, falls Word zur Verfügung steht, Word benutzt, um die Anzahl Seiten zu ermitteln. Andernfalls wird bei ResolveTotalPages eine PDF-Datei erstellt und von dieser Datei die Anzahl Seiten ermittelt. Mit ResolveTotalPagesWord und ResolveTotalPagesPdf werden ausschließlich die entsprechenden Methoden für Word resp. Pdf genutzt.

Durch Unterschiede zwischen der Darstellung des Texts in Word und in Pdf können sich bei den beiden Ermittlungsmethoden unterschiedliche Seitenzahlen ergeben.

Da die Ermittlung der Seitenzahl erst erfolgen kann, wenn das Dokument komplett aufgebaut wurde, erfolgt dies erst bei der Seitenansicht, beim PDF-Erstellen oder beim Druck des Dokuments. Bis zu diesen Zeitpunkt wird im Dokument die Seitenzahl durch ## dargestellt.

Monitormeldung ausgeben

  _Message(<string>)
  _Infolevel()

_Message gibt den angegebenen String als Meldung im TAA-Monitor aus. Der String kann aus mehreren Teilen zusammengesetzt sein, die mit dem Konkatenierungs-Operator verbunden sein müssen. Wenn die Meldung erfolgreich zusammengesetzt werden konnte, steht der sich ergebende String in dem Rückkehrwert der Funktion zur Verfügung.

Über den InfoLevel wird eingestellt, wie viele Meldungen ausgegeben werden sollen (je höher der Infolevel, desto mehr Meldungen; bei niedrigerem Infolevel werden nur die wichtigsten Meldungen ausgegeben). _Infolevel liefert den aktuell eingestellten Wert, sodass die Ausgabe von Meldungen davon abhängig gemacht werden kann:

  if _InfoLevel() > 2 then
     res = _Message("Wert in Fld1 ist " & obj1.field1 & " und Fld2 beinhaltet " & obj1.field2)
  endif
  
1)
ab TAA V9.02