ワークフローとワークフローのランチャーを作成すると、AEM で監視フォルダー機能を有効にすることができます。

ワークフローの作成について詳しくは、「ワークフローのドキュメント」を参照してください。

ランチャーの作成について詳しくは、「ランチャーのドキュメント」を参照してください。

添付されたサンプルワークフローとランチャーは、OutputCentralService の centralMerge メソッドを使用して、テンプレート/データを統合しています。さらに、生成された PCL ドキュメントを sendToPrinter API を使用してプリンターに送信します。

サンプルワークフローとランチャーの使用

  1. 最新の AEM Forms 6.0 アドオンパッケージ adobe-aemfd-{OS}-pkg がインストールされていることを確認します。

  2. 添付されている adobe-aemfd-cmb-sample-pkg をインストールします。

    ダウンロード

  3. http://<cqhost>:<port>/workflow に移動し、「モデル」タブで 「AEMFD CMB サンプルワークフロー - 結合と印刷」を探します。

  4. AEMFD CMB サンプルワークフロー - 結合と印刷」を選択し、「編集」をクリックします。ワークフローエディターでワークフローが開きます。

  5. AEMFD CMB サンプルワークフロー」のステップをダブルクリックして、「処理」タブを開きます。

  6. 引数」フィールドに、テンプレートへのパス(.mdf)とプリンターの詳細を入力します。引数はコンマ区切り値のリストになります。値はリストとして解釈されます(MDF ファイルへのパス、PrintServer、PrinterName、PrinterProtocol)。

  7. OK」をクリックし、「保存」をクリックします。

/content/fd/cmb/samples/MergeAndPrint/watchfolder にドロップしたファイルをランチャーが選択するように設定します。

データファイル(.dat)を監視フォルダーにドロップし、PCL のレンダリングと印刷のワークフローをトリガーします。

監視フォルダーの作成

サンプルの使用例では、監視フォルダーを作成して、そのフォルダーにデータファイル(.dat)をコピーします。このデータファイルにテンプレート(.mdf)が結合され、生成された PCL ファイル(.pcl)が、印刷のための SendToPrinter Service の印刷 API を使用してプリンターに送信されます。

注意:

CMB サービスに使用する AEM ワークフローとランチャーをゼロから作成する場合は、このセクションを参照してください。adobe-aemfd-cmb-sample-pkg パッケージのみを使用する場合は、ここで詳細に説明されている内容はすでにパッケージに適用されているため、このセクションをスキップしてください。

ワークフローステップの作成

このサンプルでは、ECMAScript を使用して、次の操作を実行するワークフロープロセスのステップを定義します。

  • ペイロードから .mdf ファイルと .dat ファイルを読み取り、それらを結合して、CBM サービスの centralMerge 操作を使って PCL ドキュメントを生成します。
  • SendToPrinter Service の印刷 API を使用して、プリンターに PCL ドキュメントを送信します

CRX リポジトリにログインし、ファイル /etc/workflow/scripts/cmb/cmb-mergeandprint-sample.ecma を作成して、次のコードを貼り付けます。

/**
 *  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);
    }
}

ワークフローの作成

ワークフローステップを使用できるようにするには、ワークフローにステップを含めます。ワークフローステップを使用するワークフローを作成するには、次の手順を実行します。

  1. http://<server>:<port>/workflow に移動して、資格情報を使ってログインします。

  2. モデル」タブで「新規」をクリックしてタイトルを入力し、「OK」をクリックして空白のワークフローを作成します。

  3. 作成したワークフローを検索してダブルクリックします。ワークフローエディターが表示されます。

  4. ワークフローエディターで、サイドキックの「ワークフロー」セクションから、処理ステップをドラッグします。

  5. 新しいワークフローステップをダブルクリックし、ダイアログの「処理」タブを選択します。

  6. 処理リストで、ファイル /etc/workflow/steps/cmb/cmb-mergeandprint-sample.ecma を選択します。

  7. ワークフローが自動的に次のステップに進むようにするには、「ハンドラー処理の設定」を選択します。

  8. 引数」セクションで、テンプレート(.mdf)へのパス、PrintServer、PrinterName、PrinterProtocol を、コンマ区切り値で追加します。

  9. OK」をクリックし、「保存」をクリックします。

ランチャーの作成

ワークフローの準備が整ったら、次の手順を実行してワークフローを呼び出すためのランチャーを作成します。

  1. http://<server>:<port>/workflow に移動して、資格情報を使ってログインします。

  2. ランチャー」タブで、「追加」をクリックします。

  3. ダイアログで、「イベントタイプ」を「作成済み」に、「ノードタイプ」を nt:file に指定します。さらに、監視フォルダーとして指定するフォルダーへのパスを設定します。

  4. ワークフローリストから、以前に作成したワークフローを選択します。

  5. 実行モードを選択します。次に「OK」をクリックします。監視フォルダーが使用できるようになります。

    ランチャーの設定
    ランチャーの設定

    注意:

    監視フォルダーをホストしているサーバーで実行モードが指定されていない場合、サーバー上の実行モードにかかわらず、監視フォルダーはアクティブになります。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー