JavaScript 指令碼和範本

指令碼使計算值、在進程中的不同任務之間交換資料以及使用SOAP調用執行特定操作成為可能。

指令碼在工作流程圖中隨處可見:

  • 所有活動都有初始化指令碼。 初始化指令碼會在活動啟動時執行,並可用來初始化變數和修改屬性。

  • 「JavaScript程式碼」活動僅用於執行指令碼。

  • 「測試」活動會評估JavaScript運算式,以啟動適當的轉換。

  • 大部分的文字欄位是JavaScript範本:JavaScript運算式可包含在<%=和%>之間。 這些欄位提供一個按鈕,可開啟下拉式清單,以協助您輸入運算式。

公開的對象

在工作流程的上下文中執行的JavaScripts會存取一系列額外的全域物件。

  • 例項:表示要執行的工作流。此對象的模式為​xtk:workflow
  • 任務:表示正在執行的任務。此對象的模式為​xtk:workflowTask
  • 事件:表示激活要執行的任務的事件。此物件的架構為​xtk:workflowEvent。 此對象未初始化為​AND-join​類型活動,這些活動已從多個轉變中激活。
  • 事件:表示激活當前任務的事件清單。此物件的架構為​xtk:workflowEvent。 此表通常包含一個元素,但可包含多個​AND-join​類型活動,這些活動已基於多個轉變而激活。
  • 活動:表示正在執行的任務的模型。此對象的模式取決於活動類型。 此對象可由初始化指令碼修改,在其它指令碼中,修改具有不可確定的效果。

按一下指令碼工具列右側的按鈕,即可在下拉式清單中檢視這些物件的可用屬性。

注意

這些對象的屬性是只讀的,vars屬性的子屬性除外。

這些屬性中的大部分只有在執行基本任務或實例被鈍化後才會更新。 讀取的值不一定與當前狀態匹配,而是與前一個狀態匹配。

範例

在此範例和下列範例中,建立包含​JavaScript程式碼​活動和​End​活動的工作流程,如下圖所示。

連按兩下​JavaScript程式碼​活動並插入下列指令碼:

logInfo("Label: " + instance.label)
logInfo("Start date: " + task.creationDate)

logInfo(message)​函式將消息插入日誌中。

按一下​OK​關閉建立嚮導,然後使用位於工作流清單右上方的操作按鈕啟動工作流。 執行結束時,請查閱記錄檔。 您應該會看到與指令碼對應的兩則訊息:一個顯示工作流的標籤,另一個顯示指令碼激活的日期。

變數

變數是​instancetask​和​event​對象的自由屬性。 授權這些變數的JavaScript類型有​stringnumber​和​Date

例項變數

例項變數(instance.vars.xxx)可與全域變數比較。 所有活動都會共用。

任務變數

任務變數(task.vars.xxx)與本地變數相當。 它們僅用於當前任務。 這些變數會由持續性活動使用,以保留資料,有時也會用來在相同活動的不同指令碼之間交換資料。

事件變數

事件變數(vars.xxx)可在工作流進程的基本任務之間交換資料。 這些變數由啟動進行中任務的任務傳遞。 可以修改它們並定義新的。 然後,會將它們傳遞至下列活動。

注意

對於AND-join類型活動,會合併變數,但如果同一個變數定義了兩次,則會發生衝突,且值仍未確定。

事件是最常使用的變數,應優先使用它們來取代例項變數。

某些事件變數會由各種活動修改或讀取。 這些都是字串類型變數。 例如,匯出會設定​vars.filename​變數,其名稱為剛匯出的檔案。 所有這些讀取或修改的變數都記錄在關於活動中,位於活動的​輸入參數​和​輸出參數​節中。

使用案例

注意

本節中提供了其他工作流使用案例。

範例1

在此範例中,例項變數可用來動態計算分割百分比以套用至人口族群。

  1. 建立工作流程並新增「開始」活動。

  2. 新增及設定JavaScript程式碼活動以定義例項變數。

    例如:instance.vars.segmentpercent = 10;

  3. 根據您的需求新增查詢活動和目標收件者。

  4. 新增「分割」活動,並設定它以執行傳入人口的隨機取樣。 取樣百分比可以是您選擇的任何項目。 在本例中,它設為50%。

    這個百分比會因先前定義的例項變數而動態更新。

  5. 在「分割」活動「進階」標籤的「初始化指令碼」區段內,定義JS條件。 JS條件會選取來自「分割」活動之第一個轉場的隨機取樣百分比,並將其更新為先前建立之例項變數所設定的值。

    activity.transitions.extractOutput[0].limiter.percent = instance.vars.segmentpercent;
    

  6. 請確定補碼是在分割活動的個別轉場中產生,並在每次出站轉場後新增結束活動。

  7. 儲存並執行工作流程。 動態採樣根據實例變數被應用。

範例2

  1. 從上例中的工作流程,將​JavaScript代碼​活動的指令碼替換為以下指令碼:

    instance.vars.foo = "bar1"
    vars.foo = "bar2"
    task.vars.foo = "bar3"
    
  2. 將以下指令碼添加到​End​活動的初始化指令碼中:

    logInfo("instance.vars.foo = " + instance.vars.foo)
    logInfo("vars.foo = " + vars.foo)
    logInfo("task.vars.foo = " + task.vars.foo)
    
  3. 啟動工作流程,然後查看記錄檔。

    Workflow finished
    task.vars.foo = undefined
    vars.foo = bar2
    instance.vars.foo = bar1
    Starting workflow (operator 'admin')
    

此範例顯示​JavaScript程式碼​後續的活動會存取例項變數和事件變數,但無法從外部存取工作變數('undefined')。

調用查詢中的執行個體變數

在活動中指定例項變數後,您就可以在工作流程查詢中重新使用它。

因此,要在過濾器中調用變數​instance.vars.xxx = "yyy",請輸入​$(instance/vars/xxx)

例如:

  1. 建立例項變數,透過​JavaScript code​定義傳送的內部名稱:instance.vars.deliveryIN = "DM42"

  2. 建立其定位和篩選維度為收件者的查詢。 在條件中,指定您想要尋找所有傳送變數所指定之傳送的收件者。

    提醒時,此資訊會儲存在傳送記錄檔中。

    若要參考​Value​欄中的例項變數,請輸入​$(instance/vars/@deliveryIN)

    工作流將返回DM42交付的收件人。

進階函式

除了標準JavaScript函式外,還提供特殊函式,可用來控制檔案、讀取或修改資料庫中的資料,或將訊息新增至記錄檔。

日誌

logInfo(message) 在上述範例中詳細說明。此函式將資訊消息添加到日誌中。

logError(message) 將錯誤消息添加到日誌中。指令碼會中斷執行,而工作流程會變更為錯誤狀態(依預設會暫停執行個體)。

初始化指令碼

在特定條件下,您可以在執行時修改活動的屬性。

活動的大部分屬性都可以動態計算,不論是使用JavaScript範本,還是因為工作流程屬性明確允許指令碼計算值。

但是,對於其他屬性,您必須使用初始化指令碼。 執行任務之前會評估此指令碼。 activity​變數會參照與任務對應的活動。 可修改此活動的屬性,並僅影響此任務。

本頁內容

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