Skip to main content

Versteckte User-Exits

Einige Skripte enthalten User-Exit Funktionen und viele dieser Funktionen sind in den verschiedenen "UserExit"-Bibliotheken enthalten. Wenn neue Funktionen hinzukommen müssten diese Bibliotheken allerdings immer manuell um diese Funktionen erweitert werden. Daher werden neue hinzugefügte UserExit Funktionen nur aufgerufen, wenn Sie als Funktion existieren. 

Die Funktionen können bei Bedarf zurin einer UserExit-Bibliothek (zum Beispiel "DEXPRO__UserExit_CustomLib") hinzugefügt werden.

Workflow User-Exits

/** Direkt zu Beginn des Workflows kann über den Parameter "Workflow_InitialDelay" eine Workflow-Verzögerung angesteuert werden.
 * Wenn die Verzögerung angesteuert wird, dann wird vorab dieses User-Exit ausgeführt
 * Die Funktion wird lediglich ausgeführt. Der Rückgabewert wird nicht ausgewertet.
 * @since Invoice 1.0.300
**/
function ue_BeforeInitialDelay(){
  ;
}
/** Zu Beginn des Workflows wird das initiale Skript ausgeführt und im Anschluss werden die Workflow-Regeln ermittelt.
 * In sehr speziellen Fällen kann es gewünscht sein, dass diese Aktionen übersprungen werden.
 * @param {Log} log Logging object
 * @since Invoice 1.0.300
 * @returns {boolean} true/false
**/
function ue_InitAbbreviation(log){
    log.info("["+context.file.getid()+"] start function ue_InitAbbreviation()");
 	return true; 
}
/** Nach Abschluss einer Aktion kann eine Verzögerung angesteuert werden.
 * Dadurch kann der Anwender ggf. schneller weiter arbeiten.
 * @since Invoice 1.0.300
 * @returns {boolean} true/false
**/
function ue_DelayAtWorkflowActionEnd(){
    return true;
}

Workflow-Regel User-Exits

/** Über dieses UserExit kann der Name der Log-Datei angepasst werden.  
 * @param {string} logName Aktueller Dateiname  
 * @param {string} fileId Aktuelle Mappen-ID  
 * @param {string} fileTemplate Mappentyp der aktuellen Mappe  
 * @since Invoice 0.95 
 * @returns {string} Neuer Name für die Log-Datei  
**/
function ue_ChangeRulesLogName(logName, fileId, fileTemplate){
	return logName + "_" + fileId + "_" + fileTemplate;
}
/** Über dieses UserExit kann der Zusatz zum Log-Dateinamen angepasst werden.
  * In der Regel wird ein täglicher oder monatlicher Zeitstempel angefügt, damit die einzelnen Logdateien nicht zu groß werden.
  * Der zurückgegebene String wird einfach zum Dateinamen angefügt, falls es nicht einer dieser speziellen Rückgabewerte ist:
  * "year"/"yyyy"/"y" fügt das Aktuelle Jahr hinzu
  * "month"/"mm"/"m" fügt Jahr und Monat hinzu
  * "date"/"day"/"dd"/"d" fügt Jahr, Monat und Tag hinzu
  * "timestamp"/"ts" fügt Jahr, Monat, Tag und Uhrzeit hinzu 
 hinzu * @param {string} logName Incoming log-name
  * @param {string} fileId Aktuelle Mappen-ID
  * @param {string} fileTemplate Mappentyp der aktuellen Mappe
 Mappe  * @since Invoice 0.95
 95  * @returns {string} new log add
 add  **/
function ue_ChangeRulesLogAdd(ue_ChangeRulesLogAdd(logName, fileId, fileTemplate){
     return "";
}

Logging

/** Über dieses UserExit kann der Log-Pfad generell für alle internen Logs umgestellt werden!
 * @param {string} path Aktueller Pfad.
 * @since Invoice 0.95
 * @return {string} Angepasster Pfad.
**/
function ue_ChangeLogPath(ue_ChangeLogPath(path){
    if( context.scriptName==="abc" ){
        return "E:\\Logs";
    }
    return path;
}

 

/** Die User-Exit-Funktion wird ausgeführt, wenn eine Aktion über die Workflow-Regeln übersprungen wird.
 * @since Invoice 1.0.300
 * @returns {boolean} true / false (führt zu einem Workflow-Fehler)
 **/
function ue_OnSkipAction(){
	return true;
}
/** Das User-Exit wird bei den Workflow-Regeln beim Auslesen des Gentable aufgerufen.
 * Über die Funktion können Sonderzeichen in String-Werten ersetzt werden.
 * Die Funktion wird ausschließlich für String-Werte aufgerufen.
 * @param {string} fieldValue Feldwert
 * @since Invoice 1.0.300
 * @returns {string} Angepasster String-Wert
 **/
function ue_FieldConfParseGentableStringValues(fieldValue){
	return fieldValue.replace(/\u001e/g, "").replace(/\u001c/g, ""); 
}
/** Das UserExit wird am Ende des Skripts "DEXPRO_WF_Rules_BeforeUserAction" aufgerufen.  
* In dem Skript werden vor allem Zugriffsberechtigungen für die ermittelte Gruppe bzw. für den ermittelten Benutzer gesetzt. 
* Über die Workflow-Regeln wurde bereits der Benutzer bzw. die Gruppe zugeordnet. 
* Es handelt sich in dem Workflow-Schritt weder um eine technische Aktion noch wird die Aktion übersprungen! 
* Bei einem Split wird das Skript für jede einzelne Split-Mappe ausgeführt.
* Bei einem Fehler (return false) wird die Gruppe 'WorkflowError' angesteuert. 
* @since Invoice 0.94
* @returns {boolean} true / false. */
function ue_BeforeUserAction(){
return true;
}
/** Am Workflow-Ende kann eine Mappe gelöscht ("delete") oder versiegelt ("seal") werden
 * oder es passiert nichts mit dem Beleg ("" bzw. jeder beliebige andere String).
 * Die Information wird in der WEB-Konfiguration zur Workflow ID angegeben
 * und kann über dieses UserExit manipuliert werden.
 * @param {string} wfEndType Ermittelte Angabe über die WEB-Konfiguration.
 * @since Invoice 0.94
 * @return {string} "delete" / "seal" / "".
 */
function ue_ManipulateWorkflowEndType(wfEndType){
    return wfEndType;
}
/** Das UserExit wird vor der Bearbeitung einer Mappe direkt zu Beginn im Skript "Invoice_DF_BeforeEdit" aufgerufen.
 * Bei einem Fehler muss "context.errorMessage" in der Funktion gesetzt werden!
 * @since Invoice 0.94
 * @return {boolean} true / false.
 */
function ue_BeforeEdit_Start(){
    return true;
}
/** Das UserExit wird vor der Bearbeitung einer Mappe am Ende des Skripts "Invoice_DF_BeforeEdit" aufgerufen.
 * Bei einem Fehler muss "context.errorMessage" in der Funktion gesetzt werden!
 * @since Invoice 0.94
 * @return {boolean} true / false.
 */
function ue_BeforeEdit_End(){
    return true;
}
/** Das UserExit wird vor dem Zurücksenden im Skript "DEXPRO_Action_SendBack" aufgerufen.
 * Bei einem Fehler muss "context.errorMessage" in der Funktion gesetzt werden!
 * @param {string} workflowAction Enthält die ausgewählte Workflow-Aktion.
 * @since Invoice 0.94
 * @return {boolean} true / false.
 */
function ue_BeforeSendBack(workflowAction){
    return true;
}
/**Das UserExit wird beim Zurücksenden auf den ausgehenden Kontrollflüssen 
 * über das Skript "DEXPRO_WF_CheckSendBack" aufgerufen (ab Workflow-Version "WorkflowRules-3"). * Die Funktion greift demnach auch bei projektspezifischen UDA, welche diese Kontrollflüsse verwenden.
 * Bei einem Fehler muss die Fehlermeldung zurückgegeben werden - andernfalls ein Leerstring!
 * @since Invoice 1.0.001
 * @return {string} ""/ error-message.
 */
function ue_OnSendBack(){
    return "";
}
/** Das UserExit wird bei Übernahme einer Mappe aus einem Gruppenkorb aufgerufen.
 * Der Aufruf erfolgt über das Skript "DEXPRO_WF_CheckDataForwardUser". * In dem Skript wird zuvor lediglich der aktuelle Benutzer in das Feld "ActionUser" geschrieben.
 * Bei einem Fehler muss die Fehlermeldung zurückgegeben werden - andernfalls ein Leerstring!
 * @since Invoice 1.0.010
 * @return {string} ""/ error-message.
 */
function ue_CheckDataForwardUser(){
    return "";
}
/** Das UserExit wird beim Zurücklegen in den Gruppenkorb aufgerufen.
 * Der Aufruf erfolgt über das Skript "DEXPRO_WF_CheckDataBackAccessProfile".
 * Bei einem Fehler muss die Fehlermeldung zurückgegeben werden - andernfalls ein Leerstring!
 * @since Invoice 1.0.010
 * @return {string} ""/ error-message.
 */
function ue_CheckDataBackAccessProfile(){
    return "";
}
/** Das UserExit wird direkt nach der Ermittlung der Workflow-Regeln aufgerufen.
 * Der Aufruf erfolgt über das Skript "DEXPRO_WF_Rules_DeterminationUser".
* Über die Funktion können die ermittelten Regeln manipuliert werden. * Der String-Wert 'rulesJSONStr' wird im Anschluss in das Feld 'RulesJSON' geschrieben.
 * @param {string} rulesJSONStr Das Ergebnis der Workflow-Regeln als String.
 * @param {string}workflowid Aktuelle Workflow ID.
 * @param {string} actionid Aktuelle Aktion ID.
 * @param {string} techAction Angabe, ob es sich um eine technische Aktion handelt.
 * @since Invoice 0.94
 * @return {string} Angepasste Workflow-Regeln als JSON-string.
 **/
function ue_CheckWorkflowRules(rulesJSONStr, workflowid, actionid, techAction){
    var rulesObj = JSON.parse(rulesJSONStr);
    /** An dieser Stelle kann das Objekt manipuliert werden.... **/
    return JSON.stringify(rulesObj);
}
/** Nach einer Weiterleitung über eine benutzerdefinierte Aktion muss die Anzeige nach der Weiterleitung über das Skript erfolgen.
 * Die Standard-Navigationen wie "Mappe beibehalten" oder "Nächste Mappe" oder "Zum Eingangsordner" wurden über das
 * Objekt "NavigationReturnObjekt" umgesetzt. Die Ergebnisse können im Nachgang manipuliert werden.
 * Hierzu kann das Objekt via 'prototype' um die nachfolgende Funktion erweitert werden.
 * Am Objekt können die Werte "ReturnType" und "ReturnVal" wie im unteren Beispiel neu ermittelt werden.
 * @property {string}ReturnType Wird als context.returnType gesetzt
 * @property {*}ReturnType Wird als return-Wert verwendet
 * @property {SystemUser}SystemUser Der ausführende Benutzer als SystemUser-Objekt
 * @property {DocFile}DocFile Die aktuelle Mappe
 * @property {string}Navigation Enthält die Navigation ("keepfile" / "next" / ...)
 * @property {string}ActionID Enthält die Aktions ID der Mappe (vor der Weiterleitung)
 * @property {string}WorkflowID Enthält die Workflow ID der Mappe (vor der Weiterleitung)
 * @property {string}ForwardAction Info zur Weiterleitung ("FinishAction" / "SendBack" / "Forward" / ...)
 * @since Invoice 1.0.010
 */
NavigationReturnObject.prototype.ue_NavigationManipulation = function(){
 this.Log += "[INFO] function ue_NavigationManipulation()\n";
if( this.SystemUser instanceof SystemUser ){
this.Log += "[INFO] valid system user\n";
var lastUsedFolder = this.SystemUser.getPrivateFolder("lastused");
if( lastUsedFolder ){
            /* Dieses Beispiel öffnet den privaten Ordner 'Zuletzt benutzt' und zeigt die aktuelle Mappe an. */
this.ReturnType = "multipleAction";
this.ReturnVal  = JSON.stringify( [
{ returnType : 'showFolder', returnValue : lastUsedFolder.id },
{ returnType : 'showFile', returnValue : this.DocFile.getid() }
            ] );
        }
else{
this.Log += "[ERROR] invalid private folder(lastused)\n";
}
    }
else{
this.Log += "[ERROR] invalid system user\n";
    }
util.log(this.Log);
}