工作流程模型包含一系列各種型別的步驟。 根據型別,您可以使用引數和指令碼來設定和擴充這些步驟,以提供您需要的功能和控制項。
每個步驟元件都有 步驟屬性 對話方塊,讓您定義及編輯必要的屬性。
下列屬性的組合可用於大部分的工作流程步驟元件,位於 通用 屬性對話方塊的標籤:
標題
步驟的標題。
說明
步驟的說明。
工作流程分段
要套用的下拉式選擇器 階段 跳到步驟。
逾時
步驟「逾時」之前的期間。
您可以選取: 關閉, 立即, 1h, 6h, 12h, 24h.
逾時處理常式
控制步驟逾時的工作流程的處理常式。 例如 Auto Advancer
處理常式前進
選取此選項可自動將工作流程推進至執行後的下一個步驟。 如果未選取,實作指令碼必須處理工作流程推進。
下列屬性適用於許多工作流程步驟元件,位於 使用者/群組 屬性對話方塊的標籤:
透過電子郵件通知使用者
使用者/群組
此 AND拆分 會在工作流程中建立分割,之後兩個分支都會啟用。 您可以視需要將工作流程步驟新增到每個分支。 此步驟可讓您將多個處理路徑匯入工作流程中。 例如,您可以允許並行執行某些稽核步驟,以節省時間。
若要設定分割:
編輯 AND拆分屬性:
視需要將工作流程步驟新增到分支。
容器步驟會啟動另一個作為子工作流程執行的工作流程模型。
此容器可讓您重複使用工作流程模型,以實施常見的步驟順序。 例如,翻譯工作流程模型可用於多個編輯工作流程。
若要設定此步驟,請編輯並使用下列標籤:
容器
此 移至步驟 可讓您指定要在工作流程模型中執行的下一個步驟。 您可以將規則定義、外部指令集或ECMA指令集指定為路由表示式,以評估工作流程模型的下一個步驟。
此 移至步驟 可讓您在工作流程模型中匯入進階路由結構。 例如,若要實作回圈, 移至步驟 可定義以執行工作流程中的先前步驟,而路由運算式會評估回圈條件。
若要設定此步驟,請編輯並使用下列標籤:
程序
目標步驟:選取評估路由運算式的條件後要執行的步驟。
路由運算式:選取規則定義、外部指令碼或決定是否執行 目標步驟.
模擬「for回圈」需要您維持已發生回圈迭代次數的計數:
例如,若要實作在數個JCR節點上執行動作的工作流程,您可以使用回圈計數器作為節點的索引。 若要保留計數,請儲存 integer
工作流程例項的資料地圖中的值。 若要遞增計數並與退出條件比較,請使用 移至步驟.
function check(){
var count=0;
var keyname="loopcount"
try{
if (workflowData.getMetaDataMap().containsKey(keyname)){
log.info("goto script: found loopcount key");
count= parseInt(workflowData.getMetaDataMap().get(keyname))+1;
}
workflowData.getMetaDataMap().put(keyname,count);
}catch(err) {
log.info(err.message);
return false;
}
if (parseInt(count) <7){
return true;
} else {
return false;
}
}
您也可以使用「規則定義」作為路由運算式來模擬for回圈。 建立 count 變數 長資料型別的。 使用 運算式 作為中的對應模式 設定變數 步驟以設定的 count 變數至 count + 1 每次執行 設定變數 步驟。
在 移至步驟,使用 設定變數 作為 目標步驟 和 計數< 5 作為路由運算式。
此 設定變數 步驟會重複執行,增加 count 變數乘以1,直到值達到5。
此 OR拆分 會在工作流程中建立分割,之後只有一個分支處於作用中狀態。 此步驟可讓您將條件式處理路徑匯入工作流程中。 您可以視需要將工作流程步驟新增到每個分支。
另請參閱 OR拆分步驟
若要設定分割:
編輯 OR拆分屬性:
常見
分支(x)
另請參閱 定義OR分割的規則.
視需要將工作流程步驟新增到分支。
A 參與者步驟 可讓您指派特定動作的所有權。 只有在使用者手動確認該步驟時,工作流程才會繼續。 如果您希望某人執行工作流程,請使用此工作流程。 例如,稽核步驟。
雖然與工作流程並非直接相關,但在指派動作時必須考量使用者授權;使用者必須擁有工作流程裝載頁面的存取權。
若要設定此步驟,請編輯並使用下列標籤:
當發生下列情況時,一律會通知工作流程發起人:
某些屬性必須設定為啟用電子郵件通知。 您也可以自訂電子郵件範本,或新增新語言的電子郵件範本。 若要在AEM中設定電子郵件通知,請參閱 設定電子郵件通知.
使用 對話方塊參與者步驟 以向被指派工作專案的使用者收集資訊。 此步驟對於收集稍後在工作流程中使用的少量資料很有用。
完成步驟後, 完成工作專案 對話方塊包含您在對話方塊中定義的欄位。 在欄位中收集的資料會儲存在工作流程裝載的節點中。 接著,後續的工作流程步驟就可以從存放庫讀取值。
若要配置步驟,請指定工作專案指派的目標群組或使用者,以及對話方塊的路徑。
若要設定此步驟,請編輯並使用下列標籤:
若要建立對話方塊,您必須建立對話方塊:
您可以將Widget資料儲存在工作流程裝載或工作專案中繼資料中。 的格式 name
widget節點的屬性會決定資料儲存的位置。
使用承載儲存資料
若要將Widget資料儲存為工作流程裝載的屬性,請為Widget節點的name屬性值使用以下格式:
./jcr:content/nodename
資料會儲存在 nodename
裝載節點的屬性。 如果節點不包含該屬性,則會建立屬性。
與裝載一併儲存時,後續使用具有相同裝載的對話方塊會覆寫屬性的值。
使用工作專案儲存資料
若要將Widget資料儲存為工作專案中繼資料的屬性,請為name屬性的值使用下列格式:
nodename
資料會儲存在 nodename
工作專案的屬性 metadata
. 如果之後將對話方塊用於相同的裝載,則會保留資料。
對話方塊結構
對話方塊參與者步驟的對話方塊類似於您為編寫元件而建立的對話方塊。 它們會儲存在:
/apps/myapp/workflow/dialogs
標準、觸控式UI的對話方塊具有以下節點結構:
newComponent (cq:Component)
|- cq:dialog (nt:unstructured)
|- content
|- layout
|- items
|- column
|- items
|- component0
|- component1
|- ...
另請參閱 建立和設定對話方塊.
對話方塊路徑屬性
此 對話方塊參與者步驟 具有 對話方塊路徑 屬性(連同 參與者步驟)。 的值 對話方塊路徑 屬性是 dialog
對話方塊的節點。
例如,對話方塊包含在名為的元件中 EmailWatch
儲存在節點中的變數:
/apps/myapp/workflows/dialogs
對於觸控式UI,下列值會用於 對話方塊路徑 屬性:
/apps/myapp/workflow/dialogs/EmailWatch/cq:dialog
對話方塊定義範例
下列XML程式碼片段代表儲存 String
中的值 watchEmail
裝載內容的節點。 標題節點代表 文字欄位 元件:
jcr:primaryType="nt:unstructured"
jcr:title="Watcher Email Address Dialog"
sling:resourceType="cq/gui/components/authoring/dialog">
<content jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/foundation/container">
<layout jcr:primaryType="nt:unstructured"
margin="false"
sling:resourceType="granite/ui/components/foundation/layouts/fixedcolumns"
/>
<items jcr:primaryType="nt:unstructured">
<column jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/foundation/container">
<items jcr:primaryType="nt:unstructured">
<title jcr:primaryType="nt:unstructured"
fieldLabel="Notification Email Address"
name="./jcr:content/watchEmails"
sling:resourceType="granite/ui/components/foundation/form/textfield"
/>
</items>
</column>
</items>
</content>
</cq:dialog>
在觸控式UI中,此範例會產生一個對話方塊,如下所示:
此 動態參與者步驟 元件類似於 參與者步驟 不同之處在於,參與者會在執行階段自動選取。
若要設定此步驟,請選取 參與者選擇器 識別指派工作專案給的參與者,以及對話方塊。
若要設定此步驟,請編輯並使用下列標籤:
參與者選擇器
對話方塊
您可以建立參與者選擇器。 因此,您可以使用任何選擇邏輯或條件。 例如,您的參與者選擇器可以選取工作專案最少的使用者(在群組內)。 您可以建立任意數目的參與者選擇器,以搭配不同的執行個體使用 動態參與者步驟 元件建立的工作流程模型。
建立OSGi服務或ECMAScript,以選取要指派工作專案的使用者。
ECMAscript
指令碼必須包含名為getParticipant的函式,此函式會將使用者ID傳回為 String
值。 將您的自訂指令碼儲存在,例如 /apps/myapp/workflow/scripts
資料夾或子資料夾。
範例指令碼包含在標準AEM例項中:
/libs/workflow/scripts/initiator-participant-chooser.ecma
請勿變更中的任何專案 /libs
路徑。
原因是因為的內容 /libs
下次升級執行個體時會被覆寫(並在套用hotfix或feature pack時可能被覆寫)。
此指令碼會選取工作流程發起人作為參與者:
function getParticipant() {
return workItem.getWorkflow().getInitiator();
}
此 工作流程發起人參與者選擇器 元件延伸 動態參與者步驟 和會使用此指令碼作為步驟實施。
OSGi服務
服務必須實作 com.day.cq.workflow.exec.ParticipantStepChooser 介面。 介面會定義下列成員:
SERVICE_PROPERTY_LABEL
欄位:使用此欄位可指定參與者選擇器的名稱。 此名稱會顯示在中的可用參與者選擇器清單中。 動態參與者步驟 屬性。
getParticipant
方法:傳回動態解析的主體ID為 String
值。
此 getParticipant
方法會傳回動態解析的主體id。 此ID可以是群組ID或使用者ID。
不過,群組ID只能用於 參與者步驟,當傳回參與者清單時。 針對 動態參與者步驟,會傳回空白清單且無法用於委派。
若要讓您的實作可供 動態參與者步驟 元件、將您的Java™類別新增至匯出服務的OSGi套件組合,然後將套件組合部署至AEM伺服器。
隨機參與者選擇器 是選取隨機使用者的範例服務( com.day.cq.workflow.impl.process.RandomParticipantChooser
)。 此 隨機參與者選擇 r步驟元件範例會擴充 動態參與者步驟 並使用此服務作為步驟實作。
以下Java™類別實作 ParticipantStepChooser
介面。 類別會傳回啟動工作流程的參與者名稱。 程式碼使用的邏輯與範例指令碼(initiator-participant-chooser.ecma
)使用。
此 @Property
註解設定 SERVICE_PROPERTY_LABEL
欄位至 Workflow Initiator Participant Chooser
.
package com.adobe.example;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.osgi.framework.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.ParticipantStepChooser;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.metadata.MetaDataMap;
@Component
@Service
@Properties({
@Property(name = Constants.SERVICE_DESCRIPTION, value = "An example implementation of a dynamic participant chooser."),
@Property(name = ParticipantStepChooser.SERVICE_PROPERTY_LABEL, value = "Workflow Initiator Participant Chooser (service)") })
public class InitiatorParticipantChooser implements ParticipantStepChooser {
private Logger logger = LoggerFactory.getLogger(this.getClass());
public String getParticipant(WorkItem arg0, WorkflowSession arg1,
MetaDataMap arg2) throws WorkflowException {
String initiator = arg0.getWorkflow().getInitiator();
logger.info("Assigning Dynamic Participant Step work item to {}",initiator);
return initiator;
}
}
在 動態參與者步驟 屬性對話方塊, 參與者選擇器 清單包含專案 Workflow Initiator Participant Chooser (script)
,代表此服務。
啟動工作流程模型時,記錄會指出啟動工作流程的使用者ID以及工作專案的指派者。 在此範例中, admin
使用者已啟動工作流程。
13.09.2015 15:48:53.037 *INFO* [10.176.129.223 [1347565733037] POST /etc/workflow/instances HTTP/1.1] com.adobe.example.InitiatorParticipantChooser Assigning Dynamic Participant Step work item to admin
此 表單參與者步驟 在工作專案開啟時顯示表單。 當使用者填寫並提交表單時,欄位資料儲存在工作流程裝載的節點中。
若要設定步驟,請指定工作專案指派的目標群組或使用者,以及表單的路徑。
本節將說明 用於頁面編寫的基礎元件的Forms區段.
若要設定此步驟,請編輯並使用下列標籤:
建立表單以用於 表單參與者步驟 如往常一樣。 不過,表單參與者步驟的表單必須具備下列設定:
此 表單的開頭 元件必須具有 動作型別 屬性設定為 Edit Workflow Controlled Resource(s)
.
此 表單的開頭 元件必須有一個值 Form Identifier
屬性。
表單元件必須具有 元素名稱 屬性會設定為儲存欄位資料之節點的路徑。 路徑必須在工作流程裝載內容中找出節點。 值會使用以下格式:
./jcr:content/path_to_node
表單必須包含 工作流程提交按鈕 元件。 您未設定元件的任何屬性。
工作流程的要求決定了您應將欄位資料儲存的位置。 例如,欄位資料可用於設定頁面內容的屬性。 下列的值 元素名稱 屬性會將欄位資料儲存為 redirectTarget
的屬性 jcr:content
節點:
./jcr:content/redirectTarget
在下列範例中,欄位資料會用作 文字 承載頁面上的元件:
./jcr:content/par/text_3/text
第一個範例可用於 cq:Page
元件呈現。 第二個範例只能用於裝載頁面包含 文字 ID為的元件 text_3
.
表單可以位於存放庫中的任何位置,但工作流程使用者必須獲得讀取表單的授權。
此 隨機參與者選擇器 步驟是一個參與者選擇器,可將產生的工作專案指派給從清單中隨機選取的使用者。
若要設定此步驟,請編輯並使用下列標籤:
引數
此 工作流程發起人參與者選擇器 步驟是一個參與者選擇器,可將產生的工作專案指派給啟動工作流程的使用者。 除了以下專案外,沒有可設定的屬性: 通用 屬性。
若要設定此步驟,請使用下列標籤進行編輯:
A 程式步驟 執行ECMAScript或呼叫OSGi服務以執行自動處理。
若要設定此步驟,請編輯並使用下列標籤:
程序
程式:要執行的程式實作。 使用下拉式功能表選取ECMAScript或OSGi服務。 關於後述資訊::
處理常式前進:選取此選項可自動將工作流程推進執行後的下一個步驟。 如果未選取,實作指令碼必須處理工作流程推進。
引數:要傳遞給處理程式的引數。
「設定變數」步驟可讓您設定變數的值,並定義值的設定順序。 變數的設定順序,是依照變數對應在「設定變數」步驟中的列示順序而定。
若要設定此步驟,請編輯並使用下列標籤:
映射
選取變數: 使用此選項可選取變數以設定其值。
選取對應模式: 若要設定變數的值,請選取對應模式。 視變數的資料型別而定,您可以使用下列選項來設定變數的值:
指定值: 若要對應至變數,請指定值。 您在此欄位中指定的值取決於對應模式。
新增對應: 使用此選項可新增更多對應以設定變數的值。