Zum Hauptinhalt springen

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.
tipp

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

  1. XML-Backup der Portalscripte anfertigen

  2. JSLogLevel auf DEBUG stellen und übernehmen (via Toolbox)

  3. Alle für die folgenden Schritte benötigten Inhalte finden sich im ZIP → ZIP-Datei

  4. Je nach verwendetem Datenbanksystem muss zunächst die mssql.sql (Microsoft SQL-Server) bzw. die mariadb.sql (MariaDB) ausgeführt werden.

  5. Das ptpInvoice_de.properties-File in locales muss angepasst werden. Am Ende des Blockes #Belegdaten Folgendes hinzufügen:

    filetype.ptpInvoice.routingId=Leitweg-ID
    filetype.ptpInvoice.eInvoiceType=E-Invoice-Typ
  6. 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üllen
    das XML-Backup kann hier zur Not weiterhelfen
    Bei 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 in scriptlibs\ou\sp\ptpINV\lib#.js
      • lib#.js in libOld#.js umbenennen
      • ou.sp.ptpINV.lib in das Verzeichnis kopieren und in lib.js umbenennen - 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

  7. Folgende cust-Portalscripte müssen angepasst werden

    • ou.cust.ptpINV.filetype.action.manStartWF → Hier muss der if(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 den insidersConnectorSettings unter taskNames ein neuer Eintrag getFile: "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",
    },
    };
  8. 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.json muss unter tasks den 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.json muss unter writer.create den 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\tasks muss - sofern noch nicht vorhanden - eine neue Datei getFile.json mit folgendem Inhalt angelegt werden:
    {
    "reader": {
    "source": "json"
    },
    "writer": {
    "target": "getFile"
    }
    }
  9. Das Portalscript ou.sp.ptpINV.patchEInvoice muss angelegt werden (im ZIP enthalten)

  10. Der Patch (ou.sp.ptpINV.patchEInvoice) hat eine modifizierbare Einstellung:

    • MODIFY_EXISTING_FILES (boolean, default true) → wendet bei true die Änderungen (Hinzufügen zwei neuer Mappenfelder routingId und eInvoiceType) auf existierende ptpInvoice-Mappen an

    :::Warning Die Einstellung sollte nur auf false gesetzt werden, wenn sich keine ptpInvoice-Mappen in einem Status < 20 befinden, da diese Mappen ansonsten auf Fehler laufen werden :::

  11. Das Script ou.sp.ptpINV.patchEInvoice muss im DocumentsManager ausgeführt werden

    Bei länger laufenden Scripten in VSCode kann es sonst zu Verbindungsabbrüchen kommen und der Output geht verloren
    Kommt 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

  1. Nach Ausführung von ou.sp.ptpINV.patchEInvoice die Ausgabe des Scripts und auch das Server Log auf Fehler prüfen
  2. Das Portalscript ou.sp.ptpINV.patchEInvoice kann nun wieder entfernt werden
  3. Das Kundensystem muss nun mit dem Asset-Tag “OUSP Invoice 22.2.0-eInvoice” versehen werden
wenn Invoice nicht in der v22.2.0 installiert war, bitte das alte Tag drinlassen und das -eInvoice-Tag zusätzlich setzen!
  1. JSLogLevel ggf. wieder erhöhen
  2. System testen (Invoice-Prozess durchspielen)
  3. Sofern alles OK → ggf. die <name>Old#.js-Dateien in den Scriptlibs löschen