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

# イベント

export const siteNameShort = "Sync";

export const siteName = "CData Sync";

多くの場合、ユーザーは外部情報をデータフロータスクに統合する必要があります。{siteName} は、そのようなシナリオを可能にするジョブ前およびジョブ後の両イベントを提供します。これらのイベントを使用すると、{siteNameShort} アプリケーションに含まれるXML ベース言語[*APIScript*](./apiscript) を使用して、クエリパラメータを挿入したり、他の外部の処理をトリガーしたりできます。

バッチファイルの実行、Eメール送信、新しいジョブの実行のトリガーなどの一般的なアクションを自動化するための完全なコードスニペットが{siteNameShort} に含まれています。ジョブの**イベント**タブで、**スニペットを挿入**をクリックして、実行するアクションを選択します。必要なコードがカーソルに挿入されています。

## Pre-Job イベント

*pre-job イベント*は、ジョブがクエリの実行を開始する前に発生します。ジョブの名前、データソース、同期先などを含むジョブに関する詳細は、イベントスクリプト内でロジカルな選択を行うために使用できる入力パラメータとして利用できます。また、後でジョブの実行中に使用できる出力項目の属性値をプッシュすることもできます。

```xml theme={null}
<api:info title="Before Run" desc="このイベントはジョブを実行する前に発生します。">
  <input name="JobName"      required="true" desc="実行されるジョブの名前。" />
  <input name="Source"       required="true" desc="データソース接続の名前。" />
  <input name="Destination"  required="true" desc="同期先接続の名前。" />
  <input name="JobStatus"    required="true" desc="以前のジョブのステータス。" />
  <output name="env:*"                       desc="ジョブで後で使用される変数。" />
  <output name="CancelJob"                   desc="ジョブの実行をキャンセルしたい場合はtrue に設定。" />
</api:info>
```

### 環境変数を作成

環境変数は、pre-job イベントスクリプトで作成し、ジョブの実行に追加できます。次の例では、現在のタイムスタンプでcurrentTimeStamp 変数を作成し、その値を持つ`out` アイテムをジョブにプッシュします。

```xml theme={null}
<api:set attr="out.env:currenttimestamp"  value="[null | now()]" />
<api:push item="out" />
```

### REPLICATE クエリでの環境変数の使用

REPLICATE クエリ内で、ジョブにプッシュされた環境変数をさまざまな方法で使用できます。環境変数を参照するには、`env:attribute` を中かっこ（{}）で囲みます。次の例では、`currenttimestamp` の値を新しいカラム`DateUpdated` に設定します。

```sql theme={null}
REPLICATE [Table] SELECT [ID], [Name], '{env:currenttimestamp}' AS [DateUpdated] FROM [Table]
```

## Post-Job イベント

*post-job イベント*は、ジョブがクエリの実行を完了した後に始まります。インプット項目には、他の操作の呼び出しに使用できるジョブの実行結果が含まれます。

```xml theme={null}
<api:info title="After Run" desc="このイベントはジョブを実行した後に発生します。">
  <input name="JobName"              required="true" desc="実行されるジョブの名前。" />
  <input name="Source"               required="true" desc="データソース接続の名前。" />
  <input name="Destination"          required="true" desc="同期先接続の名前。" />
  <input name="JobStatus"            required="true" desc="完了した実行のステータス。" />
  <input name="RunStartDate"         required="true" desc="ジョブ実行の開始日。" />
  <input name="AffectedRows"         required="true" desc="実行による影響を受けた行の数。" />
  <input name="Details"              required="true" desc="ジョブ実行の詳細。" />
  <input name="FailedQueries"        required="true" desc="失敗したクエリのリスト。" />
  <input name="FailedQueriesCount"   required="true" desc="失敗したクエリの数。" />
  <input name="SuccessQueries"       required="true" desc="成功したクエリのリスト。" />
  <input name="SuccessQueriesCount"  required="true" desc="成功したクエリの数。" />
  <input name="FailedTables"         required="true" desc="失敗したテーブルのリスト。" />
  <input name="RunTime"              required="true" desc="前回のジョブの実行時間。" />
  <input name="Query#"               required="true" desc="実行された各クエリを含む配列。" />
  <input name="QueryStatus#"         required="true" desc="実行された各クエリのステータスを含む配列。" />
</api:info>
```

### ジョブ実行のトリガー

post-job イベントを設定して別のジョブの実行をトリガーできます。例えば、次のコードスニペットは、現在のジョブがクエリの実行を終了した後にJob2 を実行します。`api:if` キーワードを使用してこの例を拡張し、現在のジョブが成功した場合にのみJob2 を実行することもできます。

```xml theme={null}
<!-- Start Executing different Job -->
<api:set attr="job.JobName"        value="Job2"/>
<api:set attr="job.WorkspaceId"    value="default"/>
<api:set attr="job.ExecutionType"  value="Run"/>
<api:set attr="job.WaitForResults" value="true"/> <!--Setting value=true causes the processing to wait for the job to complete. -->
<api:call op="api.rsc/executeJob" httpmethod="post" authtoken="<YourAPIToken>" in="job"/>
```

<Note>
  <p>この例では、<code style={{padding: "0"}}>job.WorkspaceId</code> アトリビュートはターゲットジョブを含むワークスペースを識別します。同じワークスペース内のジョブをトリガーする場合は、このアトリビュートを <code style={{padding: "0"}}>default</code> に設定するか、ワークスペースの名前を指定します。別のワークスペースのジョブをトリガーする場合は、そのワークスペースの名前を指定します。<strong>イベント</strong>エディタの<strong>スニペットを挿入</strong>オプションには、<code style={{padding: "0"}}>job.WorkspaceId</code> アトリビュートが自動的に含まれており、値は <code style={{padding: "0"}}>default</code> に設定されています。</p>
  <p>このアトリビュートは、次のケースで<strong>必須</strong>です：</p>

  <ul>
    <li>両方のジョブのワークスペースが同じであるが、デフォルトのワークスペースではない場合。</li>
    <li>開始ジョブとターゲットジョブが異なるワークスペースに属している場合。</li>
  </ul>

  <p>このような場合にこのアトリビュートを省略すると、API 呼び出しが失敗する可能性があります。失敗が発生した場合、{siteNameShort} は保存操作中またはジョブ実行時にエラーメッセージを表示しません。post-job イベントが期待通りに実行されなかった場合でも、ジョブのステータスは成功として表示されます。ただし、エラーは<a href="../getting-started/administration/logs-page#application-tab">アプリケーションログ</a>に記録されます。post-job イベントが実際に成功したかどうかを確認するには、ジョブの実行後にログを確認してください。</p>
</Note>

### サンプルスクリプトの拡張

このセクションのコードスニペットは、APIScript を使用してできることのほんの一例です。APIScript 言語は完全な計算能力を備えているため、複雑なビジネスロジックを管理できます。

実行フローなどを制御するには、他のAPIScript キーワードを使用できます。このスクリプトには、処理と自動化をアシストする多くの機能拡張と組み込み操作が含まれています。例えば、APIScript はEメールの送信やファイルの移動などのタスクを容易にします。

オペレーションに固有の追加のインプット値を渡すこともできます。

**例**

* `appSendEmail` オペレーションは、本文、添付ファイル、SSL/TLS プロパティなど、いくつかの追加インプット項目を受け付けます。これらの項目は、`api:set` キーワードを使用して指定します。
* `api:call` キーワードを使用することで、イベント内の任意の組み込み操作を呼び出したり、API を呼び出すこともできます。

## 詳細について

APIScript の構文および機能の詳細については、[APIScript 入門](./apiscript) を参照してください。
