_message。此作業僅在 Script 端口範本中受支援。
必需的參數
- messageId:要逐一處理的批次組訊息的 Id。通常引用為
[MessageId]。
可選的參數
- messageType:讀取批次成員時使用的訊息類型。可接受的值為
Auto、Input、Output和Temp。預設值為Auto,但請閱讀一律將 messageType 設定為 Input 了解最佳做法建議。Output和Temp分別針對指令碼的輸出訊息存放區和暫存訊息存放區;這兩個值很少需要使用。
輸出屬性
對於每個批次成員,呼叫主體中的_message 上提供以下屬性:
- _message.body:批次成員訊息的內容。
- _message.header:*:批次成員的訊息頭。例如,
[_message.header:filename]傳回 filename 訊息頭。
相關屬性
- _message.isBatchGroup:在 Script 內容中的任何
_message上均可使用。如果目前訊息是批次組,則傳回true;如果是標準訊息,則傳回false。可用於僅在傳入訊息為批次組時才有條件地呼叫connectorBatchGroupRead。
Script 端口用法
一律將 messageType 設定為 Input
在 Script 端口中呼叫connectorBatchGroupRead 時,請一律明確地將 messageType 設定為 Input:
messageType,該作業會同時在輸入訊息以及指令碼在目前執行中建立的所有輸出訊息中搜尋該訊息 Id。如果指令碼在呼叫完成之前使用 batchGroupKey 推送了輸出,則某個輸出批次組可能會被指派與輸入相同的訊息 Id。發生這種情況時,該作業無法確定您指的是哪一則訊息,並會失敗,回報類似以下的錯誤:
每次推送前清除 output 項目
arc:push 不會清除輸出屬性;這些屬性會延續到下一次推送。請在每次推送之前呼叫<arc:unset item="output" />,以避免出現非預期的行為。
如果不清除,在一次推送中設定的值可能會影響下一次推送:
arc:unset 也會清除 output.batchGroupKey。在使用 output.isBatchGroup=true 最終確定批次組的推送中,請在 arc:unset 之後重新設定 output.batchGroupKey。
以批次組形式輸出
若要以批次組的形式傳送輸出,請在每個成員的推送中設定output.batchGroupKey。共用相同索引鍵的成員會被分為一組。如果沒有執行明確的最終推送,Script 端口會在執行結束時自動建立該批次組。
若要定義組層級屬性(例如組的檔名或訊息頭),請執行明確的最終推送:將 output.isBatchGroup 設定為 true,並設定相同的 batchGroupKey。最終推送會在執行中的該時間點產生該組,而不是在執行結束時產生。
最終推送的限制:
output.batchGroupKey必須與一個已存在且非空的待處理組的索引鍵相符。output.data和output.filepath無效,並會傳回錯誤,因為組的內容由其成員定義。output.filename和其他訊息中繼資料仍然有效。
產生順序
- 一般輸出訊息按推送順序產生。
- 明確的
isBatchGroup=true推送會在執行中的該時間點產生其組。 - 所有剩餘的隱含組會在執行結束時產生。
範例
將批次成員作為一般訊息讀取
讀取輸入批次組的每個成員,並將其作為一般輸出訊息產生:將成員重新組合為新的批次組
讀取每個成員,將其重新命名,並將所有成員作為一個名為batch01 的新批次組產生:
batchGroupKey 命名。