RTETransformer - スコープ指定
RTETransformer API は、提供された抽出、変換、ロード (ETL) の定義に基づいて、メッセージのアレイをレコードに変換して関連する ServiceNow インスタンス内に格納するメソッドを提供します。
たとえば、ユーザー情報を含む JSON ペイロードがあり、その情報を強力な変換エンジン (RTE) で sys_user テーブルに変換する場合は、この API を使用します。
この API にアクセスするときは、sn_impex 名前空間を使用します。
詳細については、「 強力な変換エンジン操作を定義する」を参照してください。
RTETransformer - RTETransformer(文字列 transformDefinitionId, ブーリアン verboseLogging, 文字列 source, 数字 batchSize)
RTETransformer オブジェクトをインスタンス化します。
| 名前 | タイプ | 説明 |
|---|---|---|
| transformDefinitionId | 文字列 | 変換に使用する抽出、変換、およびロード (ETL) 定義の sys_id。ETL 定義 [sys_rte_eb_etl_definition] テーブルにあります。 ETL の作成の詳細については、「 抽出変換ロード (ETL) 定義を作成する」を参照してください。 |
| verboseLogging | ブーリアン | デバッグ用の詳細なログ記録とインポートセット行の作成を有効にするかどうかを示すフラグ。 有効な値:
|
| source | 文字列 | インポートセットレコードの名前フィールド。 |
| batchSize | 数字 | 一度に処理するメッセージ (バッチ) の数。たとえば、ペイロードに 10 件のメッセージがあり、この値が 2 に設定されている場合、メソッドは 5 つのバッチジョブを個別に実行してペイロード内のすべてのメッセージを処理します。 |
次のコード例は、バッチサイズが 10 のソース testSourceRecord の RTETransformer オブジェクトをインスタンス化する方法を示しています。
(function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, /*Context*/ ctx) {
// Uses an ETL definition with a target table of incident, and mappings for the number and short description field
var transformer = new sn_impex.RTETransformer("c58f1c6377110110f5455d14cd5a998b", true, "testSourceRecord", 10);
var messages = ["{\"number\":\"testnumber\",\"short_description\":\"testdesc\"}"];
var results = transformer.transform(messages);
for (var i = 0; i < results.length; i++) {
var dataList = results[i].data.incident;
gs.log("source record id: " + results[i].sourceRecordSysId);
gs.log("status: " + results[i].status);
for (var j = 0; j < dataList.length; j++) {
gs.log("number:" + dataList[j].number);
gs.log("short desc:" + dataList[j].short_description);
}
}
})(request, response, ctx);
RTETransformer - transform(アレイ message)
提供された抽出、変換、ロード (ETL) の定義に基づいて、メッセージのアレイをレコードに変換し、関連する ServiceNow インスタンス内に格納します。
たとえば、ユーザー情報を sys_user レコードに変換する場合は、メッセージが 1 つだけのメッセージアレイを作成し、この変換メソッドに渡すことができます。
| 名前 | タイプ | 説明 |
|---|---|---|
| message | オブジェクトのアレイ | ETL 定義に基づいて変換するレコードを表す、文字列化された JSON オブジェクト。 たとえば、アクティブなデータ、メール、名、姓がある 1 人のユーザーを sys_user テーブルに変換する場合、メッセージは次のようになります。
注: フィールド名は、ソースエンティティのフィールドのフィールド/パスと一致する必要があります。 |
| 名前 | 説明 |
|---|---|
| data | テーブル名別に整理された変換済みレコードのデータ。返されたレコードデータは、ETL 定義で指定されたマッピング済みフィールドと一致します。 データタイプ:オブジェクト |
| data.tableName | レコードを含むテーブルの詳細。 データタイプ:オブジェクトのアレイ
例: |
| data.tableName.sys_id | テーブル内のレコードの sys_id。 データタイプ:文字列 |
| data.tableName.<other_ETL_info> | 渡された ETL で指定された追加フィールド。 データタイプ:任意 |
| message | 指定されたレコードの変換中にエラーが発生すると、エラーを説明するメッセージが表示されます。変換が成功した場合は null です。 データタイプ:文字列 |
| sourceRecordSysId | インポートセットテーブルレコードの sys_id。インポートセットテーブル名は JSON イベントシンク [imp_json_event_sinc] です。 データタイプ:文字列 |
| status | 変換のステータス (処理済みやエラーなど)。 データタイプ:文字列 |
次のコード例は、レコードを変換してユーザー [sys_user] テーブルに格納する方法を示しています。
(function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, /*Context*/ ctx) {
// Uses an ETL definition with a target table of sys_user, and mappings for the active,
//email, first name, and last name fields
var transformer = new sn_impex.RTETransformer("c58f1c6377110110f5455d14cd5a998b", true, "testSourceRecord", 10);
var messages = [JSON.stringify({
"active":"true",
"email":"example@servicenow.com",
"first_name":"Jane",
"last_name":"Doe"
}),
JSON.stringify({
"active":"true",
"email":"example2@servicenow.com",
"first_name":"John",
"last_name":"Deer"
})];
var results = transformer.transform(messages);
for (var i = 0; i < results.length; i++) {
var dataList = results[i].data.sys_user;
gs.log("source record id: " + results[i].sourceRecordSysId); gs.log("status: " + results[i].status);
for (var j = 0; j < dataList.length; j++) {
gs.log("First Name: " + dataList[j].first_name);
gs.log("Last Name: " + dataList[j].last_name);
gs.log("Email: " + dataList[j].email;
gs.log("Active: " + dataList[j].active;
}
}
}
結果:
source record id: b29e629877130110f5455d14cd5a99ad
status: PROCESSED
First Name: Jane
Last Name: Doe
Email: example@servicenow.com
Active: true
First Name: John
Last Name: Deer
Email: example2@servicenow.com
Active: true