2017-10-18 163 views
0

我的總體目標是:啓動一個運行java類的流程步驟,該流程步驟收集一個列表,然後在下一個工作流程步驟中需要顯示在自定義對話框中。AEM工作流程 - 使用在前面的流程步驟中收集的數據設置自定義對話框中的值

這是我到目前爲止有:

  • 的Java類,使用把元數據和保存列表到元數據
  • 所作的自定義對話框,使用一個textarea這也正是這個列表需要顯示
  • 檢索從元數據

,我現在的問題是獲取列表中的另一Java類:我怎樣才能獲取列表從元數據在我的自定義迪展現一個日誌?

我一直在尋找的年齡和似乎沒有人

+1

能否請您分享一個包,源代碼是什麼你到目前爲止做了什麼?或者更簡單的版本?我相信我可能有辦法做你想問的事情,但我想先測試一下。 –

+0

我現在沒有寫任何特別的東西,這是一個概念證明,我們只是想看看它是否可能。 2 java文件,一種是採用把'workItem.getWorkflowData()getMetaDataMap()把( 「referencingList」, 「testValueForDialog」);' 和另一種是使用get:。 '字符串值= workItem.getWorkflowData( ).getMetaDataMap()。get(「referencingList」,java.lang.String.class);' – James

+0

應該有可能,花崗岩UI小部件的組件填充方式實際上是通過從預填充的請求屬性中獲取值,即「granite.ui.form.values」。所以基本上,如果在處理任何花崗岩小部件之前將所有值設置爲值映射並將其設置爲請求屬性「granite.ui.form.values」,那麼您將有效地預填充該對話框。如果你可以製作一個骨架工作流程,我可以把它變成一個工作形狀。 –

回答

0

以往任何時候都做到了。請注意:這個答案進行了測試,在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:

workflow dialog

這裏是一個包,你可以下載並安裝

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

+0

非常感謝! – James