Items dynamisch toevoegen aan keuzeselectiegroep

In AEM Forms 6.5 is de mogelijkheid geïntroduceerd om items dynamisch toe te voegen aan een adaptieve Forms-keuzerondjesgroepcomponent, zoals CheckBox, Radio Button en Afbeeldingslijst. In dit artikel bekijken we of een keuzegroep kan worden gevuld met de DAM-mapinhoud. In het schermafbeelding bevinden de drie bestanden zich in de map Nieuwsbrief. Telkens wanneer een nieuwe nieuwsbrief aan de map wordt toegevoegd, wordt de groepscomponent Keuze bijgewerkt en wordt de inhoud ervan automatisch weergegeven. De gebruiker kan een of meer nieuwsbrieven selecteren om te downloaden.

Redacteur van de Regel

servlet maken om de inhoud van de DAM-map te retourneren

De volgende code is geschreven om de inhoud van de DAM-map in JSON-indeling te retourneren.

package com.newsletters.core.servlets;
import static com.day.cq.commons.jcr.JcrConstants.JCR_CONTENT;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.Servlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gson.Gson;
import com.google.gson.JsonObject;

@Component(service = {
  Servlet.class
}, property = {
  "sling.servlet.methods=get",
  "sling.servlet.paths=/bin/listfoldercontents"
})
public class ListFolderContent extends SlingSafeMethodsServlet {
  private static final long serialVersionUID = 1 L;
  private static final Logger log = LoggerFactory.getLogger(ListFolderContent.class);
  protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {
    Resource resource = request.getResourceResolver().getResource(request.getParameter("damFolder"));
    List < JsonObject > results = new ArrayList < > ();
    resource.getChildren().forEach(child -> {
      if (!JCR_CONTENT.equals(child.getName())) {
        JsonObject asset = new JsonObject();
        log.debug("##The child name is " + child.getName());
        asset.addProperty("assetname", child.getName());
        asset.addProperty("assetpath", child.getPath());
        results.add(asset);

      }
    });
    PrintWriter out = null;
    try {
      out = response.getWriter();
    } catch (IOException e) {

      log.debug(e.getMessage());
    }
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    Gson gson = new Gson();
    out.print(gson.toJson(results));
    out.flush();
  }

}

Clientbibliotheek maken met JavaScript-functie

De servlet wordt aangeroepen vanuit een JavaScript-functie. De functie retourneert een matrixobject dat wordt gebruikt om de keuzegroep te vullen

/**
 * Populate drop down/choice group  with assets from specified folder
 * @return {string[]}
 */
function getDAMFolderAssets(damFolder) {
   // strUrl is whatever URL you need to call
   var strUrl = '/bin/listfoldercontents?damFolder=' + damFolder;
   var documents = [];
   $.ajax({
      url: strUrl,
      success: function(jsonData) {
         for (i = 0; i < jsonData.length; i++) {
            documents.push(jsonData[i].assetpath + "=" + jsonData[i].assetname);
         }
      },
      async: false
   });
   return documents;
}

Adaptief formulier maken

Creeer een adaptieve vorm en associeer de vorm met cliëntbibliotheek listfolderAssets. Voeg een component CheckBox toe aan het formulier. Gebruik de regelredacteur om de opties van checkbox zoals aangetoond in scherm-schot te bevolken
plaats-opties

Wij roepen functie javascript genoemd getDAMFolderAssets en overgaan de weg van de activa van de omslag DAM aan lijst in de vorm.

Volgende stappen

Geselecteerde Assets samenstellen

recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e