6.5.2.1 ビジネスロジックトリガーのスクリプト
ビジネスロジックトリガーのスクリプトは、Ops Iで使用できるサーバーサイドスクリプトです。サーバーサイドスクリプトの詳細は「サーバーサイドスクリプト」を、ビジネスロジックトリガーの詳細は「ビジネスロジックトリガー」参照してください。
メモScriptのマニフェストファイル内のキー"file"で指定するスクリプトをあらかじめ作成する必要があります。スクリプトはJavaScriptで記述してください。
ビジネスロジックトリガーでは、設定したトリガーが実行された際にエントリーポイントとしてexecuteTrigger関数が呼び出されます。お客様はスクリプト内にexecuteTrigger関数を定義し、アクションの内容を記述してください。
ビジネスロジックトリガーについて以下を説明します。
executeTrigger関数の引数は以下の通りです。戻り値はありません。
| データ形式 | 変数名 | 必須 | 説明 | |
|---|---|---|---|---|
| Object | operation | - | - | |
| string | type | Yes | 操作種別 "create"、"update"、"delete"のいずれかが指定される。 |
|
| Object | record | - | - | |
| string | id | Yes | 操作対象のレコードID | |
| string | resourceType | Yes | 操作対象のリソース "ticket"、"ticket-work-note"、"ticket-related-link"、"knowledge-article"のいずれかが指定される。 |
|
| Object | extraInfo | - | 呼び出し時の追加情報 "resourceType"の値によって渡されるデータが変わる。追加情報がない場合は空のObjectとなる。 |
|
| string | ticketID | No | 操作対象の作業メモまたは関連リンクに設定されている親チケットのID "resourceType"が"ticket-work-note"または"ticket-related-link"の場合のみ指定される。 |
|
【ビジネスロジックトリガー定義時の注意点】
ビジネスロジックトリガーにより実行するスクリプトの処理を契機とした、新たな(再帰的な)ビジネスロジックトリガーの実行は抑止されます。
具体的には、以下のようなケースのビジネスロジックトリガーは実行されません。
- チケットの更新を契機としたビジネスロジックトリガーで、チケットを更新するAPIを実行する場合
- チケットの更新を契機としたビジネスロジックトリガーで、以下の定義が存在し、これらが循環する場合
- ナレッジ記事を更新するAPIを実行する定義
- ナレッジ記事の更新を契機としたビジネスロジックトリガーでチケットを更新するAPIを実行する定義
例)以下の場合、③の実行が抑止され実行されません。
①ユーザー操作によりチケットの更新→②ビジネスロジックトリガーによるナレッジ記事の更新→③ビジネスロジックトリガーによるチケットの更新→…
【ビジネスロジックトリガーの実行ログ】
ビジネスロジックトリガーには、ユーザーによる設定が不要な、デフォルトで出力される以下のログがあります。ログは英語で出力されます。
サーバーサイドスクリプトを起動する際に出力されます。ただし、BusinessLogicTriggerのマニフェストファイルでログレベルがINFOのログが出力対象となるように"script.logLevel"が設定されている場合のみ出力されます。
出力されるログの内容は以下の通りです。
| 項目 | 説明 |
|---|---|
| ID | ログレコードのID |
| Run ID | サーバーサイドのスクリプト実行ごとに設定されるID 同一の実行かどうかを識別するために使用する。実行IDが同じの場合、同一の実行であることを示す。 |
| Date time | ログ出力した日時 |
| Log level | "INFO"が出力される。 |
| Caller kind | 呼び出し元のマニフェストファイルの"kind" "businessLogicTrigger"が出力される。 |
| Caller name | 呼び出し元のマニフェストファイルの"name" |
| Message | 次のメッセージが出力される。
[ServerSideScriptHasStarted] operationTime=実際に操作した日時(ISO形式),operationType=condition.operationTypes.(operation type)の値,recordID=record ID,recordType=condition.resourceTypeの値,kind=manifest kind,name=manifest name,commitID=manifest commit ID |
サーバーサイドスクリプトが正常終了した際に出力されます。ただし、BusinessLogicTriggerのマニフェストファイルでログレベルがINFOのログが出力対象となるように"script.logLevel"が設定されている場合のみ出力されます。
出力されるログの内容は以下の通りです。
| 項目 | 説明 |
|---|---|
| ID | ログレコードのID |
| Run ID | サーバーサイドのスクリプト実行ごとに設定されるID 同一の実行かどうかを識別するために使用する。実行IDが同じの場合、同一の実行であることを示す。 |
| Date time | ログ出力した日時 |
| Log level | "INFO"が出力される。 |
| Caller kind | 呼び出し元のマニフェストファイルの"kind" "businessLogicTrigger"が出力される。 |
| Caller name | 呼び出し元のマニフェストファイルの"name" |
| Message | 次のメッセージが出力される。
[ServerSideScriptHasFinished] operationTime=実際に操作した日時(ISO形式),operationType=condition.operationTypes.(operation type)の値,recordID=record ID,recordType=condition.resourceTypeの値,kind=manifest kind,name=manifest name,commitID=manifest commit ID |
エラーが発生しスクリプトを実行できなかった、またはスクリプトの実行が異常終了した場合に出力されます。
③-1:ユーザーのミスによるエラーの場合
以下のような状況が想定されます。
- JavaScriptファイル内での文法エラーによる実行不可
- エントリーポイントが存在しないことによる実行不可
- JavaScriptファイルの処理での例外の発生
出力されるログの内容は以下の通りです。
| 項目 | 説明 |
|---|---|
| ID | ログレコードのID |
| Run ID | サーバーサイドのスクリプト実行ごとに設定されるID 同一の実行かどうかを識別するために使用する。実行IDが同じの場合、同一の実行であることを示す。 |
| Date time | ログ出力した日時 |
| Log level | "ERROR"が出力される。 |
| Caller kind | 呼び出し元のマニフェストファイルの"kind" "businessLogicTrigger"が出力される。 |
| Caller name | 呼び出し元のマニフェストファイルの"name" |
| Message | 次のメッセージが出力される。
[ServerSideScriptTerminatedDueToAnError] operationTime=実際に操作した日時(ISO形式),operationType=condition.operationTypes.(operation type)の値,recordID=record ID,recordType=condition.resourceTypeの値,kind=manifest kind,name=manifest name,commitID=manifest commit ID |
③-2:内部不正などによるエラーの場合
以下のような状況が想定されます。
- 内部エラーによるビジネスロジックトリガーの実行不可
出力されるログの内容は以下の通りです。
| 項目 | 説明 |
|---|---|
| ID | ログレコードのID |
| Run ID | サーバーサイドのスクリプト実行ごとに設定されるID 同一の実行かどうかを識別するために使用する。実行IDが同じの場合、同一の実行であることを示す。 |
| Date time | ログ出力した日時 |
| Log level | "ERROR"が出力される。 |
| Caller kind | 呼び出し元のマニフェストファイルの"kind" "businessLogicTrigger"が出力される。 ただし、実行対象のマニフェストファイルが判明している場合のみ出力される。 |
| Caller name | 呼び出し元のマニフェストファイルの"name" 実行対象のマニフェストファイルが判明している場合のみ出力される。 |
| Message | 次のメッセージが出力される。
[ServerSideScriptTerminatedDueToAnInternalError] operationTime=実際に操作した日時(ISO形式),operationType=condition.operationTypes.(operation type)の値,recordID=record ID,recordType=condition.resourceTypeの値,kind=manifest kind,name=manifest name,commitID=manifest commit ID |
③-3:実行タイムアウトによりスクリプトの実行が停止した場合
出力されるログの内容は以下の通りです。
(表)実行タイムアウトによりスクリプトの実行が停止した場合のログの内容
| 項目 | 説明 |
|---|---|
| ID | ログレコードのID |
| Run ID | サーバーサイドのスクリプト実行ごとに設定されるID 同一の実行かどうかを識別するために使用する。実行IDが同じの場合、同一の実行であることを示す。 |
| Date time | ログ出力した日時 |
| Log level | "ERROR"が出力される。 |
| Caller kind | 呼び出し元のマニフェストファイルの"kind" "businessLogicTrigger"が出力される。 |
| Caller name | 呼び出し元のマニフェストファイルの"name" |
| Message | 次のメッセージが出力される。
[ServerSideScriptTerminatedDueToTimeout] operationTime=実際に操作した日時(ISO形式),operationType=condition.operationTypes.(operation type)の値,recordID=record ID,recordType=condition.resourceTypeの値,kind=manifest kind,name=manifest name,commitID=manifest commit ID |
トリガーの発生時に、実行できるイベントの上限に達している場合や、内部エラーが発生した場合などに、ビジネスロジックトリガーの起動が失敗します。
出力されるログの内容は以下の通りです。
(表)ビジネスロジックトリガーの起動が失敗した場合のログの内容
| 項目 | 説明 |
|---|---|
| ID | ログレコードのID |
| Run ID | サーバーサイドのスクリプト実行ごとに設定されるID サーバーサイドスクリプトが実行されないため、空文字となる。 |
| Date time | ログ出力した日時 |
| Log level | "ERROR"が出力される。 |
| Caller kind | 呼び出し元のマニフェストファイルの"kind" "businessLogicTrigger"が出力される。 |
| Caller name | 呼び出し元のマニフェストファイルの"name" |
| Message | 次のメッセージが出力される。
[BusinessLogicTriggerExecutionCouldNotBeStarted] operationTime=実際に操作した日時(ISO形式),operationType=condition.operationTypes.(operation type)の値,recordID=record ID,recordType=condition.resourceTypeの値,kind=manifest kind,name=manifest name,commitID=manifest commit ID |
ビジネスロジックトリガーの契機が別のビジネスロジックトリガーから起動されている場合、スクリプトの実行を抑止します。
出力されるログの内容は以下の通りです。
(表)再帰呼び出しを検出しスクリプトの実行を止めた場合のログの内容
| 項目 | 説明 |
|---|---|
| ID | ログレコードのID |
| Run ID | サーバーサイドのスクリプト実行ごとに設定されるID 同一の実行かどうかを識別するために使用する。実行IDが同じの場合、同一の実行であることを示す。 |
| Date time | ログ出力した日時 |
| Log level | "INFO"が出力される。 |
| Caller kind | 呼び出し元のマニフェストファイルの"kind" "businessLogicTrigger"が出力される。 |
| Caller name | 呼び出し元のマニフェストファイルの"name" |
| Message | 次のメッセージが出力される。
[ServerSideScriptExecutionSkipped] operationTime=実際に操作した日時(ISO形式),operationType=condition.operationTypes.(operation type)の値,recordID=record ID,recordType=condition.resourceTypeの値,kind=manifest kind,name=manifest name,commitID=manifest commit ID |