使用監看資料夾機製為列印頻道產生互動式通訊檔案

設計和測試列印管道檔案後,您通常需要透過進行REST呼叫來產生檔案,或使用監看資料夾機制來產生列印檔案。

本文說明使用watched資料夾機制產生列印管道檔案的使用案例。

當您將檔案放入watched資料夾時,會執行與watched資料夾相關聯的指令碼。 下方的文章將說明此指令碼。

放入watched資料夾的檔案具有下列結構。 程式碼會針對XML檔案中列出的所有帳號產生陳述式。

<accountnumber>

<accountnumber>509840</accountnumber>

<accountnumber>948576</accountnumber>

<accountnumber>398762</accountnumber>

<accountnumber>291723</accountnumber>

</accountnumbers>

以下列出的程式碼會執行下列動作:

第1行 — InteractiveCommunicationsDocument的路徑

第15到20行:從放入watched資料夾的XML檔案取得帳號清單

第24-25行:取得與檔案相關的PrintChannelService和Print Channel。

第30行:將accountnumber作為關鍵元素傳遞至表單資料模型。

第32-36行:設定要產生之檔案的資料選項。

第38行:轉譯檔案。

第39-40行 — 將產生的檔案儲存到檔案系統。

表單資料模型的REST端點需要ID作為輸入引數。 此id對應至名為accountnumber的請求屬性,如下面的熒幕擷圖所示。

requestattribute

var interactiveCommunicationsDocument = "/content/forms/af/retirementstatementprint/channels/print/";
var saveLocation =  new Packages.java.io.File("c:\\scrap\\loadtesting");

if(!saveLocation.exists())
{
 saveLocation.mkdirs();
}

var inputMap = processorContext.getInputMap();
var entry = inputMap.entrySet().iterator().next();
var inputDocument = inputMap.get(entry.getKey());
var aemDemoListings = sling.getService(Packages.com.mergeandfuse.getserviceuserresolver.GetResolver);
var resourceResolver = aemDemoListings.getServiceResolver();
var resourceResolverHelper = sling.getService(Packages.com.adobe.granite.resourceresolverhelper.ResourceResolverHelper);
var dbFactory = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance();
var dBuilder = dbFactory.newDocumentBuilder();
var xmlDoc = dBuilder.parse(inputDocument.getInputStream());
var nList = xmlDoc.getElementsByTagName("accountnumber");
for(var i=0;i<nList.getLength();i++)
{
 var accountnumber = nList.item(i).getTextContent();
resourceResolverHelper.callWith(resourceResolver, {call: function()
       {
   var printChannelService = sling.getService(Packages.com.adobe.fd.ccm.channels.print.api.service.PrintChannelService);
   var printChannel = printChannelService.getPrintChannel(interactiveCommunicationsDocument);
   var options = new Packages.com.adobe.fd.ccm.channels.print.api.model.PrintChannelRenderOptions();
   options.setMergeDataOnServer(true);
   options.setRenderInteractive(false);
   var map = new Packages.java.util.HashMap();
   map.put("accountnumber",accountnumber);
    // Required Data Options
   var dataOptions = new Packages.com.adobe.forms.common.service.DataOptions();
   dataOptions.setServiceName(printChannel.getPrefillService());
   dataOptions.setExtras(map);
   dataOptions.setContentType(Packages.com.adobe.forms.common.service.ContentType.JSON);
   dataOptions.setFormResource(resourceResolver.resolve(interactiveCommunicationsDocument));
            options.setDataOptions(dataOptions);
    var printDocument = printChannel.render(options);
   var statement = new Packages.com.adobe.aemfd.docmanager.Document(printDocument.getInputStream());
            statement.copyToFile(new Packages.java.io.File(saveLocation+"\\"+accountnumber+".pdf"));

      }
   });
}

若要在本機系統上測試此專案,請遵循下列指示:

  • 依照此文章中的說明設定Tomcat。 Tomcat有產生範例資料的war檔案。

  • 依照此文章的說明,設定服務aka系統使用者。
    請確定此系統使用者擁有下列節點的讀取許可權。 若要將許可權登入授予user admin,並搜尋系統使用者「資料」,並透過將Tab鍵移至許可權索引標籤,在下列節點上授與讀取許可權

    • /content/dam/formsanddocuments
    • /content/dam/formsanddocuments-fdm
    • /content/forms/af
  • 使用封裝管理員將下列封裝匯入AEM。 此套件包含下列專案:

  • 互動式通訊檔案範例

  • Watched資料夾指令碼

  • 資料來源組態

  • 開啟/etc/fd/watchfolder/scripts/PrintPDF.ecma檔案。 確定第1行中interactiveCommunicationsDocument的路徑指向您要列印的正確檔案

  • 根據您的偏好設定,在第2行修改saveLocation

  • 建立含有以下內容的accountnumbers.xml檔案

<accountnumbers>
<accountnumber>1</accountnumber>
<accountnumber>100</accountnumber>
<accountnumber>101</accountnumber>
<accountnumber>1009</accountnumber>
<accountnumber>10009</accountnumber>
<accountnumber>11990</accountnumber>
</accountnumbers>
  • 將accountnumbers.xml拖放至C:\RenderPrintChannel\input資料夾。

  • 產生的PDF檔案會寫入到ecma指令碼中指定的saveLocation。

NOTE
如果您打算在非視窗作業系統上使用此功能,請瀏覽至
/etc/fd/watchfolder /config/PrintChannelDocument並根據您的偏好變更資料夾路徑
recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e