工作流程步驟參考

工作流模型由各種類型的一系列步驟組成。 根據類型,這些步驟可以設定並擴充為參數和指令碼,以提供您所需的功能和控制。

注意

本節介紹標準工作流程步驟。

有關模組的特定步驟,另請參閱:

步驟屬性

每個步驟元件都有一個​步驟屬性​對話框,允許您定義和編輯所需屬性。

步驟屬性 — 公共頁簽

屬性對話框的​Common​頁簽上提供了以下屬性組合,可用於大多數工作流步驟元件:

  • 標題

    步驟的標題。

  • 說明

    步驟的說明。

  • 工作流程分段

    Stage套用至步驟的下拉式選取器。

  • 逾時

    此步驟之後將「逾時」的時段。

    您可以選取:Off,Immediate,1h,6h,12h,24h

  • 逾時處理常式

    步驟逾時時控制工作流程的處理常式;例如:

    Auto Advancer

  • 處理常式前進

    選取此選項,即可在執行後自動將工作流程推進至下一個步驟。 如果未選取,實施指令碼必須處理工作流程進階。

步驟屬性 — 「用戶/組」頁簽

以下屬性可用於屬性對話框的​用戶/組​頁簽上的許多工作流步驟元件:

  • 通過電子郵件通知用戶

    • 您可以在工作流到達步驟時向參與者發送電子郵件,以通知他們。
    • 如果啟用,則會向由屬性​User/Group​定義的用戶發送電子郵件;如果已定義組,則向組的每個成員發送電子郵件。
  • 使用者/群組

    • 下拉式選取方塊可讓您導覽並選取使用者或群組。
    • 如果您將步驟指派給特定使用者,則只有此使用者可以對步驟採取動作。
    • 如果您將步驟指派給整個組,則當工作流到達此步驟時,此組中的所有用戶將在其​工作流收件箱​中執行操作。
    • 如需詳細資訊,請參閱參與工作流程

AND 拆分

AND Split​會在工作流程中建立分割,之後兩個分支都會生效。 您可以視需要將工作流程步驟新增至每個分支。 此步驟可讓您將多個處理路徑引入工作流程中。 例如,您可以允許同時執行某些審核步驟,以節省時間。

wf-26

和分割 — 配置

  • 編輯​AND Split​屬性:

    • 拆分名稱:為解釋目的指定名稱。
    • 選取所需的分支數;2、3、4或5。
  • 視需要將工作流程步驟新增至分支。

    wf-27

容器步驟

容器​步驟將啟動作為子工作流運行的另一個工作流模型。

此​容器​可讓您重複使用工作流模型以實施常見的步驟順序。 例如,翻譯工作流程模型可用於多個編輯工作流程。

wf-28

容器步驟 — 配置

若要設定此步驟,請編輯並使用下列標籤:

  • 常見

  • 容器

    • 子工作流:選取要啟動的工作流程。

移至步驟

轉到步驟​允許您根據ECMAScript的結果指定要執行的工作流模型中的下一步:

  • true:「轉 步驟完成」(Goto Stepcompletes),工作流引擎將執行指定的步驟。

  • false:「轉 步驟」和正常的路由邏輯決定下一個要執行的步驟。

轉至步驟​允許您在工作流模型中實施高級路由結構。 例如,要實施循環,可以定義​轉到步驟​以執行工作流中的前一步驟,指令碼將評估循環條件。

轉到步驟 — 配置

若要設定此步驟,請編輯並使用下列標籤:

  • 常見

  • 程序

    • 前往​的步驟:選取要執行的步驟。
    • 指令碼路徑:ECMAScript的路徑,它確定是否執行「轉 到步驟」
    • 指令碼:確定是否執行「轉到步 驟」的ECMAScript
注意

指定​指令碼路徑​或​指令碼。 兩個選項不能同時使用。 如果為這兩個屬性指定值,則步驟使用​指令碼路徑

模擬環的

模擬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;
   }
}

OR 拆分

OR Split​會在工作流中建立分割,之後只會有一個分支生效。 此步驟可讓您將條件式處理路徑引入工作流程中。 您可以視需要將工作流程步驟新增至每個分支。

注意

有關建立OR分割的詳細資訊,請參閱:https://helpx.adobe.com/experience-manager/using/aem64_workflow_servlet.html

wf-29

OR Split — 配置

  • 編輯​OR Split​屬性:

    • 常見

      • 選取所需的分支數;2、3、4或5。
    • 分支: x>

      • 指令碼路徑:包含指令碼的檔案的路徑。
      • 指令碼:在方塊中新增指令碼。
      • 預設路由:多個分支評估為true時,會依循預設分支。您只能指定一個分支作為預設值。
    注意

    每個分支都有個別的索引標籤:

    • 每個分支的指令碼一次評估一個。
    • 分支由左到右計算。
    • 會執行評估為true的第一個指令碼。
    • 如果沒有分支評估為true,則工作流程不會前進。
    注意

    指定​指令碼路徑​或​指令碼。 兩個選項不能同時使用。 如果為這兩個屬性指定值,則步驟使用​指令碼路徑

    注意
  • 視需要將工作流程步驟新增至分支。

參與者步驟和選擇器

參與者步驟

參與者步驟​允許您為特定操作分配所有權。 只有當使用者手動確認步驟時,工作流程才會繼續。 當您希望某人對工作流程採取動作時,就會使用此功能;例如,檢閱步驟。

雖然與用戶授權不直接相關,但在分配操作時必須考慮用戶授權;使用者必須擁有工作流程裝載之頁面的存取權。

參與者步驟 — 配置

若要設定此步驟,請編輯並使用下列標籤:

注意

當發生下列情況時,一律會通知工作流發起程式:

  • 工作流程已完成(已完成)。
  • 工作流程已中止(終止)。
注意

您需要設定某些屬性,才能啟用電子郵件通知。 您也可以自訂電子郵件範本,或為新語言新增電子郵件範本。 請參閱設定電子郵件通知以在AEM中設定電子郵件通知。

對話方塊參與者步驟

使用​對話參與者步驟​從分配了工作項的用戶收集資訊。 此步驟對於收集稍後用於工作流程的少量資料非常有用。

完成此步驟後,完成工作項​對話框包含您在對話框中定義的欄位。 在欄位中收集的資料會儲存在工作流程裝載的節點中。 之後的工作流程步驟便可從存放庫讀取值。

要配置步驟,請指定要為其分配工作項的組或用戶以及對話框的路徑。

對話參與者步驟 — 配置

若要設定此步驟,請編輯並使用下列標籤:

對話參與者步驟 — 建立對話

要建立對話框:

對話參與者步驟 — 在裝載中儲存資料

您可以在工作流程裝載或工作項元資料中儲存介面工具集資料。 介面工具集節點的name屬性格式決定資料的儲存位置。

  • 使用裝載儲存資料

    • 若要將Widget資料儲存為工作流程裝載的屬性,請對Widget節點的name屬性值使用以下格式:

      ./jcr:content/nodename

    • 資料儲存在有效負載節點的nodename屬性中。 如果節點不包含該屬性,則會建立屬性。

    • 與裝載一併儲存時,具有相同裝載之對話方塊的後續使用會覆寫屬性的值。

  • 將資料與工作項一起儲存

    • 要將Widget資料儲存為工作項元資料的屬性,請對name屬性的值使用以下格式:

      nodename

    • 資料儲存在工作項metadatanodename屬性中。 如果對話方塊後續與相同裝載搭配使用,則會保留資料。

對話參與者步驟 — 對話定義

  1. 對話框結構

    對話框參與者步驟對話框與為創作元件建立的對話框類似。 它們儲存在:

    /apps/myapp/workflow/dialogs

    標準觸控式UI的對話方塊具有下列節點結構:

    newComponent (cq:Component)
      |- cq:dialog (nt:unstructured)
        |- content 
          |- layout 
            |- items 
              |- column 
                |- items 
                  |- component0
                  |- component1
                  |- ...
    
    注意

    有關詳細資訊,請參閱建立和配置對話框

  2. 對話框路徑屬性

    對話參與者步驟​具有​對話路徑​屬性(連同參與者步驟的屬性)。 Dialog Path​屬性的值是對話框dialog節點的路徑。

    例如,該對話框包含在儲存在節點中名為EmailWatch的元件中:

    /apps/myapp/workflows/dialogs

    對於觸控式UI,對話方塊路徑​屬性會使用下列值:

    /apps/myapp/workflow/dialogs/EmailWatch/cq:dialog

    wf-30

  3. 示例對話框定義

    以下XML代碼片段表示一個對話框,該對話框將String值儲存在裝載內容的watchEmail節點中。 標題節點表示TextField元件:

    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的案例中,會產生下列對話方塊:

    chlimage_1-177

動態參與者步驟

動態參與者步驟​元件與​參與者步驟​類似,其差異是參與者在運行時自動選擇。

要配置步驟,請選擇​參與者選擇器,該選擇器標識要將工作項目分配給的參與者,並選擇對話框。

動態參與者步驟 — 配置

若要設定此步驟,請編輯並使用下列標籤:

動態參與者步驟 — 開發參與者選擇器

建立參與者選擇器。 因此,您可以使用任何選擇邏輯或條件。 例如,您的參與者選擇器可以選擇工作項目最少的用戶(在組內)。 您可以建立任意數量的參與者選擇器,以用於工作流模型中​動態參與者步驟​元件的不同實例。

建立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只能用於​參與者步驟。 對於​動態參與者步驟 ,返回一個空清單,該清單不能用於委派。

    若要讓您的實施可供​動態參與者步驟​元件使用,請將您的Java類添加到導出服務的OSGi捆綁包中,並將捆綁包部署到AEM伺服器。

    注意

    隨機參與 者選擇是選取隨機使用者( com.day.cq.workflow.impl.process.RandomParticipantChooser)的範例服務。隨機參與者選擇器​步驟元件示例擴展了​動態參與者步驟​並將此服務用作步驟實施。

動態參與者步驟 — 參與者選擇器服務示例

以下Java類實現ParticipantStepChooser介面。 類返回啟動工作流的參與者的名稱。 程式碼使用的邏輯與範例指令碼(initator-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

表單參與者步驟

表單參與者步驟​在開啟工作項時顯示表單。 當用戶填寫並提交表單時,欄位資料儲存在工作流裝載的節點中。

要配置步驟,請指定要為其分配工作項的組或用戶以及表單的路徑。

注意

本節內容為頁面編寫的Foundation元件🔗的Forms區段。

表單參與者步驟 — 配置

若要設定此步驟,請編輯並使用下列標籤:

表單參與者步驟 — 建立表單

建立表單,以便與​表單參與者步驟​一如常使用。 但是,表單參與者步驟的表單必須有下列配置:

  • Start of Form​元件必須將​Action Type​屬性設定為Edit Workflow Controlled Resource(s)

  • 表單的開頭​元件必須具有Form Identifier屬性的值。

  • 表單元件必須將​元素名稱​屬性設定為儲存欄位資料的節點路徑。 路徑必須在工作流程裝載內容中找到節點。 值使用下列格式:

    ./jcr:content/path_to_node

  • 表單必須包含​工作流程提交按鈕​元件。 不配置元件的任何屬性。

工作流程的需求決定您應將欄位資料儲存於何處。 例如,欄位資料可用來設定頁面內容的屬性。 元素名稱​屬性的以下值將欄位資料儲存為jcr:content節點的redirectTarget屬性的值:

./jcr:content/redirectTarget

在以下範例中,欄位資料會作為裝載頁面上​Text​元件的內容:

./jcr:content/par/text_3/text

"第一個範例可用於cq:Page元件轉譯的任何頁面。 唯有有效負載頁面包含ID為text_3的​Text​元件時,才能使用第二個範例。

表單可以位於儲存庫中的任意位置,但工作流用戶必須獲得讀取表單的授權。

隨機參與者選擇器

隨機參與者選擇器​步驟是參與者選擇器,它將生成的工作項分配給從清單中隨機選擇的用戶。

wf-31

隨機參與者選擇器 — 配置

若要設定此步驟,請編輯並使用下列標籤:

  • 常見

  • 引數

    • 參與者:指定可供選擇的用戶清單。若要將用戶添加到清單中,請按一下​添加項​並鍵入用戶節點的主路徑或用戶ID。 用戶的順序不會影響被分配工作項目的可能性。

工作流程發起人參與者選擇器

工作流啟動器參與者選擇器​步驟是參與者選擇器,它將生成的工作項分配給啟動工作流的用戶。 除了​Common​屬性以外,沒有其他屬性可配置。

工作流啟動器參與者選擇器 — 配置

若要設定此步驟,請使用下列標籤進行編輯:

程序步驟

處理步驟​運行ECMAScript或調用OSGi服務以執行自動處理。

wf-32

進程步驟 — 配置

若要設定此步驟,請編輯並使用下列標籤:

  • 常見

  • 程序

    • 程式:要執行的程式實作。使用下拉菜單選擇ECMAScript或OSGi服務。 關於後述資訊::

    • 處理常式進階:選取此選項,即可在執行後自動將工作流程推進至下一個步驟。如果未選取,實施指令碼必須處理工作流程進階。

    • 引數:要傳遞至此進程的參數。

本頁內容