# シングルトリガーのタスクをマルチトリガーのタスクにアップグレード

重複しているシングルトリガーのタスクを、複数のトリガーを持つ1つのタスクにアップグレードします。

このタスクで使う必要があるトリガーごとにタスクを複製済みかもしれませんが、その作業はもう必要ありません。そのようなトリガーをスケジュールで直接定義し、そのスケジュールをこのタスクに適用できるようになりました。

情報メモ注: [in the UI] (UIで)シングルトリガーのタスクのスケジュールを編集すると、このタスクがマルチトリガーに変換されます。変換された後、GET /executables/tasks/{taskId}/scheduleエンドポイントを使用して、タスクのスケジュール詳細を取得する必要があります。

## 始める前に

* TMCトークンを生成:

  * ユーザーの場合は、[パーソナルアクセストークンを生成](https://help.qlik.com/talend/r/ja-JP/Cloud/management-console-user-guide/cloud-access-token)に従ってパーソナルアクセストークンを生成します。
  * サービスアカウントの場合は、[サービスアカウントトークンを生成](https://help.qlik.com/talend/r/ja-JP/Cloud/api-user-guide/generate-service-account-token)に従ってサービスアクセストークンを生成します。

  生成されたサービスアカウントトークンは30分後に期限切れになります。期限切れになった場合は、エンドポイントhttps://api.&lt;env&gt;.cloud.talend.com/security/oauth/tokenでPOSTメソッドを使って新しいトークンを生成します。トークンの生成に関する詳細は、[サービスアカウントトークンを生成](https://help.qlik.com/talend/r/ja-JP/Cloud/api-user-guide/generate-service-account-token)をご覧ください。

* スケジュールの関連付けに必要なタスクのIDを知っていること。

  Talend Management Consoleの場合、このIDはこのタスクの専用ページに表示されます。例: ![タスクのページにあるタスクID。](https://help.qlik.com/talend/ja-JP/api-user-guide/Resources/images/tmc-task-id.png) タスクIDは以下のAPIリクエストで取得することもできます。

  ```
  method: GET
  endpoint: https://api.<env>.cloud.talend.com/processing/executables/tasks
  headers: {
            "Content-Type": "application/json",
            "Authorization": "Bearer <your_personal_or_service_account_access_token>"
            }
  query parameters: {
            "workspaceId": "id_of_the_workspace_of_the_task_to_be_updated"
                    }
  ```

* アップデートするタスクが属するスペースで、使用するユーザーまたはサービスアカウントがTMC\_OPERATORロールとEXECUTOR権限を持っていること。

## 手順

1. 1つのマルチトリガーのタスクにアップグレードするタスクインスタンスの既存のトリガーを取得します。この操作を行うためには、各タスクインスタンスに対して次ののAPIリクエストを発行します。
   ### 例
   ```
   method: GET
   endpoint: https://api.<env>.cloud.talend.com/orchestration/executables/tasks/<taskId>/run-config
   headers: {
             "Content-Type": "application/json",
             "Authorization": "Bearer <your_personal_or_service_account_access_token>"
             }
   payload: N/A
   ```

   レスポンスには、このタスクで定義されているトリガーが次のように表示されます。
   ```
   "trigger": {
       "type": "ONCE",
       "interval": 1,
       "startDate": "2019-09-25",
       "timeZone": "Europe/London",
       "atTimes": {
         "type": "AT_TIME",
         "times": [
           "10:00"
         ],
         "time": "10:00",
         "startTime": "10:00",
         "endTime": "23:00",
         "interval": "10"
       },
       "atDays": {
         "type": "DAY_OF_WEEK",
         "day": 3,
         "days": [
           "MONDAY",
           "WEDNESDAY",
           "FRIDAY"
         ]
       }
   ```

   スケジュールではWebhookトリガーがサポートされていないので注意が必要です。したがって、タスクインスタンスがWebhookトリガーを使用している場合はそれをそのまま維持する必要があります。
2. 新しいスケジュールを作成し、前のステップで取得したトリガーのオブジェクト全体をそのスケジュールに貼り付けます。
3. 各トリガーにnameフィールドを追加します。
   ### 例

   上の例は次のようになります。
   ```
   "trigger": {
       "name": "My unique once trigger"
       "type": "ONCE",
       "interval": 1,
       "startDate": "2019-09-25",
       "timeZone": "Europe/London",
       "atTimes": {
         "type": "AT_TIME",
         "times": [
           "10:00"
         ],
         "time": "10:00",
         "startTime": "10:00",
         "endTime": "23:00",
         "interval": "10"
       },
       "atDays": {
         "type": "DAY_OF_WEEK",
         "day": 3,
         "days": [
           "MONDAY",
           "WEDNESDAY",
           "FRIDAY"
         ]
       }
   ```
4. スケジュールによってトリガーされる将来のイベントをシミュレートし、そのスケジュールを自分のタスクに割り当てます。手順全体の詳細は、[スケジュールを使ってタスク実行を整理](https://help.qlik.com/talend/ja-JP/api-user-guide/Cloud/use-schedule-to-organize-task-runs)をご覧ください。

   このタスクは、上述のタスクインスタンスから複製された新しいインスタンスか、単純にこれらのタスクインスタンスのいずれかとなります。ターゲットタスクの既存のトリガーはすべて、この新しいスケジュールとそのトリガーによって置き換えられます。
5. 重複しているタスクはもう必要ないので、すべて削除します。

## タスクの結果

以上の操作で、タスクの複製済みの各インスタンスについて追加される必要があった時間トリガーがすべて、自分のタスクに含まれるようになります。

https://api.&lt;env&gt;.cloud.talend.com/orchestration/executables/tasks/&lt;taskId&gt;/run-configにGETリクエストを発行すれば、レスポンスをチェックできます。Triggerオブジェクトでは、typeフィールドがMULTIPLEと表示されるようになります。

```
{
  "trigger": {
    "type": "MULTIPLE"
  },
  "runtime": {
    "type": "CLOUD"
  },
  "parallelExecutionAllowed": false,
  "logLevel": "WARN"
}
```