> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arc.cdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# connectorBatchGroupRead

> バッチグループメッセージのメンバーを反復処理し、呼び出し本体の実行中は各メンバーを_message として公開します。

バッチグループメッセージのメンバーを反復処理し、呼び出し本体の実行中は各メンバーを`_message` として公開します。このオペレーションは[Script コネクタ](https://docs.arc.cdata.com/26.4/self-hosted/ja/connectors/script.md)のテンプレートでのみサポートされます。

## 必要なパラメータ

* **messageId**: 反復処理するバッチグループメッセージのId。通常は`[MessageId]` として参照されます。

## オプションのパラメータ

* **messageType**: バッチメンバーを読み取る際に使用するメッセージタイプ。使用可能な値は`Auto`、`Input`、`Output`、`Temp` です。デフォルトは`Auto` ですが、ベストプラクティスの推奨事項については[messageType は常にInput に設定する](#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` に設定してください：

```xml theme={null}
<arc:set attr="batchin.messageId" value="[MessageId]" />
<arc:set attr="batchin.messageType" value="Input" />

<arc:call op="connectorBatchGroupRead" in="batchin">
  ...
</arc:call>
```

`messageType` を省略すると、このオペレーションはインプットメッセージと、スクリプトが現在の実行中に作成しているアウトプットメッセージの両方からメッセージId を検索します。呼び出しが完了する前にスクリプトが`batchGroupKey` を指定してアウトプットをプッシュすると、アウトプットのバッチグループにインプットと同じメッセージId が割り当てられる場合があります。この場合、オペレーションはどちらのメッセージを指しているか判断できず、次のようなエラーで失敗します：

```
The message <MessageId> is ambiguous between the Temp and the Input.
```

このエラーが発生するかどうかはアウトプットのプッシュ順序に依存するため、テストでは問題なく通過したスクリプトが、実データでは失敗することがあります。

### プッシュごとにアウトプットアイテムをクリアする

アウトプット属性は[arc:push](https://docs.arc.cdata.com/26.4/self-hosted/ja/scripting/keyword-reference/op-arc-push.md)によってクリアされず、次のプッシュに引き継がれます。予期しない動作を避けるため、各プッシュの前に`<arc:unset item="output" />` を呼び出してください。

クリアしない場合、あるプッシュで設定された値が次のプッシュに影響することがあります：

| 引き継がれる属性 | 結果 |
| - | - |
| `isBatchGroup=true` も設定されているプッシュでの`output.data` または`output.filepath` | エラー：バッチグループのファイナライザではボディペイロードは無効です |
| `output.batchGroupKey` | 単独メッセージとして意図されたプッシュが、代わりにバッチグループに追加されます |
| `output.isBatchGroup` | 次のプッシュがグループを再度ファイナライズしようとして失敗します |
| `output.header:*` | あるメンバーのヘッダーが、次のメンバーやバッチグループメッセージに現れます |
| `output.filename` | 後続のメッセージが誤った名前を受け取る場合があります |

`arc:unset` は`output.batchGroupKey` もクリアします。`output.isBatchGroup=true` でバッチグループをファイナライズするプッシュでは、`arc:unset` の後に`output.batchGroupKey` を再度設定してください。

### アウトプットでバッチグループを生成する

アウトプットをバッチグループとして送信するには、各メンバーのプッシュで`output.batchGroupKey` を設定します。同じキーを共有するメンバーはグループ化されます。明示的なファイナライザプッシュが行われない場合、Script コネクタは実行の終了時にバッチグループを自動的に作成します。

グループレベルのプロパティ（グループのファイル名やヘッダーなど）を定義するには、同じ`batchGroupKey` とともに`output.isBatchGroup` を`true` に設定して、明示的なファイナライザプッシュを行います。ファイナライザは、実行の最後ではなく、その時点でグループを出力します。

ファイナライザプッシュの制約：

* `output.batchGroupKey` は、既存の空でない保留中のグループのキーと一致する必要があります。
* グループの内容はそのメンバーによって定義されるため、`output.data` と`output.filepath` は無効でエラーを返します。`output.filename` やその他のメッセージメタデータは引き続き有効です。

### 出力順序

* 通常のアウトプットメッセージは、プッシュした順序で出力されます。
* 明示的な`isBatchGroup=true` プッシュは、実行中のその時点でグループを出力します。
* 残りの暗黙的なグループは、実行の最後に出力されます。

## 例

### バッチメンバーを通常のメッセージとして読み取る

インプットバッチグループの各メンバーを読み取り、通常のアウトプットメッセージとして出力します：

```xml theme={null}
<arc:set attr="batchin.messageId" value="[MessageId]" />
<arc:set attr="batchin.messageType" value="Input" />

<arc:call op="connectorBatchGroupRead" in="batchin">
  <arc:unset item="output" />
  <arc:set attr="output.data" value="[_message.body]" />
  <arc:set attr="output.filename" value="[_message.header:filename]" />
  <arc:push item="output" />
</arc:call>
```

### メンバーを新しいバッチグループに再グループ化する

各メンバーを読み取り、名前を変更して、すべてのメンバーを`batch01` という名前の1つの新しいバッチグループとして出力します：

```xml theme={null}
<arc:set attr="batchin.messageId" value="[MessageId]" />
<arc:set attr="batchin.messageType" value="Input" />

<arc:call op="connectorBatchGroupRead" in="batchin">
  <arc:unset item="output" />
  <arc:set attr="output.batchGroupKey" value="group1024" />
  <arc:set attr="output.data" value="[_message.body]" />
  <arc:set attr="output.filename" value="x-[_message.header:filename].txt" />
  <arc:push item="output" />
</arc:call>

<arc:unset item="output" />
<arc:set attr="output.batchGroupKey" value="group1024" />
<arc:set attr="output.isBatchGroup" value="true" />
<arc:set attr="output.filename" value="batch01" />
<arc:push item="output" />
```

ファイナライザプッシュ（最後のブロック）を省略した場合でも、スクリプトが終了するとバッチグループはその`batchGroupKey` にちなんだ名前で出力されます。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.