Etapa de proceso personalizado
Se implementó un paso de proceso personalizado para rellenar variables de flujo de trabajo de tipo Lista de matriz con los archivos adjuntos y los nombres de los archivos adjuntos. A continuación, esta variable se utiliza en el componente de flujo de trabajo Enviar correo electrónico. Si no está familiarizado con la creación del paquete OSGi, siga estas instrucciones
El código del paso de proceso personalizado hace lo siguiente
-
Consulte todos los archivos adjuntos de los formularios adaptables de la carpeta de carga útil. El nombre de la carpeta se pasa como argumento de proceso al paso de proceso.
-
Rellenar
listOfDocuments
variable de flujo de trabajo -
Rellenar
attachmentNames
variable de flujo de trabajo -
Establecer el valor de la variable de flujo de trabajo (
no_of_attachments
)
package com.aemforms.formattachments.core;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import javax.jcr.Node;
import javax.jcr.Session;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.aemfd.docmanager.Document;
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import com.day.cq.search.PredicateGroup;
import com.day.cq.search.Query;
import com.day.cq.search.QueryBuilder;
import com.day.cq.search.result.Hit;
import com.day.cq.search.result.SearchResult;
@Component(property = {
Constants.SERVICE_DESCRIPTION + "=PopulateListOfDocuments",
"process.label" + "=PopulateListOfDocuments"
})
public class PopulateListOfDocuments implements WorkflowProcess {
private static final Logger log = LoggerFactory.getLogger(PopulateListOfDocuments.class);
@Reference
QueryBuilder queryBuilder;
@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap processArguments) throws WorkflowException
{
String payloadPath = workItem.getWorkflowData().getPayload().toString();
log.debug("The payload path is" + payloadPath);
MetaDataMap metaDataMap = workItem.getWorkflow().getWorkflowData().getMetaDataMap();
Session session = workflowSession.adaptTo(Session.class);
Map < String, String > map = new HashMap < String, String > ();
map.put("path", workItem.getWorkflowData().getPayload().toString() + "/" + processArguments.get("PROCESS_ARGS", "string").toString());
map.put("type", "nt:file");
Query query = queryBuilder.createQuery(PredicateGroup.create(map), workflowSession.adaptTo(Session.class));
query.setStart(0);
query.setHitsPerPage(20);
SearchResult result = query.getResult();
log.debug("Get result hits " + result.getHits().size());
int no_of_attachments = result.getHits().size();
Document[] listOfDocuments = new Document[no_of_attachments];
String[] attachmentNames = new String[no_of_attachments];
int i = 0;
for (Hit hit: result.getHits()) {
try {
String attachmentPath = hit.getPath();
log.debug("The hit path is" + hit.getPath());
Node attachmentNode = session.getNode(attachmentPath + "/jcr:content");
InputStream attachmentStream = attachmentNode.getProperty("jcr:data").getBinary().getStream();
listOfDocuments[i] = new Document(attachmentStream);
attachmentNames[i] = new String(hit.getTitle());
log.debug("Added " + hit.getTitle() + "to the list");
i++;
} catch (Exception e) {
log.error("Unable to obtain attachment", e);
}
}
metaDataMap.put("no_of_attachments", no_of_attachments);
metaDataMap.put("listOfDocuments", listOfDocuments);
metaDataMap.put("attachmentNames", attachmentNames);
log.debug("Updated workflow");
}
}
listOfDocuments - variable de tipo ArrayList of Documents
attachmentNames: variable de tipo ArrayList de cadena
no_of_attachments - variable de tipo Double