Sie können die Funktion „Überwachungsordner“ in AEM aktivieren, indem Sie einen Workflow und einen Starter für den Workflow erstellen.
Weitere Informationen zur Erstellung von Workflows finden Sie unter Workflow-Dokumentation.
Weitere Informationen zur Erstellung 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.