# "Escalation()"-Objekt

Für die Eskalation werden unter anderem die folgenden Portal-Skript-Bibliotheken benötigt:

- **DEXPRO\_\_EscalationLib**
- **DEXPRO\_\_UserExit\_Escalation // Invoice**
- **DEXPRO\_\_UserExit\_Escalation\_Mailroom**
- **DEXPRO\_\_UserExit\_Escalation\_Procurement**

Für den eigentlichen Eskalations-Aufruf wird ein Portal-Skript als Job eingeplant. Im Job-Skript wird ein "Escalation()" Objekt erstellt. Dem Objekt muss der Mappentyp-Name als erster Parameter mitgegeben werden. Als zweiter Parameter wird der Eskalations-Typ mitgegeben. Im Standard sind die Typen "Deadline", "Action" und "PPC" definiert - es können aber beliebige Typen projektspezifisch definiert werden. Das folgende Skript zeigt ein Beispiel für einen "Deadline"-Eskalations-Job.

```JavaScript
// #import "Invoice__ImportLib"
var esc = new Escalation("Invoice", "Deadline");
if( esc.Result===true ){
    // Arbeits-Ordner "aufräumen"
    esc.cleanUpFilePath();
    // Alle Rechnungs-Mappen iterieren und Zugriffsberechtigungen ignorieren
    context.setSuperMode(true);
    var frs = new FileResultset("Invoice", "", "");
    for( var docFile=frs.first(); docFile; docFile=frs.next() ){
        // Eskalations-Dateien pro Benutzer erstellen
        // -> esc.invoice_checkEscalation(docFile)
        // -> esc.invoice_getEscalationUserArray(docFile)
        // -> esc.invoice_addBodyContent
        //      -> esc.invoice_createTableHead();
        //      -> esc.invoice_createTableEntry();
        esc.escalate(docFile);
    }
    // Versenden der Eskalations-Mails
    // -> esc.invoice_closeTable(su)
    // -> esc.invoice_sendMail(su, html)
    esc.closeFilesAndSendMails();
    esc.Log.stop();
    context.setSuperMode(false);
    if( esc.Result===true ){
        return 1;
    }
}
return esc.Error;
```

Das "**Escalation**"-Objekt erhält 2 Parameter und diverse Property.

<table border="1" id="bkmrk-%40param-%7Bstring%7D-temp" style="border-collapse: collapse; width: 100%; height: 290px;"><tbody><tr style="height: 29px;"><td style="width: 11.9136%; height: 29px;"><span style="color: #993300;">**@param**</span></td><td style="width: 11.1728%; height: 29px;"><span style="color: #33cccc;">**{string}**</span></td><td style="width: 15.8642%; height: 29px;"><span style="color: #0000ff;">**template**</span></td><td style="width: 61.0494%; height: 29px;"><span style="color: #003300;">**Name des aufrufenden Mappentypen ("Invoice", "Mailroom")**</span></td></tr><tr style="height: 29px;"><td style="width: 11.9136%; height: 29px;"><span style="color: #993300;">**@param**</span></td><td style="width: 11.1728%; height: 29px;"><span style="color: #33cccc;">**{string}**</span></td><td style="width: 15.8642%; height: 29px;"><span style="color: #0000ff;">**escType**</span></td><td style="width: 61.0494%; height: 29px;"><span style="color: #003300;">**Eskalations-Typ (Standard: "Deadline", "Action", "PPC")**</span></td></tr><tr style="height: 29px;"><td style="width: 11.9136%; height: 29px;"><span style="color: #003366;">**@property**</span></td><td style="width: 11.1728%; height: 29px;"><span style="color: #33cccc;">**{string}**</span></td><td style="width: 15.8642%; height: 29px;"><span style="color: #0000ff;">**Error**</span></td><td style="width: 61.0494%; height: 29px;"><span style="color: #003300;">**Fehlermeldung**</span></td></tr><tr style="height: 29px;"><td style="width: 11.9136%; height: 29px;"><span style="color: #003366;">**@property**</span></td><td style="width: 11.1728%; height: 29px;"><span style="color: #33cccc;">**{boolean}**</span></td><td style="width: 15.8642%; height: 29px;"><span style="color: #0000ff;">**Result**</span></td><td style="width: 61.0494%; height: 29px;"><span style="color: #003300;">**Ergebnis (true/false)**</span></td></tr><tr style="height: 29px;"><td style="width: 11.9136%; height: 29px;"><span style="color: #003366;">**@property**</span></td><td style="width: 11.1728%; height: 29px;"><span style="color: #33cccc;">**{string}**</span></td><td style="width: 15.8642%; height: 29px;"><span style="color: #0000ff;">**Template**</span></td><td style="width: 61.0494%; height: 29px;"><span style="color: #003300;">**Name des aufrufenden Mappentypen ("Invoice", "Mailroom")**</span></td></tr><tr style="height: 29px;"><td style="width: 11.9136%; height: 29px;"><span style="color: #003366;">**@property**</span></td><td style="width: 11.1728%; height: 29px;"><span style="color: #33cccc;">**{string}**</span></td><td style="width: 15.8642%; height: 29px;"><span style="color: #0000ff;">**EscalationType**</span></td><td style="width: 61.0494%; height: 29px;"><span style="color: #003300;">**Eskalations-Typ (Standard: "Deadline", "Action", "PPC")**</span></td></tr><tr style="height: 29px;"><td style="width: 11.9136%; height: 29px;"><span style="color: #003366;">**@property**</span></td><td style="width: 11.1728%; height: 29px;"><span style="color: #33cccc;">**{string}**</span></td><td style="width: 15.8642%; height: 29px;"><span style="color: #0000ff;">**LogPath**</span></td><td style="width: 61.0494%; height: 29px;"><span style="color: #003300;">**Pfad für die Ablage der Logdatei**</span></td></tr><tr style="height: 29px;"><td style="width: 11.9136%; height: 29px;"><span style="color: #003366;">**@property**</span></td><td style="width: 11.1728%; height: 29px;"><span style="color: #33cccc;">**{string}**</span></td><td style="width: 15.8642%; height: 29px;"><span style="color: #0000ff;">**Path**</span></td><td style="width: 61.0494%; height: 29px;"><span style="color: #003300;">**Arbeits-Pfad, in dem pro Benutzer eine Datei mit den Informationen der eMail abgelegt wird.**</span></td></tr><tr style="height: 29px;"><td style="width: 11.9136%; height: 29px;"><span style="color: #003366;">**@property**</span></td><td style="width: 11.1728%; height: 29px;"><span style="color: #33cccc;">**{string}**</span></td><td style="width: 15.8642%; height: 29px;"><span style="color: #0000ff;">**LogInt**</span></td><td style="width: 61.0494%; height: 29px;"><span style="color: #003300;">**Intervall für den Zeitpunkt, zu dem eine neue Logdatei erstellt wird ("timestamp", "date" (Standard), "month", "year").**</span></td></tr><tr style="height: 29px;"><td style="width: 11.9136%; height: 29px;"><span style="color: #003366;">**@property**</span></td><td style="width: 11.1728%; height: 29px;"><span style="color: #33cccc;">**{Log}**</span></td><td style="width: 15.8642%; height: 29px;"><span style="color: #0000ff;">**Log**</span></td><td style="width: 61.0494%; height: 29px;"><span style="color: #003300;">**new Log(context.scriptName, this.LogPath, this.LogInt)**</span></td></tr></tbody></table>

**Funktionsliste (<span style="color: #ff6600;">DEXPRO\_\_EscalationLib</span>):**

<span style="color: #000080;">boolean **setEscalationType( <span style="color: #ff6600;">String</span> <span style="color: #993300;">newEscalationType</span> )** </span>Setzt einen neuen Eskalations-Typen.  
Return: true / false

<span style="color: #000080;">boolean **cleanUpFilePat**</span><span style="color: #000080;">**h()** </span>Löscht alle Dateien aus dem Verarbeitungs-Ordner zum aktuellen Eskalations-Typen.  
Return: true / false

<span style="color: #000080;">boolean **escalate( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">docFile</span> )** </span>Prüft die Eskalation für die aktuelle Mappe. Ggf. wird ein Eskalations-Eintrag pro Anwender hinzugefügt. Bei Gruppen erhält jeder Benutzer aus der Gruppe eine Eskalations-Mail. Die Funktion ruft weitere interne Funktionen auf.  
\- <span style="color: #0000ff;">this.checkEscalation(</span> <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">docFile</span> <span style="color: #0000ff;">)</span>  
\- <span style="color: #0000ff;">this.getEscalationUserArray(</span> <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">docFile</span> <span style="color: #0000ff;">)  
\- this.addBodyContent( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">docFile</span> )  
</span>Return: true / false

<span style="color: #000080;">boolean</span>**<span style="color: #000080;"> addBodyContent( </span><span style="color: #ff6600;">DocFile </span><span style="color: #993300;">docFile, <span style="color: #ff6600;">SystemUser</span> userobj </span><span style="color: #000080;">)</span>** Wenn zum aktuellen Benutzer noch keine Info-Datei existiert wird eine neue Datei erstellt. Andernfalls wird die bestehende Datei verwendet. Die Funktion fügt einen Tabellen-Eintrag für die aktuelle Rechnung hinzu und ruft hierfür weitere interne User-Exit Funktionen auf.  
\- <span style="color: #0000ff;">this.createTableHead(</span> <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">docFile<span style="color: #000080;"><span style="color: #993300;">,</span> <span style="color: #ff6600;">SystemUser</span><span style="color: #993300;"> userobj, <span style="color: #ff6600;">String</span> lang</span></span></span> <span style="color: #0000ff;">)</span>  
\- <span style="color: #0000ff;">this.createTableEntry(</span> <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">docFile<span style="color: #000080;"><span style="color: #993300;">,</span> <span style="color: #ff6600;">SystemUser</span> <span style="color: #993300;">userobj, <span style="color: #ff6600;">String</span> lang</span></span></span> <span style="color: #0000ff;">)</span>  
Return: true / false

<span style="color: #000080;">boolean</span>**<span style="color: #000080;"> closeFilesAndSendMails( </span><span style="color: #ff6600;">DocFile </span><span style="color: #993300;">docFile, <span style="color: #ff6600;">SystemUser</span> userobj </span><span style="color: #000080;">)</span>** Die Funktion iteriert alle erstellten Dateien aus dem Arbeits-Ordner. Die Funktion schließt die Html-Tabelle und versendet die HTML als Mail. Hierfür werden die folgenden User-Exit-Funktionen aufgerufen:  
\- <span style="color: #0000ff;">this.closeTable(</span> <span style="color: #ff6600;">SystemUser</span> <span style="color: #993300;">su</span> <span style="color: #0000ff;">)</span>  
\- <span style="color: #0000ff;">this.sendMail(</span> <span style="color: #993300;"><span style="color: #000080;"><span style="color: #ff6600;">SystemUser</span> <span style="color: #993300;">su</span>, <span style="color: #ff6600;">String</span> <span style="color: #993300;">html </span></span></span><span style="color: #0000ff;">)</span>  
Return: true / false

<span style="color: #000080;">boolean</span>**<span style="color: #000080;"> parseDateToLocaleString( </span><span style="color: #ff6600;">Date </span><span style="color: #993300;">dateObj, <span style="color: #ff6600;">String</span> language </span><span style="color: #000080;">)</span>** Die Funktion wandelt ein Datums-Objekt in einen String um. Das Datumsformat wird automatisch über die Sprache ermittelt. Bei einem ungültigen Datumsobjekt wird ein Leerstring zurückgegeben. Wenn der Parameter bereits vom Typ "String" ist wird der String zurückgegeben.  
Return: Date as String

**Neben den Standard-Funktion werden einige Funktionen als User-Exit-Funktionen ausgeliefert. Die Funktionen sind in der Bibliothek <span style="color: #ff6600;">DEXPRO\_\_EscalationLib</span> enthalten und können projektspezifisch angepasst werden.**

**Ab der Invoice-Version 1.1.110 werden eigene Funktionen pro Modul (Invoice/Mailroom/Procurement) aufgerufen und pro Modul wird eine separate UserExit-Lib ausgeliefert. Wenn bei einem Invoice-Update weiterhin die alten Funktionen verwendet werden sollen, dann kann einfach weiterhin die alte Lib "DEXPRO\_\_UserExit\_EscalationLib" verwendet werden. Wenn die neuen Funktionen nicht existieren, dann werden weiterhin die alten Funktionen verwendet.**

<span style="color: #000080;">boolean **checkEscalation( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df</span> ) // Alt** boolean **invoice\_CheckEscalation( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df</span> )** boolean **mailroom\_CheckEscalation( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df</span> )** boolean **procurement\_CheckEscalation( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df</span> )** </span>Die Funktion wird pro DocFile-Objekt aufgerufen und gibt durch die Rückgabe zurück ob eine Eskalation stattfinden soll oder nicht. Im ausgelieferten Beispiel werden bereits die Eskalations-Typen und die Mappentypen unterschiedlich behandelt.  
Return: true / false

<span style="color: #000080;">boolean **getEscalationUserArray( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df</span> ) // Alt** boolean **invoice\_GetEscalationUserArray( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df</span> )** boolean **mailroom\_GetEscalationUserArray( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df</span> )** boolean **procurement\_GetEscalationUserArray( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df</span> )** </span>Die Funktion ermittelt pro DocFile-Objekt die zu informierenden Benutzer. Für jeden ermittelten Benutzer wird ein eMail-Eintrag in die Datei zum Benutzer erzeugt.  
Return: Array mit SystemUser-Objekten

<span style="color: #000080;">boolean **createTableHead( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df<span style="color: #000080;">,</span> <span style="color: #ff6600;">SystemUser</span> su<span style="color: #000080;">,</span> <span style="color: #ff6600;">String</span> lang</span> )** boolean **invoice\_CreateTableHead( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df,<span style="color: #ff6600;">SystemUser</span> su,<span style="color: #ff6600;">String</span> lang</span> )** boolean **mailroom\_CreateTableHead( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df,<span style="color: #ff6600;">SystemUser</span> su,<span style="color: #ff6600;">String</span> lang</span> )** boolean **procurement\_CreateTableHead( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df,<span style="color: #ff6600;">SystemUser</span> su,<span style="color: #ff6600;">String</span> lang</span> )** </span>Wenn zu einem Benutzer noch keine Eskalations-Text-Datei existiert, dann wird zunächst eine neue Datei angelegt. Die Mail wird als HTML-Mail erzeugt und soll in der Regel einen einleitenden Info-Text zur Eskalation enthalten. Die ermittelten Rechnungen werden anschließend tabellarisch gelistet und hierfür muss zunächst die Zeile mit den Tabellen-Überschriften generiert werden. Die Tabelle kann je nach Mappentyp und Eskalations-Typ unterschiedliche Spalten mit unterschiedlich aufbereiteten Informationen enthalten.  
Return: true / false

<span style="color: #000080;">boolean **createTableEntry( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df, <span style="color: #ff6600;">SystemUser</span> su, <span style="color: #ff6600;">String</span> lang</span> )** boolean **invoice\_CreateTableEntry( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df, <span style="color: #ff6600;">SystemUser</span> su, <span style="color: #ff6600;">String</span> lang</span> )** boolean **mailroom\_CreateTableEntry( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df, <span style="color: #ff6600;">SystemUser</span> su, <span style="color: #ff6600;">String</span> lang</span> )** boolean **procurement\_CreateTableEntry( <span style="color: #ff6600;">DocFile</span> <span style="color: #993300;">df, <span style="color: #ff6600;">SystemUser</span> su, <span style="color: #ff6600;">String</span> lang</span> )** </span>Die Funktion fügt einen Tabellen-Eintrag zu einer existierenden Eskalations-Text-Datei hinzu. Die Tabelle kann je nach Mappentyp und Eskalations-Typ unterschiedliche Spalten mit unterschiedlich aufbereiteten Informationen enthalten.  
Return: true / false

<span style="color: #000080;">boolean **closeTable( <span style="color: #993300;"><span style="color: #ff6600;">SystemUser</span> su</span> )** boolean **invoice\_CloseTable( <span style="color: #993300;"><span style="color: #ff6600;">SystemUser</span> su</span> )** boolean **mailroom\_CloseTable( <span style="color: #993300;"><span style="color: #ff6600;">SystemUser</span> su</span> )** boolean **procurement\_CloseTable( SystemUser su )** </span>Nachdem alle Mappen auf Eskalation geprüft wurden muss bei allen Dateien sowohl die HTML-Tabelle als auch der "body" und der "html" Tag geschlossen werden. Ggf. kann noch ein abschließender Text angefügt werden.   
Return: true / false

<span style="color: #000080;">boolean **sendMail( <span style="color: #993300;"><span style="color: #ff6600;">SystemUser</span> su, <span style="color: #ff6600;">String</span> body </span>)** boolean **invoice\_SendMail( <span style="color: #993300;"><span style="color: #ff6600;">SystemUser</span> su, <span style="color: #ff6600;">String</span> body </span>)** boolean **mailroom\_SendMail( <span style="color: #993300;"><span style="color: #ff6600;">SystemUser</span> su, <span style="color: #ff6600;">String</span> body </span>)** boolean **procurement\_SendMail( <span style="color: #993300;"><span style="color: #ff6600;">SystemUser</span> su, <span style="color: #ff6600;">String</span> body </span>)** </span>Zum Schluss muss die Eskalation als Email versendet werden. Die Funktion erhält den Benutzer als SystemUser-Objekt und den gesamten eMail-Text im HTML-Format aus der Datei. Absender und Betreff können über die properties-Sprachdateien definiert werden.  
Return: true / false