Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core active folder (Aktiver Ordner)
Um einen Anhang aus einer E-Mail zu kopieren und erneut mit der E-Mail zu verknüpfen, benötigen Sie einen Aktiven Ordner des Typs Skript ausführen. Ebenso benötigen Sie ein Skript, das der Aktive Ordner aufruft.
Der Ordner im Feld Ordner ist derjenige, in dem sich die E-Mails befinden, die das System verarbeitet. Verwenden Sie als Skript etwa das unten aufgeführte Beispielskript.
Hinterlegen Sie zusätzlich folgende Parameter.
Wahlmöglichkeit zwischen relation (Verknüpfung zur E-Mail hergestellt) und Metadatum mit der ID der E-Mail (etwa ~ag_orig_mail).
Dient der Nachvollziehbarkeit, woher der Anhang stammt.
Markiert ein Metadatum mit der Angabe, ob das System das Objekt bereits abgelegt hat.
Beispiel einer Eingabe
doneFlag: ac_mail_already_processed
Wert des Metadatums nach erfolgreichem Ablegen
ac_mail_already_processed: true
Definiert den Ordner, in den das System die E-Mails nach Verarbeitung archiviert.
Definiert einen RegEx-Ausdruck, der beschreibt, wie der Dateiname des Anhanges aussieht, damit das System den Anhang verwendet. Bei Rechnungen sind das in der Regel PDF-Dateien.
Beispiel einer Eingabe
regex: [\.]pdf$
Interne Schreibweise durch das System
/[\.]pdf$/i
Definiert den Zielordner, in den das System die Anhänge legt.
Steuert, ob das System ein angehängtes ZIP-Archiv entpackt.
Beispiel einer Eingabe
unzip: true
Der Aktive Ordner ruft folgendes Skript auf (Beispiel):
/* global folder, parameters */ let transaction = require('common/transaction'); let objects = require('common/objects'); let beans = require('common/beans'); let metadata = require('common/metadata'); let PackageInputStream = Packages.agorum.roi.common.utils.Packager.PackageInputStream; let Charset = java.nio.charset.Charset; /** // Test, damit kann das Skript ohne den Aktiven Ordner getestet werden kann // Sie müssen die Parameter auf Ihr System einstellen let parameters = { regex: '[\.](pdf|DOC|docx)$', target: '/agorum/roi/Files/Demo/Verwaltung/DocForm/Eingang', mailTarget: '/agorum/roi/Files/Demo/Verwaltung/Mailarchive', attach: 'relation', unzip: 'true', doneFlag: 'ac_mail_already_processed' }; let folder = objects.find('/agorum/roi/Files/Demo/Verwaltung/Rechnungen'); /**/ let target = objects.find(parameters.target); let mailTarget = objects.find(parameters.mailTarget); let unzip = (parameters.unzip || '').toLowerCase() === 'true'; let regex = parameters.regex || '.*'; let doneFlag = parameters.doneFlag; if (!doneFlag) throw new Error('Parameter doneFlag is mandatory'); let forEachEntry = (source, is, callback) => { let pis = new PackageInputStream(is, Charset.forName('Cp850')); try { let entry; while (!!(entry = pis.nextEntry)) { if (callback(source, entry.name, entry.isDirectory() ? null : pis) === false) { // stop iteration if callback returns false return false; } } } finally { //pis.closePackage(); } }; let handle = (source, name, stream, object) => { if (!stream && !object) { // skip folders return; } name = name.split('/').pop(); if (unzip && /[\.]zip$/i.test(name)) { forEachEntry(source, object ? object.contentStream : stream, handle); } else if (RegExp(regex, 'i').test(name)) { // no regular expression or regular expression matches the name let created; if (object) { // copy attachments directly created = objects.copy(object, target); } else { // extract from zip created = objects.create('file', { name: name, target: target, content: stream }); } // add relation back to the original mail if (parameters.attach === 'relation') { created.setAttachments([ source ]); } else if (parameters.attach) { beans.set(created, parameters.attach, source.ID); } } }; function unwrap(object) { (object.mailAttachments || []) .forEach(attachment => handle(object, attachment.name, null, attachment)); // move mail objects.remove(object); objects.add(object, mailTarget); // Set marker to ignore on next run, only inpath search is not enough, it is maybe to slow let md = {}; md[doneFlag] = 'true'; metadata(md).save(object); } objects .query('inpath:' + folder.ID + ' ancestors:mailobject NOT ismailattachment:true NOT ' + doneFlag + ':true') .forEach(item => transaction(() => unwrap(item)));