> ## 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.

# arc:call

> arc:call キーワードを使用して、ビルトインオペレーション、カスタムスクリプト、リモートスクリプトを含むArcScript オペレーションを呼び出します。

export const siteNameShort = "Arc";

`arc:call` キーワードを使用してオペレーションを呼び出します。以下の種類のオペレーションを呼び出すことができます：

* アプリケーションのbin サブフォルダにある、アプリケーションアセンブリとともにインストールされたビルトインオペレーション
* .NET、またはJava で独自に記述し、アプリケーションのbin サブフォルダに配置したオペレーション
* 同じマシンに存在する他のスクリプトの呼び出し
* HTTP 経由で呼び出されるリモートマシン上のスクリプト

オペレーションは、アイテムをインプットとして受け取り、フィードをアウトプットとして返します。`arc:call` のスコープは、呼び出しから返されたフィード内のすべてのアイテムに対し実行されます。`arc:call` のスコープ内では、返されたアイテムのアトリビュートを調べ、変更することができます。そして、それらのアトリビュートを他のオペレーションのインプットとして提供し、オペレーションパイプラインを形成することができます。もしくは、アイテムをアウトプットに追加できます。

## アウトプットアイテムスタックとデフォルトアイテム

`arc:call` が発生するたびに、新しいアイテムが内部のアイテムスタックに追加されます。スタックの一番上のアイテムが*デフォルトアイテム*です。これが、アイテム名が呼び出しのインプットで明示的に指定されていない場合に、`arc:call` にインプットを提供するアイテムです。

呼び出されたオペレーションはアトリビュートにデフォルトアイテムを書き込み、[arc:push](./op-arc-push) がデフォルトアイテムをアウトプットに追加します。アイテムをプッシュすると、スタックの一番上にあるデフォルトアイテムのアトリビュートだけが追加されます。

アイテムが反復されるとデフォルトアイテムは一掃され、`arc:call` は次のアイテムで機能します。これは、`arc:call` の前の反復のvalue セットを次の反復で読むことができないことを意味します。反復に渡って値を保持するには、[arc:set](./op-arc-set) を使って名前付きアイテムに値をコピーします。

デフォルトのアイテムは`_`、もしくは明示的に`_out1`、`_out2`、`_out[n]`（`n` はスタックの深さ）として示すことができます。これにより、実行処理におけるこの時点で利用可能なすべての値を読み取ることができます。ルックアップ処理はデフォルトアイテムからはじまり、値が見つかるまでスタック内を読み続けます。

次の例では、各呼び出しでアイテムがスタックの一番上に追加される様子と、各呼び出しのスコープ内でデフォルトアイテムがどのように変化するかを確認できます。

```xml theme={null}
<arc:call op="operation1"> 
The default item here is _out1 
A push here would push the attributes from _out1 
The input item used to call operation2 is also _out1 
<arc:call op="operation2"> 
The default item here is _out2 
A push here will push the attributes from _out2 
If there was another arc:call here the input item used would be _out2 
_out2 is swept clean here for the next iteration 
</arc:call> 
The default item here is again _out1 
A push here would again push the attributes from _out1 
The input item at this level is again _out1 
_out1 is swept clean here for the next iteration 
</arc:call> 
```

## オペレーションにインプットを指定する

インプットを呼び出しに提供する方法は3つあります：

* デフォルトアイテム：インプットアイテムが指定されない場合には、呼び出されたオペレーションはデフォルトアイテムのインプット値を読みます。[arc:set](./op-arc-set) キーワードを使用して、呼び出されたオペレーションで処理されるようにデフォルトアイテムの値を設定できます。

  ```xml theme={null}
  <arc:set attr="mask" value="*.txt"/>
  <arc:set attr="path" value="C:\\"/>
  <arc:call op="fileListDir">
  ... 
  </arc:call>
  ```

* 明示的なインプットアイテム：デフォルトアイテムを使う代わりに、**in** パラメータを使用してオペレーションのインプットアイテムとして使いたいアイテムを明示的に指定することができます。これを行うと、デフォルトアイテムは使用されません。代わりに、指定されたインプットアイテムから入力値が読み取られ、クエリ文字列がオペレーションに渡されます（以下に例を示します）。

  ```xml theme={null}
  <arc:set attr="mask" value="*.* -- Will be ignored --"/>
  <arc:set attr="myinput.mask" value="*.txt"/>
  <arc:set attr="myinput.path" value="C:\\"/>
  <arc:call op="fileListDir" in="myinput">
  ... 
  </arc:call>
  ```

* クエリ文字列パラメータ：クエリ文字列表記を使って、オペレーションのインプットを指定することもできます。クエリ文字列の一部として指定されたアトリビュートが優先されます。つまり、クエリ文字列で指定されたアトリビュートとインプットアイテムで指定されたアトリビュート名に差異がある場合、クエリ文字列のほうが優先されます。ただし、インプットアイテムの他のアトリビュートは、引き続きアクセス可能です。この例では、クエリ文字列でインプットを指定する構文を示します：

  ```xml theme={null}
  <arc:set attr="myinput.mask" value="*.txt -- will be overridden --"/> 
  <arc:set attr="myinput.path" value="C:\\"/> 
  <arc:call op="fileListDir?mask=*.rsb" in="myinput">
  ...
  </arc:call>
  ```

## パラメータ

* **op**：呼び出すオペレーションの名前。

* **in\[put]**：オペレーションを呼び出すときにインプットとして使われるアイテムのリスト。アトリビュートは、指定されたインプットアイテムの左から右へルックアップされます。

* **out\[put]**：アウトプットアトリビュートが配置されるアイテム。`arc:call` のスコープで、ここで指定されたアイテム名を使って、現在のアウトプットアイテムを取得することができます。`_out[n]` または`_pipe` を使って、呼び出し結果を参照することもできます。

  <Note>呼び出しのスコープ外では、呼び出し内のアトリビュートセットは使用できません。これは、呼び出しを反復するたびに前の反復のアトリビュートが削除され、呼び出しの最後には何も残らないためです。呼び出しのスコープ外のアトリビュートにアクセスするには、[arc:set](./op-arc-set) を使って呼び出しの外で使いたいアイテムにアトリビュートを明示的にコピーします。</Note>

* **item**：インプットとアウトプットの両方で使われるアイテムの名前。

* **sep\[arator]**：複数のインプットアイテムを区切るためのセパレータ。デフォルトはカンマです。

* **ignoreprefix**：見つかったときに無視される接頭辞のカンマ区切りのリスト。一部のオペレーションでは、`prefix:name` 形式の名前（例えば、`arc:operation` や`sql:company`）のアトリビュートを返します。状況によっては、`prefix:name` と`name` を同じアトリビュートとして扱いたい場合があります。

* **page** および**pagesize**：反復するアイテムのサブセット。これは、オペレーションまたはフィード結果のページングを有効化するために使われます。例えば、`page="2"` および`pagesize="5"` を指定すると、`arc:call` キーワードは結果フィードのアイテム6から10 のみを反復します。

* **httpmethod**：オペレーションで使用するHTTP メソッド。

* **authtype**：HTTP 経由でアクセスされるフィードに必要な認証タイプ。例えば、`basic` や`digest` です。

* **authtoken**：HTTP 経由でアクセスされるフィードを認証するためのauth トークン。

* **user**：HTTP 経由でアクセスされるフィードを認証するためのユーザー名。

* **password**：HTTP 経由でアクセスされるフィードを認証するためのパスワード。

* **http\_headers**：HTTP 経由でアクセスされるフィードに必要なその他のHTTP ヘッダー。

* **proxyhost**：HTTP リクエストが送信されるプロキシのアドレス。

* **proxyport**：HTTP プロキシが起動しているTCP ポート。

* **proxyuser**：HTTP プロキシを認証するためのユーザー名。

* **proxypassword**：HTTP プロキシを認証するためのパスワード。

* **proxyauthtype**：プロキシに必要なHTTP 認証タイプ。例えば、`basic` や`digest` です。

* **proxyssltype**：プロキシサーバーへの接続時に使用するTLS/SSL タイプ。有効な値は`AUTO`、`ALWAYS`、`NEVER`、または`TUNNEL` です。デフォルトは`AUTO` です。

## アトリビュートの制御

* **\_index**：`arc:call` によって現在反復されているアイテムのインデックス。
* **\_op**：呼び出されているオペレーションの名前。実行するまでオペレーション名がわからない場合に役立ちます。
* **\_separator**：複数のインプットアイテムを区切るためのセパレータ。

## 例

デフォルトアイテムをインプットとして使用してオペレーションを呼び出します：

```xml theme={null}
<arc:set attr="path" value="C:\myfiles"/>
<arc:call op="fileListDir">
  <arc:push/>
</arc:call>
```

リモートマシン上の別のスクリプトを呼び出します。先の例のように、スクリプトがネストされます。

```xml theme={null}
<arc:call op="http://someplace.com/customerList.rsb">
  <arc:push/>
</arc:call>
```

## 関連項目

* [arc:first](./op-arc-first)：呼び出しの最初の反復でのみ実行されるエレメントを記述する。
* [arc:catch](./op-arc-catch)：呼び出しでエラーをキャッチする。
* [arc:continue](./op-arc-continue)：次の反復に進む。
