上篇(重複自動化執行的奧秘 -- 迴圈)我們介紹了迴圈的使用, 但沒有介紹 Foreach, 因此本篇將介紹 Foreach 的使用。
概述
Foreach 獨立介紹的原因為一般迴圈比較適合用在單一欄位的資料迴圈, 像是清單。 若是資料表這類具有多個欄位的內容將不建議使用一般迴圈, 因為取資料時不好查閱。
以下將使用一般迴圈與 Foreach 來比較兩者存取資料表內資料的差異
範例
使用迴圈
設計一張資料表(使用預設名稱 DataTable) 並填寫以下內容

然後新增一個迴圈, 設計從 0 開始, 至資料表資料的最後 -1 筆, 然後逐一+1

若我們需要查看完全一筆資料時, 我們可能需要設計的內容如下:
%{ ^['No', 'Name', 'Count'], [DataTable[LoopIndex][0], DataTable[LoopIndex][1], DataTable[LoopIndex][2]] }%
因此我們在 Loop-End 中新增一個變數(命名 Var)作為顯示並將以上內容複製貼上。

若需要查看單筆資料時我們可以如下設計即可取得單一欄位資料:

完成後我們即可測試執行看看我們每次取得的資料:
以下為執行時若我們下中斷點可以看到的內容
中斷點
中斷點如文字般, 我們執行到那顆點時將會中斷, 若點擊執行將會繼續執行。
設定方法為在數字前點擊一下即可看到紅點,而當流程執行到那個位置時也將在那個位置停下。
中斷點經常被使用在排查錯誤上, 如我們可能發現資料一直輸出錯誤時即可下中斷點查看到底時那個環節在處理資料或取得資料時有錯誤。

點開變數 Var 後

使用迴圈完成後新增一個停止流程 (Stop Flow)來中斷流程並開始來設計 Foreach 範例對比差異。
使用 Foreach
將原本設計好的 DataTable 複製貼上在 Stop Flow 下方。
複製 - 點擊該卡片翻黑後鍵盤 Ctrl+C
貼上 - 在沒有選擇任何動作卡片時 Ctrl+V
若複製錯誤時可以直接拖拉的方式移動到正確的位置

然後新增一個 Foreach, 並且使用 DataTable 作為迴圈。
新增 Foreach 時我們會發現 Foreach 預設會新增 CurrentItem 這個變數, 這個變數主要是迴圈逐筆執行過程中存放每次執行到的資料時存放在的變數。

如同迴圈般, Foreach 也將出現 End, 因此我們可以把我們需要重複的動作新增至 Foreach-End 中。
在 Foreach-End 中新增一個變數 Var, 然後內容使用 %CurrentItem%。

然後我們再新增一個變數 Result, 內容使用 %CurrentItem[1]%

完成後我們即可測試執行看看我們每次取得的資料:
以下為執行時若我們下中斷點可以看到的內容

點開變數 Var 後

以上既完成我們的範例。
範例原始碼
Variables.CreateNewDatatable InputTable: { ^['No', 'Name', 'Count'], [1, $'''Apple''', 10], [2, $'''Banana''', 7], [3, $'''Orange''', 5] } DataTable=> DataTable
LOOP LoopIndex FROM 0 TO DataTable.RowsCount - 1 STEP 1
SET Var TO { ^['No', 'Name', 'Count'], [DataTable[LoopIndex][0], DataTable[LoopIndex][1], DataTable[LoopIndex][2]] }
SET Result TO DataTable[LoopIndex][1]
END
EXIT Code: 0
Variables.CreateNewDatatable InputTable: { ^['No', 'Name', 'Count'], [1, $'''Apple''', 10], [2, $'''Banana''', 7], [3, $'''Orange''', 5] } DataTable=> DataTable
LOOP FOREACH CurrentItem IN DataTable
SET Var TO CurrentItem
SET Result TO CurrentItem[1]
END
結語
透過範例我們會發現若我們需要讀取完整一筆資料時, 我們使用迴圈較不好閱讀的, 若使用 Foreach 我們還能在不設計標頭下讀取完整內容, 十分方便。
若我們需要讀單一欄位資料時, 使用迴圈或 Foreach 可能就沒有太大差異。