Registrar el valor de las variables en el flujo de trabajo de AEM
Última actualización: 24 de marzo de 2025
- Se aplica a:
- Experience Manager 6.5
- Temas:
- Formularios adaptables
Creado para:
- Principiante
- Desarrollador
El registro del valor de las variables es una práctica común en el desarrollo de software. Ayuda a los desarrolladores a realizar un seguimiento y comprender cómo se ejecuta un flujo de trabajo de AEM, diagnosticar problemas y monitorizar el flujo de datos dentro de un flujo de trabajo de AEM.
El siguiente código asociado a un paso de proceso personalizado registra el valor de todos los tipos de variables excepto el tipo FormDataModel.
package com.variablelogger.core;
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.adobe.granite.workflow.model.VariableTemplate;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
@Component(property = {
Constants.SERVICE_DESCRIPTION + "=Log workflow process variables",
Constants.SERVICE_VENDOR + "=Adobe Systems",
"process.label" + "=Log workflow process variables"
})
public class LogWorkflowVariables implements WorkflowProcess {
Logger log = LoggerFactory.getLogger(this.getClass());
private void writeListOfString(String[] stringArray)
{
for (int i = 1; i <= stringArray.length; i++)
{
log.debug("Got String " + stringArray[i]);
}
}
private void writeListOfDocuments(Object[] documentsArray)
{
log.debug(" Got "+documentsArray.length+" files to write to file system");
for(int i=0;i<documentsArray.length;i++)
{
Document attachment = (Document) documentsArray[i];
try
{
String[] path = attachment.getAttribute("adobe.docmanager.attribute.filename").toString().split("/");
log.debug("The attachment name is "+ path[1]);
attachment.copyToFile(new File(path[1]));
attachment.close();
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
}
private void writeDocument(Document documentToWrite,String key)
{
log.debug(" Writing Document "+key);
if (documentToWrite!=null)
{
try
{
documentToWrite.copyToFile(new File(key + ".pdf"));
documentToWrite.close();
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
}
@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException
{
log.debug("Logging variable info for "+ workItem.getWorkflow().getWorkflowModel().getTitle()+" workflow ");
log.debug("Logging variable info for payload path "+ workItem.getWorkflowData().getPayload().toString());
MetaDataMap metaMap = workItem.getWorkflow().getWorkflowData().getMetaDataMap();
Map <String,com.adobe.granite.workflow.model.VariableTemplate>variableTemplateMap = workItem.getWorkflow().getWorkflowModel().getVariableTemplates();
Iterator<String> templateIterator = variableTemplateMap.keySet().iterator();
while(templateIterator.hasNext())
{
String key = templateIterator.next();
VariableTemplate vt = variableTemplateMap.get(key);
log.debug("The variable "+key+" is of type "+vt.getType()+" and its sub type is "+vt.getSubType());
if(vt.getType().equalsIgnoreCase("com.adobe.aemfd.docmanager.Document"))
{
Document documentToWrite = metaMap.get(key, Document.class);
if(documentToWrite!=null)
writeDocument((Document) metaMap.get(key),key);
}
if(vt.getType().equalsIgnoreCase("java.util.ArrayList"))
{
if(vt.getSubType().equalsIgnoreCase("com.adobe.aemfd.docmanager.Document"))
{
log.debug("Got Array List " + key);
Document[] documentsArray = metaMap.get(key, Document[].class);
if(documentsArray!=null)
writeListOfDocuments(documentsArray);
}
if(vt.getSubType().equalsIgnoreCase("java.lang.String"))
{
log.debug("Got Array List of Strings " + key);
String[] stringArray = metaMap.get(key, String[].class);
if(stringArray!=null)
writeListOfString(stringArray);
}
}
if(vt.getType().equalsIgnoreCase("java.util.Date"))
{
log.debug("Got Date "+key);
java.util.Date dateVariable = metaMap.get(key,java.util.Date.class);
if(dateVariable!=null)
log.debug("The value of "+key+ " is " +dateVariable.toString());
}
if(vt.getType().equalsIgnoreCase("java.lang.Boolean"))
{
log.debug("Got Boolean "+key);
Boolean booleanVariable = metaMap.get(key,java.lang.Boolean.class);
if(booleanVariable!=null)
log.debug("The value of "+key+" is "+String.valueOf(booleanVariable));
}
if(vt.getType().equalsIgnoreCase("org.w3c.dom.Document"))
{
log.debug("Got XML Document "+key);
String xmlDocument = metaMap.get(key,String.class);
if(xmlDocument!=null)
log.debug("The value of xml Document is "+xmlDocument);
}
if( (vt.getType().equalsIgnoreCase("com.google.gson.JsonObject") )|| (vt.getType().equalsIgnoreCase("java.lang.String")))
{
log.debug("Got String/Json variable");
if(metaMap.get(key)!=null)
log.debug("The value of "+key+" is "+metaMap.get(key));
}
}
log.debug("Finished logging variable info for "+ workItem.getWorkflow().getWorkflowModel().getTitle()+" workflow ");
log.debug("Finished logging variable info for payload path "+ workItem.getWorkflowData().getPayload().toString());
}
}
Los documentos se guardan en la carpeta raíz de la instalación del servidor de AEM.
Implementar el paquete de muestra
Implementar el paquete de registrador de variables mediante la consola web Felix.
Asocie este paquete con un paso del proceso en el flujo de trabajo de AEM para registrar el valor de la variable String y Document.
Página anteriorEditor de reglas en AEM Workflow
Página siguiente1 - Introducción