Sie können die Funktion „Überwachungsordner“ in AEM aktivieren, indem Sie einen Workflow und einen Starter für den Workflow erstellen.
Weitere Informationen zum Erstellen von Workflows finden Sie unter Workflow Dokumentation.
Weitere Informationen zum Erstellen von Startern finden Sie in der Starter-Dokumentation.
Im angehängten Beispiel für einen Workflow und einen Starter werden eine Vorlage/Daten mithilfe der Methode centralMerge von OutputCentralService zusammengeführt. Außerdem wird das generierte PCL-Dokument mithilfe der API sendToPrinter an einen Drucker gesendet.
-
Herunterladen
Der Starter ist so konfiguriert, dass er Dateien auswählt, die Sie am Speicherort /content/fd/cmb/samples/MergeAndPrint/watchfolder ablegen.
Legen Sie eine Datendatei (.dat) in einen Überwachungsordner, um den Workflow zum Rendern und Drucken von PCL-Dateien auszulösen.
In diesem Beispielanwendungsfall erstellen Sie einen Überwachungsordner und kopieren eine Datendatei (.dat) in den Ordner. Diese Datendatei wird mit einer Vorlage (.mdf) zusammengeführt und die generierte PCL-Datei (.pcl) wird mithilfe der Druck-API des SendToPrinter-Dienstes zum Drucken an den Drucker gesendet.
Hinweis:
Lesen Sie diesen Abschnitt, wenn Sie einen AEM-Workflow und -Starter zur Verwendung mit dem CMB-Dienst neu erstellen möchten. Überspringen Sie diesen Abschnitt, wenn Sie nur das Paket adobe-aemfd-cmb-sample-pkg verwenden möchten, da die hier behandelten Angaben dort bereits implementiert sind.
In diesem Beispiel verwenden Sie das ECMAScript, um einen Workflow-Prozessschritt zu definieren, der folgende Vorgänge ausführt:
- Lesen und Zusammenführen von .mdf- und .dat-Dateien aus der Nutzlast zur Generierung eines PCL-Dokuments mithilfe des Vorgangs centralMerge des CBM-Dienstes.
- Senden des PCL-Dokuments an einen Drucker mithilfe der Druck-API des SendToPrinter-Dienstes
Melden Sie sich beim CRX-Repository an, erstellen Sie die Datei /etc/workflow/scripts/cmb/cmb-mergeandprint-sample.ecma und fügen Sie den folgenden Code ein:
/** * Sample Workflow Step to demo OutputCentralService and sendToPrinter functionality of SendToPrinterService * * Process Arguments * 1. inTemplate ( Absolute template file path e.g. "/content/cmb/excomma.mdf") * 2. printServer ( print server name e.g. \\mytestprinter) * 3. printerName ( name of the printer) * 4. printerProtocol (protocol to use to print cifs,directip etc.) * */ // Begin var logger = Packages.org.slf4j.LoggerFactory.getLogger("cmb-mergeandprint-sample.ecma"); /* * Reference to OutputCentralService, used to invoke centralMerge operation */ var centralMigrationBridgeService = sling.getService(Packages.com.adobe.fd.cmb.api.OutputCentralService); /** * Reference to SendToPrinterService, used to invoke sendToPrinter API */ var stpService = sling.getService(Packages.com.adobe.fd.stp.api.SendToPrinterService); /* * workflow payload and path to it */ var payload = graniteWorkItem.getWorkflowData().getPayload(); var payload_path = payload.toString(); /* * Template file Document */ var inTemplateDocument = readDocument(args[0]); /* * data file argument */ var inDataDocument = readDocument(payload_path); /* * printServer argument */ var printServer = args[1]; /* * printerName argument */ var printerName = args[2]; /* * printerProtocol */ var printerProtocol = args[3]; /* * authentication info */ var userName = args[4]; var password = args[5]; var domain = args[6]; /* * Generate PCL document by merging input data with template file using central migration bridge service */ var centralResult = centralMigrationBridgeService.centralMerge(inTemplateDocument,inDataDocument,null, null, null, null); var pclDocument = centralResult.getResultDoc(); logger.info("Generated PCL Document : "+pclDocument); /* * send pcl document to printer for printing using SendToPrinter services's print API */ // create printer spec for the printer var printerSpec = new Packages.com.adobe.fd.stp.api.PrinterSpec(); printerSpec.setPrintServer(printServer); printerSpec.setPrinterName(printerName); setPrinterProtocol(printerSpec, printerProtocol); if(userName) { printerSpec.setUsername(userName); } if(password){ printerSpec.setPassword(password); } if(domain){ printerSpec.setDomain(domain); } // call service now stpService.print(pclDocument,printerSpec); logger.info("SuccessFully Printed pclDocument to "+printServer+","+printerName); // END of Main Script /** ######################################### * Utility methods * ################################################ */ /** * reads the nt:file node's jcr:content property and creates a document object from it. */ function readDocument(path_str){ var jcrsession = graniteWorkflowSession.adaptTo(Packages.javax.jcr.Session); var node = jcrsession.getRootNode().getNode(path_str.substring(1)); var is = node.getProperty("jcr:content/jcr:data").getStream(); return new Packages.com.adobe.aemfd.docmanager.Document(is); } /** * Converts printer protocol string to com.adobe.fd.stp.api.PrinterProtocol enum * */ function setPrinterProtocol(printerSpec, protocol_str){ if(protocol_str == null || typeof(protocol_str) == "undefined" || protocol_str.length() == 0){ throw new Error("getPrinterProtocol#protocol_str is null"); } protocol_str = protocol_str.trim(); if("CUPS".equals(protocol_str)){ printerSpec.setPrinterProtocol(Packages.com.adobe.fd.stp.api.PrinterProtocol.CUPS); } else if("DirectIP".equals(protocol_str)){ printerSpec.setPrinterProtocol(Packages.com.adobe.fd.stp.api.PrinterProtocol.DirectIP); } else if("LPD".equals(protocol_str)){ printerSpec.setPrinterProtocol(Packages.com.adobe.fd.stp.api.PrinterProtocol.LPD); } else if("SharedPrinter".equals(protocol_str)){ printerSpec.setPrinterProtocol(Packages.com.adobe.fd.stp.api.PrinterProtocol.SharedPrinter); } else if("CIFS".equals(protocol_str)){ printerSpec.setPrinterProtocol(Packages.com.adobe.fd.stp.api.PrinterProtocol.CIFS); } else { throw new Error("Unknown protocol "+protocol_str); } }
Um den Workflow-Schritt verwenden zu können, nehmen Sie ihn in einen Workflow auf. Führen Sie die folgenden Schritte aus, um einen Workflow zu erstellen, der den Workflow-Schritt verwendet:
Wenn der Workflow fertig ist, führen Sie folgende Schritte durch, um den Starter zu erstellen, über den der Workflow aufgerufen wird.
-
Konfiguration des Starters
Hinweis:
Ist auf dem Server, der den überwachten Ordner hostet, keiner der angegebenen Ausführungsmodi verfügbar, wird der überwachte Ordner immer aktiviert, egal, welche Ausführmodi auf dem Server laufen.