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

标签 adobe aem

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

这是我到目前为止所拥有的:

  • 使用元数据 put 并将列表保存到元数据中的 Java 类
  • 使用文本区域制作的自定义对话框,这是需要显示此列表的位置
  • 另一个从元数据中检索列表的 Java 类

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

我已经寻找了很长时间,似乎以前没有人做过

最佳答案

Please note: this answer was tested and developed on AEM 6.3

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

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

在apps下创建组件:/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>

note that above dialog includes a custom granite widget to display the metdata list: <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 :

This can be done via Use API or sling models with HTL Or via a servlet. I went with JSP for fast solution for the purposes of this answer.

<%@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>

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

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

示例:

我创建了一个包含简单步骤的工作示例

  • 第 1 步:添加 "someKey"="SOME VALUE"到元数据映射
  • 第 2 步:获取 "someKey"并打印出来
  • 第 3 步:指向上面对话框的对话框步骤

这是对话框的截图:

workflow dialog

这是您可以下载并安装的软件包

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

关于adobe - AEM 工作流程 - 使用上一流程步骤中收集的数据在自定义对话框中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46815590/

相关文章:

flash - 我的项目渲染器没有找到属性 "data."

javascript - 使用 ExtendScript 访问内部预合成层

aem - Apache Sling - 在 Windows 中启动时的 OSGI 框架异常

adobe - Adobe EchoSign 如何工作?

python - 导入 matplotlib afm 速度极慢

java - 当我以编程方式在 aem 6.2 (6.1) 中创建组和用户时出现 AccessDeniedException?

java - AEM 中的哪个类实现 javax.servlet.RequestDispatcher 接口(interface)?

java - 具有模式 < IS( > 或 < IF( > 的 Servlet 请求被阻止 apache/adobe experience manager

java - 如何覆盖 AEM 中 RSS 源的默认功能?

javascript - Canvas 时间线不与音频同步