22.2.0 - eInvoice Hotfix
Problem, welches mit diesem Hotfix gelöst wird
Der XML-Handling-Fehler für eInvoice wird durch einen Patch behoben, der die neuen Konfigurationen und Scripte integriert. Der Patch behebt auch die Probleme bei der Archivierung von E-Mails und den Verarbeitungsfehlern der Postman-Mailboxen bei Verwendung von Insiders. Es wird empfohlen, vorerst auf XML-Eingangsrechnungen zu verzichten, bis alle Bugs in Insiders behoben sind.
Manuell auszuführende Schritte
Voraussetzungen
- OUSP Invoice Version: Es wird die Version 22.2.0 von OUSP Invoice vorausgesetzt.
Der Patch könnte auch für Versionen 22.x.x funktionieren, aber er wurde ausschließlich auf Basis der Version 22.2.0 getestet.
- Library Version: Die Version 22.0.1 der Library ist notwendig.
- OUSP Postman Version: Es muss die Version 23.0.5-eInvoice verwendet werden.
- Insiders-Connector Version: Falls Insiders verwendet wird, muss der Insiders-Connector Version 21.2.0 installiert sein.
Installation und Durchführung des Patches
-
XML-Backup der Portalscripte anfertigen
-
JSLogLevel auf DEBUG stellen und übernehmen (via Toolbox)
-
Alle für die folgenden Schritte benötigten Inhalte finden sich im ZIP → ZIP-Datei
-
Je nach verwendetem Datenbanksystem muss zunächst die mssql.sql (Microsoft SQL-Server) bzw. die mariadb.sql (MariaDB) ausgeführt werden.
-
Das
ptpInvoice_de.properties-File inlocalesmuss angepasst werden. Am Ende des Blockes#BelegdatenFolgendes hinzufügen:filetype.ptpInvoice.routingId=Leitweg-ID
filetype.ptpInvoice.eInvoiceType=E-Invoice-Typ -
Folgende bestehende Portalscripte müssen überschrieben werden (siehe Inhalte im ZIP)
bei Invoice-Versionen mit verschlüsselten Scripten müssen die Scripte gelöscht und neu angelegt werden. BITTE UNBEDINGT AUF DIE KATEGORIE, SCRIPTPARAMETER, JOBEINSTELLUNGEN UND EIGENSCHAFTEN ACHTEN und nach der Neuanlage wieder korrekt befüllendas XML-Backup kann hier zur Not weiterhelfenBei Invoice < 22.2.0 existieren einige Portalscripte noch als scriptlibs. Dabei müssen diese Files umbenannt werden.-
Beispiel
ou.sp.ptpINV.lib→ diese liegt dann inscriptlibs\ou\sp\ptpINV\lib#.jslib#.jsinlibOld#.jsumbenennenou.sp.ptpINV.libin das Verzeichnis kopieren und inlib.jsumbenennen - OHNE#im Namen
-
ou.sp.ptpINV.lib(evtl. scriptlib -scriptlibs\ou\sp\ptpINV\lib#.js) -
ou.sp.ptpINV.lib.xtract(evtl. scriptlib -scriptlibs\ou\sp\ptpINV\lib\xtract#.js) -
ou.sp.ptpINV.lib.xtract.insiders(evtl. scriptlib -scriptlibs\ou\sp\ptpINV\lib\xtract\insiders#.js) -
ou.sp.ptpINV.job.exportToExtract -
ou.sp.ptpINV.job.importXtractedData -
ou.sp.ptpINV.workflow.guard.restartWorkflow -
ou.sp.ptpINV.workflow.sendsignal.default
-
-
Folgende
cust-Portalscripte müssen angepasst werdenou.cust.ptpINV.filetype.action.manStartWF→ Hier muss derif(startXtract)-Block wie folgt erweitert werden
Vorher:
if (startXtract) {
logger.info("Reset xtract state for " + docFile.getid());
docFile.xtractCode = "";
docFile.xtractState = "new";
docFile.xtractJson = "";
docFile.xtractProcessingId = "";
docFile.xtractFileId = "";
docFile.verification = "";
docFile.processStatusCodes = JSON.stringify([]);
docFile.sync();
}Nachher:
if (startXtract) {
logger.info("Reset xtract state for " + docFile.getid());
docFile.xtractCode = "";
docFile.xtractState = "new";
docFile.xtractJson = "";
docFile.xtractProcessingId = "";
docFile.xtractFileId = "";
docFile.verification = "";
docFile.eInvoiceType = "";
docFile.routingID = "";
docFile.processStatusCodes = JSON.stringify([]);
// check if file has pdf and xml documents and if the name is same, then delete the pdf
const attachmentsRegister = docFile.getRegisterByName("documents");
const attachments = attachmentsRegister.getDocuments();
if (attachments.size() > 1) {
const lib = require("ou.sp.ptpINV.lib");
lib.deletePdfDocumentIfXInvoice(attachmentsRegister, attachments);
}
docFile.sync();
}ou.cust.ptpINV.settings.insiders→ Hier muss in deninsidersConnectorSettingsuntertaskNamesein neuer EintraggetFile: "getFile"hinzugefügt werden:
var insidersConnectorSettings = {
debug: false,
...
taskNames: {
create: "create",
createWithVerify: "createWithVerify",
createWithVerifyJSON: "createWithVerifyJSON",
getData: "getData",
getFile: "getFile",
getInfo: "getInfo",
delete: "delete",
importAndLock: "startProcessing",
unlock: "finishProcessing",
},
}; -
Bei Verwendung von Insiders: Es müssen wie folgt beschrieben zwei bestehende Config-Dateien angepasst und eine weitere Config-Datei neu erstellt werden.
- Die bestehende Datei
D:\<EASY|otris>\OUC-Tools\InsidersConnector\config\api.jsonmuss untertasksden Eintrag"getFile": "tasks/file"enthalten.
{
"functions": {
"requestToken": "accounts/authentication/requestToken",
"transaction": "subsystems/transactions",
"tasks": {
"analyse": "tasks/analyse",
"delete": "tasks",
"create": "tasks/create",
"getData": "tasks/data",
"getFile": "tasks/file",
"getInfo": "tasks/info",
"learn": "tasks/learn",
"startProcessing": "tasks/lock",
"finishProcessing": "tasks/lock"
}
}
}- Die bestehende Datei
D:\<EASY|otris>\OUC-Tools\InsidersConnector\config\tasks\createWithVerifyJSON.jsonmuss unterwriter.createden Eintrag"pdfConversionMode": "Always"enthalten.
bitte erst auf Produktivsystemen verwenden, wenn der Produktivmandant bei Insiders auch auf den eInvoice-Stand geupdated wurde{
"reader": {
"source": "file"
},
"transform": {
"file": {
"asJSON": true
}
},
"writer": {
"target": "create",
"flags": {},
"attributes": [
{
"name": "$DateOfReceipt",
"value": "${currentDate}"
}
],
"create": {
"subsystem": "InvoiceTables",
"category": "InvoiceWithVerification",
"pdfConversionMode": "Always"
}
}
}- Im Verzeichnis
D:\<EASY|otris>\OUC-Tools\InsidersConnector\config\tasksmuss - sofern noch nicht vorhanden - eine neue DateigetFile.jsonmit folgendem Inhalt angelegt werden:
{
"reader": {
"source": "json"
},
"writer": {
"target": "getFile"
}
} - Die bestehende Datei
-
Das Portalscript
ou.sp.ptpINV.patchEInvoicemuss angelegt werden (im ZIP enthalten) -
Der Patch (
ou.sp.ptpINV.patchEInvoice) hat eine modifizierbare Einstellung:- MODIFY_EXISTING_FILES (boolean, default
true) → wendet beitruedie Änderungen (Hinzufügen zwei neuer MappenfelderroutingIdundeInvoiceType) auf existierendeptpInvoice-Mappen an
:::Warning Die Einstellung sollte nur auf
falsegesetzt werden, wenn sich keineptpInvoice-Mappenin einem Status < 20 befinden, da diese Mappen ansonsten auf Fehler laufen werden ::: - MODIFY_EXISTING_FILES (boolean, default
-
Das Script
ou.sp.ptpINV.patchEInvoicemuss im DocumentsManager ausgeführt werdenBei länger laufenden Scripten in VSCode kann es sonst zu Verbindungsabbrüchen kommen und der Output geht verlorenKommt der Fehler am Ende 'Version konnte nicht gesetzt werden”, fehlt dem aktuellen Documents Manager Benutzer die Berechtigung, dann das Script einfach z.B. mit oucadmin ausführen
Nachbereitung
- Nach Ausführung von
ou.sp.ptpINV.patchEInvoicedie Ausgabe des Scripts und auch das Server Log auf Fehler prüfen - Das Portalscript
ou.sp.ptpINV.patchEInvoicekann nun wieder entfernt werden - Das Kundensystem muss nun mit dem Asset-Tag “OUSP Invoice 22.2.0-eInvoice” versehen werden
- JSLogLevel ggf. wieder erhöhen
- System testen (Invoice-Prozess durchspielen)
- Sofern alles OK → ggf. die
<name>Old#.js-Dateien in den Scriptlibs löschen