Lägg till anpassad åtgärd i resurslista-vyn add-custom-action-to-the-asset-listing-view

Översikt overview

Med Correspondence Management-lösningen kan du lägga till anpassade åtgärder i användargränssnittet Hantera resurser.

Du kan lägga till en anpassad åtgärd i resurslista för:

  • En eller flera resurstyper eller bokstäver
  • Körning (åtgärd/kommando blir aktivt) vid val av enstaka, flera resurser/bokstäver, eller utan markering

Den här anpassningen visas med scenariot som lägger till kommandot "Ladda ned PDF" i resurslista för brev. Med det här anpassningsscenariot kan dina användare ladda ned PDF till ett enda markerat brev.

Förutsättningar prerequisites

Om du vill slutföra följande scenario eller liknande behöver du känna till:

  • CRX
  • JavaScript
  • Java™

Scenario: Lägg till ett kommando i användargränssnittet för bokstavslistan om du vill hämta en PDF-version av ett brev addcommandtoletters

Stegen nedan lägger till kommandot "Ladda ned PDF" i resurslisteringsvyn för brev och gör att dina användare kan ladda ned en plan PDF av det markerade brevet. Med dessa steg och rätt kod och parametrar kan du lägga till andra funktioner för en annan resurs, till exempel dataordlistor eller texter.

Följ de här stegen för att anpassa Correspondence Management så att användarna kan hämta en PDF med bokstäver:

  1. Gå till https://'[server]:[port]'/[ContextPath]/crx/de och logga in som administratör.

  2. I mappen apps skapar du en mapp med namnet items med en sökväg/struktur som liknar mappen items i en urvalsmapp enligt följande:

    1. Högerklicka på objekt mapp på följande sökväg och välj Överläggsnod:

      /libs/fd/cm/ma/gui/content/cmassets/jcr:content/body/content/header/items/selection/items

      note note
      NOTE
      Den här banan är specifik för att skapa ett funktionsmakro som fungerar med markering av en eller flera resurser/bokstäver. Om du vill skapa en åtgärd som fungerar utan markering skapar du i stället en överläggsnod för följande sökväg och slutför de återstående stegen därefter:
      /libs/fd/cm/ma/gui/content/cmassets/jcr:content/body/content/header/items/default/items

      Skapa nod

    2. Kontrollera att dialogrutan Overlay Node har följande värden:

      Sökväg: /libs/fd/cm/ma/gui/content/cmassets/jcr:content/body/content/header/items/selection/items

      Plats: /apps/

      Matcha nodtyper: Markerad

      Överläggsnod

    3. Klicka OK. Mappstrukturen skapas i programmappen.

      Klicka Spara alla.

  3. Lägg till en nod för den anpassade knappen/åtgärden i en viss resurs (Exempel: downloadFlatPDF) i den nya objektmappen enligt följande steg:

    1. Högerklicka på objekt mapp och markera Skapa > Skapa nod.

    2. Kontrollera att dialogrutan Skapa nod har följande värden och klicka på OK:

      Namn: downloadFlatPDF (eller det namn du vill ge den här egenskapen)

      Typ: nt:ostrukturerad

    3. Klicka på den nya noden som du har skapat (här downloadFlatPDF). CRX visar nodens egenskaper.

    4. Lägg till följande egenskaper i noden (här downloadFlatPDF) och klicka på Spara alla:

      table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 6-row-3 7-row-3 8-row-3 html-authored no-header
      Namn Typ Värde och beskrivning
      class Sträng Foundation-collection-action
      Foundation-collection-action Sträng

      {"target": ".cq-manageasset-admin-childpages", "activeSelectionCount": "single","type": "LETTER"}


      activeSelectionCount kan vara en eller flera för att tillåta val av enskilda eller flera resurser som den anpassade åtgärden utförs på.

      type kan vara en eller flera (kommaavgränsade poster) av följande: LETTER,TEXT,LIST,CONDITION,DATADICTIONARY

      icon Sträng icon-download

      Den ikon som Correspondence Management visar till vänster om kommandot/menyn. Information om olika ikoner och inställningar finns i Dokumentation för CoralUI-ikoner.
      jcr:primärType Namn nt:ostrukturerad
      rel Sträng download-flat-pdf-button
      sling:resourceType Sträng granite/ui/components/endor/actionbar/button
      text Sträng Ladda ned PDF (eller någon annan etikett)

      Kommandot som visas i gränssnittet Resurslista
      title Sträng Ladda ned en plan PDF till det markerade brevet (eller annan etikett/Alt-text)

      Titeln är den alt-text som Correspondence Management visar när användaren hovrar över det anpassade kommandot.
  4. I mappen apps skapar du en mapp med namnet js med en sökväg/struktur som liknar mappen items i mappen admin med följande steg:

    1. Högerklicka på js mapp på följande sökväg och välj Överläggsnod:

      /libs/fd/cm/ma/gui/components/admin/clientlibs/admin/js

    2. Kontrollera att dialogrutan Overlay Node har följande värden:

      Sökväg: /libs/fd/cm/ma/gui/components/admin/clientlibs/admin/js

      Plats: /apps/

      Matcha nodtyper: Markerad

    3. Klicka OK. Mappstrukturen skapas i programmappen. Klicka Spara alla.

  5. I mappen js skapar du en fil med namnet formaction.js med koden för knappens åtgärder enligt följande steg:

    1. Högerklicka på js mapp på följande sökväg och välj Skapa > Skapa fil:

      /apps/fd/cm/ma/gui/components/admin/clientlibs/admin/js

      Namnge filen som formaction.js.

    2. Dubbelklicka på filen för att öppna den i CRX.

    3. I filen formaction.js (under grenen /apps) kopierar du koden från filen formaction.js på följande plats:

      /libs/fd/cm/ma/gui/components/admin/clientlibs/admin/js/formaction.js

      Lägg sedan till följande kod i slutet av filen formaction.js (under grenen /apps) och klicka på Spara alla:

      code language-javascript
      /* Action url for xml file to be added.*/
      var ACTION_URL = "/apps/fd/cm/ma/gui/content/commons/actionhandlers/items/letterpdfdownloader.html";
      
      /* File upload handling*/
      var fileSelectedHandler = function(e){
          if(e && e.target && e.target.value)
              $(".downloadLetterPDFBtn").removeAttr('disabled');
          else
              $(".downloadLetterPDFBtn").attr('disabled','disabled');
      }
      
      /*Handing of Download button in pop up.*/
      var downloadClickHandler = function(){
          $('#downloadLetterPDFDilaog').modal("hide");
          var element = $('.foundation-selections-item');
          var path = $(element).data("path");
          $("#fileUploadForm").attr('action', ACTION_URL + "?letterId="+path).submit();
      }
      
      /*Click handling on action button.*/
      $(document).on("click",'.download-flat-pdf-button',function(e){
          $("#uploadSamepledata").val("");
           if($('#downloadLetterPDFDilaog').length == 0){
              $(document).on("click",".downloadLetterPDFBtn",downloadClickHandler);
              $(document).on("change","#uploadSamepledata",fileSelectedHandler);
              $("body").append(downloadLetterPDFDilaog);
          }
            $('#downloadLetterPDFDilaog').modal("show");
      });
      
      /*Download popup.*/
      var downloadLetterPDFDilaog = '<div id="downloadLetterPDFDilaog" class="coral-Modal notice " role="dialog"  aria-hidden="true">'+
          '<form id="fileUploadForm" method="POST" enctype="multipart/form-data">'+
              '<div class="coral-Modal-header">'+
                  '<h2 class="coral-Modal-title coral-Heading coral-Heading--2" id="modal-header1443020790107-label" tabindex="0">Download Letter as PDF.</h2>'+
                  '<button type="button" class="coral-MinimalButton coral-Modal-closeButton" data-dismiss="modal">×</button>'+
              '</div>'+
              '<div class="coral-Modal-body" id="modal-header1443020790107-message" role="document" tabindex="0">'+
                  '<div class="coral-Modal-message">'+
                      '<p></p>'+
                  '</div>'+
                  '<div class="coral-Modal-uploader">'+
                      '<p>Select sample data for letter.</p>'+
                      '<input type="file" id="uploadSamepledata" name="file" accept=".xml" size="70px">'+
                  '</div>'+
              '</div>'+
           '</form>'+
              '<div class="coral-Modal-footer">'+
                  '<button type="button" class="coral-Button" data-dismiss="modal">Cancel</button>'+
                  '<button type="button" class="coral-Button coral-Button--primary downloadLetterPDFBtn" disabled="disabled">Download</button>'+
              '</div>'+
      '</div>';
      

      Koden som du lägger till i det här steget åsidosätter koden under libs-mappen, så kopiera den föregående koden till formaction.js-filen i /apps-grenen. Om du kopierar koden från grenen /libs till grenen /apps säkerställer du att den tidigare funktionen också fungerar.

      Koden ovan gäller bokstavsspecifik åtgärdshantering för det kommando som skapas i den här proceduren. Ändra JavaScript-koden om du vill hantera andra resurser.

  6. I mappen apps skapar du en mapp med namnet items med en sökväg/struktur som liknar mappen items i mappen actionhandlers med följande steg:

    1. Högerklicka på objekt mapp på följande sökväg och välj Överläggsnod:

      /libs/fd/cm/ma/gui/content/commons/actionhandlers/items/

    2. Kontrollera att dialogrutan Overlay Node har följande värden:

      Sökväg: /libs/fd/cm/ma/gui/content/commons/actionhandlers/items/

      Plats: /apps/

      Matcha nodtyper: Markerad

    3. Klicka OK. Mappstrukturen skapas i programmappen.

    4. Klicka Spara alla.

  7. Under noden för nyligen skapade objekt lägger du till en nod för den anpassade knappen/åtgärden i en viss resurs (Exempel: letterpdfdownloader) enligt följande steg:

    1. Högerklicka på objektmappen och välj Skapa > Skapa nod.

    2. Kontrollera att dialogrutan Skapa nod har följande värden och klicka på OK:

      Namn: letterpdfdownloader (eller det namn du vill ge den här egenskapen) måste vara unikt. Om du använder ett annat namn här anger du samma namn i formaction.js-filens ACTION_URL-variabel.)

      Typ: nt:ostrukturerad

    3. Klicka på den nya noden som du har skapat (här downloadFlatPDF). CRX visar nodens egenskaper.

    4. Lägg till följande egenskap i noden (här letterpdfdownloader) och klicka på Spara alla:

      table 0-row-3 1-row-3
      Namn Typ Värde
      sling:resourceType Sträng fd/cm/ma/gui/components/admin/clientlibs/admin
  8. Skapa en fil med namnet POST.jsp och koden för hur kommandot hanteras på följande plats:

    /apps/fd/cm/ma/gui/components/admin/clientlibs/admin

    1. Högerklicka på admin mapp på följande sökväg och välj Skapa > Skapa fil:

      /apps/fd/cm/ma/gui/components/admin/clientlibs/admin

      Ge filen namnet POST.jsp. (Filnamnet behöver bara vara POST.jsp.)

    2. Dubbelklicka på POST.jsp för att öppna den i CRX.

    3. Lägg till följande kod i filen POST.jsp och klicka på Spara alla:

      Den här koden är specifik för bokstavsåtergivningstjänsten. För alla andra resurser lägger du till resursens Java™-bibliotek i den här koden. Mer information om AEM Forms API:er finns i AEM FORMS API.

      Mer information om AEM finns i AEM Komponenter.

      code language-xml
      /*Import libraries. Here we are downloading letter flat pdf with input xml data so we require letterRender Api. For any other Module functionality we need to first import that library. */
      <%@include file="/libs/foundation/global.jsp"%>
      <!DOCTYPE html lang="en" PUBLIC "-//W3C//DTD XHTML 1.1//EN" "https://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
      <%@page import="com.adobe.icc.ddg.api.*"%>
      <%@page import="com.adobe.icc.dbforms.obj.*"%>
      <%@page import="com.adobe.icc.render.obj.*" %>
      <%@page import="com.adobe.icc.services.api.*" %>
      <%@page import="org.apache.sling.api.resource.*" %>
      <%@page import="java.io.File" %>
      <%@page import="java.util.*" %>
      <%@page import="com.adobe.livecycle.content.appcontext.AppContextManager"%>
      <%@page import=" com.adobe.icc.dbforms.exceptions.ICCException"%>
      <%@page import="java.io.InputStream" %>
      <%@page import="java.io.FileInputStream" %>
      <%@page import="org.apache.commons.io.IOUtils" %>
      <%@page session="false" contentType="text/html; charset=utf-8"%>
      <%@taglib prefix="sling" uri="https://sling.apache.org/taglibs/sling/1.0"%>
      <%@taglib prefix="cq" uri="https://www.day.com/taglibs/cq/1.0" %>
       <%@page session="false" contentType="text/html; charset=utf-8"%>
      <%
         AppContextManager.setCurrentAppContext("/content/apps/cm");
         /*Get letter id sent in js file.*/
          String letterId = request.getParameter("letterId");
          if(letterId.lastIndexOf("?") != -1)
              letterId = letterId.substring(0, letterId.indexOf("?"));
          String fileName = null;
          String letterName = null;
          InputStream inputStream = null;
          /*Get xml file data*/
          if (slingRequest.getRequestParameter("file") != null)
              inputStream = slingRequest.getRequestParameter("file").getInputStream();
          if(letterId != null){
              String xmlData = null;
              try{
                  xmlData = IOUtils.toString(inputStream, "UTF-8");
              }
              catch (Exception e) {
                  log.error("Xml data does not exists.");
              }
              /*letter Name from letter letter id.*/
              letterName = letterId.substring(letterId.lastIndexOf("/")+1);
              /*Invoking letter render services API.*/
              LetterRenderService letterRenderService = sling.getService(LetterRenderService.class);
              /*using CM renderLetter api to get pdfbytes.*/
              PDFResponseType  pdfResponseType= letterRenderService.renderLetter(letterId,xmlData,true,false,false,false);
              byte[] bytes = null;
              /*Downloading pdf bytes as pdf.*/
              if(pdfResponseType != null && pdfResponseType.getFile() != null){
                  bytes = pdfResponseType.getFile().getDocument();
                  /*set the response header to enable download*/
                  response.setContentType("application/OCTET-STREAM");
                  response.setHeader("Content-Disposition", "attachment;filename=\"" + letterName + ".pdf\"");
                  response.setHeader("Pragma", "cache");
                  response.setHeader("Cache-Control", "private");
                  out.clear();
                  response.getOutputStream().write(bytes);
              }
          }
          else{
              log.error("Letter id does not exists.");
          }
      %>
      

Ladda ned PDF i ett brev med den anpassade funktionen download-flat-pdf-of-a-letter-using-the-custom-functionality

När du har lagt till en anpassad funktion för att ladda ned en PDF i dina brev kan du använda följande steg för att ladda ned en PDF-version av det brev du har valt:

  1. Gå till https://'[server]:[port]'/[ContextPath]/projects.html och logga in.

  2. Välj Forms > Brev. Correspondence Management listar bokstäverna som finns i systemet.

  3. Klicka Välj och klicka sedan på en bokstav för att markera den.

  4. Välj Mer > <download flat="" pdf=""> (De anpassade funktionerna som skapas med instruktionerna i den här artikeln). Dialogrutan Hämta brev som PDF visas.

    Menyalternativets namn, funktion och alt-text är beroende av den anpassning som har skapats i Scenario: Lägg till ett kommando i användargränssnittet för bokstavslistan om du vill hämta en PDF-version av ett brev.

    Anpassad funktionalitet: Ladda ned PDF

  5. I dialogrutan Hämta brev som PDF väljer du den XML som du vill fylla i data från i PDF.

    note note
    NOTE
    Innan du laddar ned bokstaven som ett platt PDF kan du skapa XML-filen med informationen i brevet med hjälp av Skapa rapport alternativ.

    Hämta brev som PDF

    Brevet laddas ned till din dator som ett vanligt PDF.

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2