Zum Hauptinhalt springen

Upgrade auf 25.0.0

gefahr

Unbedingt die aktuellen Installationsvoraussetzungen vorab prüfen!

tipp

Diese Anleitung berücksichtigt immer nur den Sprung von der vorhergehenden Version zu der gerade beschriebenen Version. Bei Upgrades über mehrere Versionen hinweg müssen alle Änderungen der Zwischenversionen ebenfalls beachtet werden! Siehe genereller Ablauf von Upgrades.

Breaking Changes

tipp

Für eine genauere Erklärung der neuen Logik im Bestellungsfreigabeprozess und eine Übersich über die verfügbaren Callbacks, siehe auch den Eintrag zur Zahlungsfreigabe in OUSP Invoice.

  • Nach der fachlichen Prüfung einer Bestellung wird im Workflow nun nicht mehr das Skript ou.spc.ptpREQ.wokflow.decision.checkAfterRelease aufgerufen, sondern das neue Skript ou.spc.ptpREQ.wokflow.decision.checkAfterVerify
  • Die Funktionen aus ou.spc.ptpREQ.lib.verificationSteps dürfen nicht mehr verwendet werden. Um einen Verifikationsschritt zu erzeugen, soll nun ou.sp.ptpINV.lib.gadgets.statusMonitor eingesetzt werden. Beispiel:
// Bestehende Statusmeldungen
const model = StatusMonitorData.parse(docFile.verifications || "[]");
// Statusmeldungen neu anlegen
model.add("ok", "Fachlich geprüft", [context.currentUser, context.getAutoText("currentTimestamp")]);
docFile.setFieldValue("verifications", model.asJSON());
docFile.sync();

Was wurde gemacht ?

Zusammenfassung

  • Freigabeprozess von Bestellungen wurde implementiert analog zur Zahlungsfreigabe in Invoice REQ-17
  • Ein Parameter, um die minimale Anzahl der benötigten Freigeber im Freigabeprozess festzulegen, wurde hinzugefügt INV-556
  • Neue benutzerdefinierte Aktion "Bemerkung hinzufügen" am Mappentyp ptpRequest INV-557
  • Freigabeprozess: Der Freigabepfad wird nun schon einen Schritt früher im Workflow konstruiert. D.h. bereits der fachliche Prüfer kann den Pfad einsehen INV-561
  • Einige Funktionen des Skripts ou.spc.ptpREQ.lib.release.list wurden in ou.spc.ptpREQ.lib.release.list.functions ausgelagert, sodass das Skript ou.tmpl.ptpREQ.callbacks.release diese Funktionen importieren kann, ohne einen Import-Loop zu erzeugen. INV-579
  • Request verwendet ab jetzt den neuen Webworkflow REQ-23
    • Für die Migration des Visioworkflows siehe Otris-Doku
  • Am Mappentyp ptpRequest gibt es nun ein neues Feld Bestellgrund REQ-28
  • Im Dialogfenster "Prüfung Person" werden nun alle Benutzer angezeigt, die das Zugriffsprofil ptpRequestUser haben REQ-29
  • Ist der fachliche Prüfer dieselbe Person wie der Freigeber, wird nun der Zeitstempel der fachlichen Prüfung nicht mehr vom Zeitstempel der Freigabe überschrieben REQ-38
  • Wird beim Erstellen der Freigabeliste im onAfterSave-Skript ein Fehler geworfen, wird dieser dem User direkt angezeigt REQ-34
  • Ist das Feld "Beantragte Summe €" nicht gesetzt und existiert noch keine Freigabeliste, wird im Cockpit ein Hinweis angezeigt, dass die Freigabeliste erst beim Speichern der Mappe erstellt werden kann, wenn auch die beantragte Summe gesetzt ist REQ-37

Verschiedene Bugfixes und Verbesserungen

  • Am Mappentyp ptpRequest wurde unter 'Zulässige Workflows' der Workflow ptpRequest hinzugefügt INV-589

Manuell auszuführende Schritte

Workflow-Änderungen

  • Dem Guard "Zur Freigabe" (ControlFlow_11) die Eigenschaft backgroundColor mit dem Wert #4caf50; border: none; color: #fff; hinzugefügt (REQ-17)
  • Dem Guard "Freigegeben" (ControlFlow_194) das Skript ou.spc.ptpREQ.workflow.guard.released hinzugefügt (REQ-17)
  • Dem Guard "Freigegeben" (ControlFlow_194) die Eigenschaft backgroundColor mit dem Wert #4caf50; border: none; color: #fff; hinzugefügt (REQ-17)
  • Dem Guard "Abgelehnt" (ControlFlow_196) die Eigenschaft backgroundColor mit dem Wert #f44336; border: none; color: #fff; hinzugefügt (REQ-17)
  • Dem Guard "Abgelehnt" (ControlFlow_258) die Eigenschaft backgroundColor mit dem Wert #f44336; border: none; color: #fff; hinzugefügt (REQ-17)
  • Der Decision "Freigabegrenze nicht erreicht" das Skript ou.spc.ptpREQ.workflow.decision.checkAfterVerify hinzugefügt (REQ-17)
  • Den Knoten "DecisionMerge_229" durch einen neuen Signalausgang vom Typ "Javascript" mit dem Label "Freigabeliste erstellen" und dem verknüpften Skript "ou.spc.ptpREQ.workflow.sendsignal.createReleaseList" ersetzen (INV-561)
  • Der Pfeil "Zur Nachbearbeitung / Rückfrage" (ControlFlow_260) ausgehend von der Aktion "Prüfung und Freigabe" geht nicht mehr direkt zur Aktion "Prüfung der Anforderung / Bestellung" sondern zum neu erstellten Signalausgang "Freigabeliste erstellen" (INV-561)
  • Dem "ControlFlow_247" unter "Feldbelegung" die Eigenschaft mit dem Namen "globalState" entfernt (INV-561)
  • Den Pfeilen "ControlFlow_228", "ControlFlow_234" sowie "ControlFlow_255" jeweils unter "Feldbelegung" die Eigenschaft "globalState" mit dem Wert 30 hinzugefügt (INV-561)

Mappentypen

  • Am Mappentyp ptpRequest muss - sofern noch nicht vorhanden - unter dem Reiter 'Zulässige Workflows' der Workflow ptpRequest hinzugefügt werden.

Scripting


  • Das Skript ou.sp.ptpREQ.lib.gadgets.verification.ts kann gelöscht werden, die Funktionalität wurde nach ou.spc.ptpINV.lib.gadgets.verification.ts verschoben INV-559

Folgende Funktionen wurden vom Skript ou.spc.ptpREQ.lib.release.list in das Skript ou.spc.ptpREQ.lib.release.list.functions ausgelagert:

  • validateCreateReleaseListOptions
  • getCurrentRequiredReleaseUser
  • ensureUserWithSufficentReleaseRoleExist
  • getCurrentReleaseEntry
  • getCurrentVerificationEntry
  • markCurrentVerificationUserAsReleased
  • markAllAsInactive
  • ensureNextReleaseUserIsRequiredInCaseOfSubstitute
  • loginNameToFullName
  • getNextReleaseUserSubstitute
  • ensureMinNumberOfReleaseUsers

Existiert das Skript ou.cust.ptpREQ.lib.release.list, so muss das Skript ou.cust.ptpREQ.lib.release.list.functions erstellt werden. In diesem Skript müssen dann alle Funktionen mit den gleichnamigen Funktionen aus ou.cust.ptpREQ.lib.release.list überschrieben werden.

Zudem muss in allen cust-Skripten, die eine der oben genannten Funktionen verwenden, der Import von ou.spc.ptpREQ.lib.release.list durch ou.spc.ptpREQ.lib.release.list.functions ersetzt werden – dies betrifft folgende Skripte aus dem Standard und ggf. auch eigene cust-Skripte:

  • ou.spc.ptpREQ.filetype.action.onAfterSave
  • ou.spc.ptpREQ.workflow.decision.checkAfterVerify
  • ou.spc.ptpREQ.workflow.guard.toRelease

Um das neue Feld Bestellgrund im Cockpit anzuzeigen, muss in diesem Skript dem Objekt options.requestInformations ein Eintrag requestReason hinzugefügt werden.

    ...
requestInformations: {
/* Dieses Objekt hinzufügen */
requestReason: {
label: docFile.getFieldAutoText("requestReason", "label"),
text: docFile.requestReason
},
/* Ende Objekt */
requester: createFieldEntry("requester"),
requestedAmount: {
label: docFile.getFieldAutoText("requestedAmount", "label"),
text: docFile.requestedAmount ? "".concat(docFile.getFieldAutoText("requestedAmount"), " €") : ""
},
recipient: createFieldEntry("recipient"),
...

Im Callback-Skript ou.tmpl.ptpREQ.callbacks.events gibt es nun zwei neue Callbacks: beforeGetEnumvalVerificationUser und afterGetEnumvalVerificationUser, die beide im Skript ou.sp.ptpREQ.enumval.verificationUser aufgerufen werden. Falls es ein Skript ou.cust.ptpREQ.callbacks.events gibt, müssen diese Funktionen aus dem tmpl-Skript dort hinzugefügt werden.


Das Skriptparameter verificationUser des Skripts ou.spc.ptpREQ.action.guard.toNextVerificationUser hat nun den Wert runscript:ou.sp.ptpREQ.enumval.verificationUser im Feld Aufzählungswerte. Falls also ein gleichnamiges Cust-Skript existiert, muss dies ebenfalls dementsprechend angepasst werden. Gadget_ou.spc.ptpREQ.filetype.field.cover


ou.spc.ptpREQ.lib.release.list

In der Funktion markCurrentAslReleased muss eine If-Bedingung angepasst werden, sodass der Eintrag des fachlichen Prüfers in der Freigabeliste nicht vom Eintrag des Freigebers überschrieben wird.

Vorher:

  var newReleaseList = releaseList.map(function (entry, index) {
var _a, _b;
// if the entry is the current release entry
var isCurrent = entry === current;
// the entry is assigned to the executing release user
var isAssignedToExecutingUser = entry.assignedTo === executingReleaseUser;

/* Diese If-Bedingung muss erweitert werden */
if (!entry.active) {
/* Ende der If-Bedingung */

return tslib_1.__assign({}, entry);
}
if (!isCurrent && !isAssignedToExecutingUser) {
return tslib_1.__assign({}, entry);
}

Nachher:

  var newReleaseList = releaseList.map(function (entry, index) {
var _a, _b;
// if the entry is the current release entry
var isCurrent = entry === current;
// the entry is assigned to the executing release user
var isAssignedToExecutingUser = entry.assignedTo === executingReleaseUser;

/* Die neue If-Bedingung */
if (!entry.active || entry.isVerification) {
/* Ende der If-Bedingung */

return tslib_1.__assign({}, entry);
}
if (!isCurrent && !isAssignedToExecutingUser) {
return tslib_1.__assign({}, entry);
}

ou.spc.ptpREQ.filetype.action.onAfterSave

Der catch-Block muss mit folgendem Code ersetzt werden, sodass ein Fehler direkt an den User weitergegeben wird:

    logger.error("Error creating release list: ".concat(error.message));
context.errorMessage = "Fehler beim Erstellen der Freigabeliste: ".concat(error.message);
return -1;

ou.spc.ptpREQ.workflow.sendsignal.createReleaseList

Im catch-Block sollte folgende Zeile verändert werden, sodass auch der spezifische Fehler in den Mappenstatus geschrieben wird:

  } catch (error) {
logger.error("Skipping release list creation due to error: ".concat(error));
/* Diese Zeile muss angepasst werden */
docFile.insertStatusEntry("Freigabeliste erstellen fehlgeschlagen", "Es konnte keine Freigabeliste erstellt werden: ".concat(error.message));
/* Ende der Zeile */
}

Gadget_ou.spc.ptpREQ.filetype.field.cover

Zuerst muss folgender Import hinzugefügt werden:

var ou_spc_ptpREQ_lib_release_list_functions_1 = require("ou.spc.ptpREQ.lib.release.list.functions");

Anschließend muss, an der Stelle bevor die Variable options definiert wird, der unten mit einem Kommentar markierte Codeblock eingefügt werden.

    var entries = JSON.parse(docFile.verifications || "[]");
var verifications = CockpitVerificationGadgetBuilder.getOptions(entries, ou_spc_ptpREQ_settings_1.settings.maxNumberOfVerificationRows);
/* Diesen Codeblock hinzufügen */
if (["10", "11", "30"].includes(docFile.globalState) && !(0, ou_spc_ptpREQ_lib_release_list_functions_1.getCurrentVerificationEntry)(entries)) {
verifications.rows = [];
verifications.emptyMessage = context.getFromSystemTable("FILETYPE_PTPREQUEST_COVER_INFO_NO_REQUESTED_AMOUNT");
}
/* Ende des Codeblocks */
var options = {
id: id,
title: ou_sp_ptpREQ_lib_gadgets_summary_1.SummaryGadget.getHeader(docFile),
createdAt: docFile.getAutoText("createdAt"),