Passaggio processo personalizzato

Questo tutorial è destinato ai clienti di AEM Forms che devono implementare un passaggio di processo personalizzato. Un passaggio del processo può eseguire uno script ECMA o richiamare un codice Java personalizzato per eseguire le operazioni. Questo tutorial illustra i passaggi necessari per implementare WorkflowProcess che viene eseguito dal passaggio del processo.

Il motivo principale per l’implementazione della fase di processo personalizzata è l’estensione del flusso di lavoro AEM. Ad esempio, se utilizzi i componenti AEM Forms nel modello di flusso di lavoro, potrebbe essere utile eseguire le seguenti operazioni

  • Salva gli allegati del modulo adattivo nel file system
  • Manipolare i dati inviati

Per eseguire il caso d’uso precedente, in genere si scrive un servizio OSGi che viene eseguito dal passaggio del processo.

Crea progetto Maven

Il primo passaggio consiste nel creare un progetto Maven utilizzando l’archetipo Maven di Adobe appropriato. I passaggi dettagliati sono elencati in articolo. Una volta importato il progetto Maven nell’eclissi, sei pronto per iniziare a scrivere il primo componente OSGi che può essere utilizzato nel passaggio del processo.

Crea classe che implementa WorkflowProcess

Apri il progetto Maven nell’IDE dell’eclissi. Espandi nomeprogetto > core cartella. Espandi la cartella src/main/java. Dovresti vedere un pacchetto che termina con "core". Creare la classe Java che implementa WorkflowProcess in questo pacchetto. Dovrai sovrascrivere il metodo di esecuzione. La firma del metodo execute è la seguente: public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap processArguments)throws WorkflowException Il metodo execute consente l'accesso alle 3 variabili seguenti

WorkItem: la variabile workItem consente di accedere ai dati relativi al flusso di lavoro. È disponibile la documentazione API pubblica qui.

WorkflowSession: questa variabile workflowSession consente di controllare il flusso di lavoro. È disponibile la documentazione API pubblica qui

MetaDataMap: tutti i metadati associati al flusso di lavoro. Tutti gli argomenti di processo passati alla fase del processo sono disponibili utilizzando l'oggetto MetaDataMap.Documentazione API

In questa esercitazione scriveremo gli allegati aggiunti al modulo adattivo nel file system come parte del flusso di lavoro AEM.

Per eseguire questo caso d’uso, è stata scritta la seguente classe java

Vediamo questo codice

package com.learningaemforms.adobe.core;

import java.io.File;
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 + "=Write Adaptive Form Attachments to File System",
    Constants.SERVICE_VENDOR + "=Adobe Systems",
    "process.label" + "=Save Adaptive Form Attachments to File System"
})
public class WriteFormAttachmentsToFileSystem implements WorkflowProcess {

    private static final Logger log = LoggerFactory.getLogger(WriteFormAttachmentsToFileSystem.class);
    @Reference
    QueryBuilder queryBuilder;

    @Override
    public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap processArguments)
    throws WorkflowException {
        // TODO Auto-generated method stub
        log.debug("The string I got was ..." + processArguments.get("PROCESS_ARGS", "string").toString());
        String[] params = processArguments.get("PROCESS_ARGS", "string").toString().split(",");
        String attachmentsPath = params[0];
        String saveToLocation = params[1];
        log.debug("The seperator is" + File.separator);
        String payloadPath = workItem.getWorkflowData().getPayload().toString();
        Map<String, String> map = new HashMap<String, String> ();
        map.put("path", payloadPath + "/" + attachmentsPath);
        File saveLocationFolder = new File(saveToLocation);
        if (!saveLocationFolder.exists()) {
            saveLocationFolder.mkdirs();
        }

        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("Got  " + result.getHits().size() + " attachments ");
        Node attachmentNode = null;
        for (Hit hit: result.getHits()) {
            try {
                String path = hit.getPath();
                log.debug("The attachment title is  " + hit.getTitle() + " and the attachment path is  " + path);
                attachmentNode = workflowSession.adaptTo(Session.class).getNode(path + "/jcr:content");
                InputStream documentStream = attachmentNode.getProperty("jcr:data").getBinary().getStream();
                Document attachmentDoc = new Document(documentStream);
                attachmentDoc.copyToFile(new File(saveLocationFolder + File.separator + hit.getTitle()));
                attachmentDoc.close();
            } catch (Exception e) {
                log.debug("Error saving file " + e.getMessage());
            }

Riga 1 - definisce le proprietà del componente. La proprietà process.label è ciò che verrà visualizzato quando si associa il componente OSGi alla fase del processo, come illustrato in una delle schermate riportate di seguito.

Righe 13-15 - Gli argomenti di processo passati a questo componente OSGi vengono suddivisi utilizzando il separatore ",". I valori per attachmentPath e saveToLocation vengono quindi estratti dalla matrice di stringhe.

  • attachmentPath: si tratta della stessa posizione specificata nel modulo adattivo quando è stata configurata l’azione di invio del modulo adattivo per richiamare il flusso di lavoro AEM. Questo è il nome della cartella in cui si desidera salvare gli allegati in AEM rispetto al payload del flusso di lavoro.

  • saveToLocation: è la posizione in cui si desidera salvare gli allegati nel file system del server AEM.

Questi due valori vengono passati come argomenti del processo, come illustrato nella schermata seguente.

ProcessStep

Il servizio QueryBuilder viene utilizzato per eseguire query sui nodi di tipo nt:file nella cartella attachmentPath. Il resto del codice scorre i risultati della ricerca per creare l'oggetto Document e salvarlo nel file system

NOTA

Poiché si utilizza un oggetto Document specifico di AEM Forms, è necessario includere nel progetto Maven la dipendenza aemfd-client-sdk. L’ID del gruppo è com.adobe.aemfd e l’ID dell’artefatto è aemfd-client-sdk.

Creare e distribuire

Crea il bundle come descritto qui
Assicurati che il bundle sia distribuito e in stato attivo

Crea un modello di flusso di lavoro. Trascina e rilascia il passaggio del processo nel modello di flusso di lavoro. Associare la fase del processo con "Salva allegati modulo adattivo nel file system".

Fornisci gli argomenti di processo necessari separati da una virgola. Ad esempio Allegati,c:\scrappp\. Il primo argomento è la cartella in cui verranno memorizzati gli allegati del modulo adattivo relativi al payload del flusso di lavoro. Questo deve essere lo stesso valore specificato durante la configurazione dell’azione di invio del modulo adattivo. Il secondo argomento è la posizione in cui si desidera memorizzare gli allegati.

Creare un modulo adattivo. Trascina il componente File allegati sul modulo. Configura l'azione di invio del modulo per richiamare il flusso di lavoro creato nei passaggi precedenti. Specificare il percorso di collegamento appropriato.

Salva le impostazioni.

Visualizzare l'anteprima del modulo. Aggiungi un paio di allegati e invia il modulo. Gli allegati devono essere salvati nel file system nel percorso specificato dall'utente nel flusso di lavoro.

In questa pagina