AEM工作流程 - 使用先前流程步骤中收集的数据在自定义对话框中设置值

时间:2017-10-18 17:05:54

标签: adobe aem

我的总体目标是:启动一个运行收集列表的java类的流程步骤,然后在下一个工作流程步骤中,该列表需要显示在自定义对话框中。

这是我到目前为止所做的:

  • 使用元数据放置的Java类并将列表保存到元数据中
  • 使用textarea创建的自定义对话框,该列表需要显示此列表
  • 另一个检索的Java类从元数据中获取列表

我现在遇到的问题是:如何从我的自定义对话框中显示的元数据中获取列表?

我一直在寻找年龄,似乎没有人曾经这样做过

1 个答案:

答案 0 :(得分:0)

  

请注意:此答案是在AEM 6.3上测试和开发的

这是一个简单的花岗岩UI小部件,用于显示当前工作流程MetaDataMap中的所有键/值对(包括先前工作流程步骤中设置的那些)

首先,让我们创建工作流程对话框:

在应用下创建一个组件:/apps/so-wf-test/wf-components/wf-metadata

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" 
    componentGroup=".hidden"
    jcr:primaryType="cq:Component"
    jcr:title="A dummy component needed for the dialog"
    sling:resourceSuperType="foundation/components/parbase"/>

创建对话框:/apps/so-wf-test/wf-components/wf-metadata/cq:dialog

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
    jcr:primaryType="nt:unstructured"
    jcr:title="Display all workflow metadata"
    sling:resourceType="cq/gui/components/authoring/dialog">
    <content
        jcr:primaryType="nt:unstructured"
        sling:resourceType="granite/ui/components/foundation/container">
        <layout
            jcr:primaryType="nt:unstructured"
            sling:resourceType="granite/ui/components/foundation/layouts/fixedcolumns"/>
        <items jcr:primaryType="nt:unstructured">
            <columns
                jcr:primaryType="nt:unstructured"
                sling:resourceType="granite/ui/components/foundation/container">
                <items jcr:primaryType="nt:unstructured">
                    <metadataList
                       jcr:primaryType="nt:unstructured"
                       sling:resourceType="/apps/so-wf-test/wf-granite-widgets/wf-metadata-list"/>
                </items>
            </columns>
        </items>
    </content>
</jcr:root>
  

请注意,上面的对话框包含一个自定义花岗岩小部件,用于显示元数据列表:<metadataList jcr:primaryType="nt:unstructured" sling:resourceType="/apps/so-wf-test/wf-granite-widgets/wf-metadata-list"/>

现在花岗岩小工具JSP

创建吊索文件夹:/apps/so-wf-test/wf-granite-widgets/wf-metadata-list

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
    jcr:primaryType="sling:Folder"/>

内部创建wf-metadata-list.jsp

  

这可以通过使用API​​或吊索模型与HTL或通过servlet完成。为了这个答案的目的,我使用JSP进行快速解决。

<%@include file="/libs/granite/ui/global.jsp"%><%
%><%@page import="com.adobe.granite.workflow.WorkflowSession,
                  com.adobe.granite.workflow.exec.WorkItem,
                  com.adobe.granite.workflow.exec.WorkflowData,
                  com.adobe.granite.workflow.metadata.MetaDataMap,
                  org.slf4j.Logger,
                  org.slf4j.LoggerFactory"%>
<%
    // get a logger
    Logger logger = LoggerFactory.getLogger(this.getClass());

    // when a workflow dialog is requested, the workitem id is passed as an attribute "item"
    String workitemId = request.getParameter("item");

    // get workflow session
    WorkflowSession wfSession = resourceResolver.adaptTo(WorkflowSession.class);

    // get the current workitem
    WorkItem workitem = wfSession.getWorkItem(workitemId);

    // get workflow data
    WorkflowData workflowData = workitem.getWorkflowData();

    // get metadata map 
    MetaDataMap metaDataMap = workflowData.getMetaDataMap();

%>
    <h1>MetaDataMap Values:</h1>
<ul>
    <% 
       // Iterate over metaDataMap and print all key/val pairs to a list item
       for (Object entry : metaDataMap.keySet())
       {
          Object objVal = metaDataMap.get(entry);
          String val =  objVal == null ? "" : objVal.toString();

          %>
        <li><h3><%=entry%>:  <%=val%></h3></li>
          <%
       }
    %>
</ul>

**现在jsut将对话框连接到对话框工作流程步骤** 使用路径/apps/so-wf-test/dialogs/wf-dialog/cq:dialog"

工作流程到达对话步骤后,您将看到元数据项列表。

示例:

我创建了一个具有简单步骤的工作示例

  • 第1步:将"someKey"="SOME VALUE"添加到MetaDataMap
  • 第2步:获取"someKey"并打印
  • 第3步:指向上方对话框的对话步骤

以下是对话框的情景:

workflow dialog

这是一个可以下载和安装的软件包

  

https://drive.google.com/file/d/0B-_At1NXpw0EOFNaUVdYcGVHNnM/view?usp=sharing