AEM工作流程 - 使用在前面的流程步骤中收集的数据设置自定义对话框中的值
我的总体目标是:启动一个运行java类的流程步骤,该流程步骤收集一个列表,然后在下一个工作流程步骤中需要显示在自定义对话框中。AEM工作流程 - 使用在前面的流程步骤中收集的数据设置自定义对话框中的值
这是我到目前为止有:
- 的Java类,使用把元数据和保存列表到元数据
- 所作的自定义对话框,使用一个textarea这也正是这个列表需要显示
- 检索从元数据
,我现在的问题是获取列表中的另一Java类:我怎样才能获取列表从元数据在我的自定义迪展现一个日志?
我一直在寻找的年龄和似乎没有人
以往任何时候都做到了。请注意:这个答案进行了测试,在AEM 6.3
这里开发的是一个简单的花岗岩UI小部件以显示当前工作流程MetaDataMap
中的所有键/值对(包括之前工作流程步骤中设置的项目)
F IRST,让我们创建工作流对话框:
下创建应用程序的组件:/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>
注意,上面的对话框包含自定义花岗石构件显示metdata列表:
<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>
**现在仅仅指刚丝的对话框到使用/apps/so-wf-test/dialogs/wf-dialog/cq:dialog"
一旦工作流程达到对话步骤的路径您的对话框工作流步骤** ,你会看到的元数据项的列表。
实施例:
我已经创建了具有简单的步骤
- 步骤1的工作示例:添加
"someKey"="SOME VALUE"
到MetaDataMap - 步骤2:得到
"someKey"
和打印 - 步骤3:指向上述对话框的对话步骤
下面是对话的sceenshot:
这里是一个包,你可以下载并安装
https://drive.google.com/file/d/0B-_At1NXpw0EOFNaUVdYcGVHNnM/view?usp=sharing
非常感谢! – James
能否请您分享一个包,源代码是什么你到目前为止做了什么?或者更简单的版本?我相信我可能有办法做你想问的事情,但我想先测试一下。 –
我现在没有写任何特别的东西,这是一个概念证明,我们只是想看看它是否可能。 2 java文件,一种是采用把'workItem.getWorkflowData()getMetaDataMap()把( “referencingList”, “testValueForDialog”);' 和另一种是使用get:。 '字符串值= workItem.getWorkflowData( ).getMetaDataMap()。get(“referencingList”,java.lang.String.class);' – James
应该有可能,花岗岩UI小部件的组件填充方式实际上是通过从预填充的请求属性中获取值,即“granite.ui.form.values”。所以基本上,如果在处理任何花岗岩小部件之前将所有值设置为值映射并将其设置为请求属性“granite.ui.form.values”,那么您将有效地预填充该对话框。如果你可以制作一个骨架工作流程,我可以把它变成一个工作形状。 –