工作流程步驟參考

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

注意

本節介紹標準的「工作流」步驟。

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

步驟屬性

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

步驟屬性——公共頁籤

在屬性對話框的​Common​頁籤上,大多數工作流步驟元件都可以使用以下屬性組合:

  • 標題

    步驟的標題。

  • 說明

    步驟的說明。

  • 工作流程分段

    舞台套用至步驟的下拉式選擇器。

  • 逾時

    步驟將在此時段後「逾時」。

    您可以選擇:OffImmediate1h6h12h24h

  • 逾時處理常式

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

    Auto Advancer

  • 處理常式前進

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

步驟屬性——用戶/組頁籤

屬性對話框的​User/Group​頁籤上的許多工作流步驟元件可以使用以下屬性:

  • 透過電子郵件通知使用者

    • 當工作流程到達步驟時,您可以傳送電子郵件通知參與者。
    • 如果啟用,則會傳送電子郵件給​User/Group​屬性所定義的使用者,或如果已定義群組,則傳送電子郵件給群組的每個成員。
  • 使用者/群組

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

AND 拆分

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

wf-26

AND Split —— 配置

  • 編輯​AND Split​屬性:

    • 拆分名稱:指定名稱以供說明。
    • 選擇所需的分支數;2、3、4或5。
  • 視需要將工作流程步驟新增至分支。

    wf-27

容器步驟

容器​步驟會啟動另一個以子工作流程執行的工作流程模型。

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

wf-28

容器步驟——設定

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

  • 常見

  • 容器

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

移至步驟

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

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

  • false:Goto步 驟完 成和常規路由邏輯決定要執行的下一步。

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

Goto Step - Configuration

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

  • 常見

  • 程序

    • 轉至:選擇要執行的步驟。
    • 指令碼路徑:ECMAScript的路徑,用於確定是否執行 Goto步驟
    • 指令碼:確定是否執行「轉至步驟」的ECMAScript
注意

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

模擬循環

模擬for循環需要您保持已發生循環迭代次數的計數:

  • 計數通常表示在工作流中操作的項的索引。
  • 計數會評估為循環的退出准則。

例如,要實施對多個JCR節點執行操作的工作流,可以使用循環計數器作為節點的索引。 若要保存計數,請將integer值儲存在工作流程例項的資料地圖中。 使用​Goto Step​的指令碼來增加計數,並比較計數與退出標準。

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。

對話方塊參與者步驟

使用​對話參與者步驟​從指派工作項目的使用者收集資訊。 此步驟對於收集稍後在工作流程中使用的少量資料非常有用。

完成步驟後,「完成工作項目」(Complete Work Item)​對話框將包含您在對話框中定義的欄位。 在欄位中收集的資料會儲存在工作流程裝載的節點中。 隨後的工作流步驟可以從儲存庫讀取值。

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

對話方塊參與者步驟——配置

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

對話方塊參與者步驟——建立對話框

要建立對話框:

對話方塊參與者步驟——將資料儲存在裝載

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

  • 將資料與裝載一起儲存

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

      ./jcr:content/nodename

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

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

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

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

      nodename

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

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

  1. 對話框結構

    「對話方塊參與者步驟」(Dialog Participant Steps)對話框與您為編寫元件而建立的對話框類似。 它們儲存在:

    /apps/myapp/workflow/dialogs

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

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

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

  2. 對話框路徑屬性

    對話參與者步驟​具有​對話路徑​屬性(以及參與者步驟的屬性)。 對話路徑​屬性的值是對話框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的內容(當您套用修補程式或功能套件時可能會覆寫)。

    此指令碼選擇工作流啟動器作為參與者:

    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 Components for Page Authoring的Forms部分。

表單參與者步驟——配置

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

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

建立表單,以便正常使用​表單參與者步驟。 但是,表單參與者步驟的表單必須具備下列組態:

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

  • Start of Form​元件必須具有Form Identifier屬性的值。

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

    ./jcr:content/path_to_node

  • 表單必須包含​Workflow Submit Button(s)​元件。 不要配置元件的任何屬性。

工作流程的需求會決定您應將欄位資料儲存在何處。 例如,欄位資料可用來設定頁面內容的屬性。 元素名稱​屬性的下列值將欄位資料儲存為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服務。 關於後述資訊::

      • 標準的ECMAScript和OSGi服務,請參見內置流程步驟
      • 為​Process​步驟建立ECMAScript,請參閱使用ECMAScript實施流程步驟。
      • 為​Process​步驟建立OSGi服務,請參閱使用Java類實現流程步驟。
    • 處理常式進階:選擇此選項可自動將工作流推進到執行後的下一個步驟。如果未選取,實施指令碼必須處理工作流程的進階。

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

本頁內容

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now