ServiceNow の Import Set API を Curl で試してみた

ServiceNow の Table API を使って、レコード単位で POST リクエストを繰り返す方法だと、レコード数が多い場合に不向きだと思います。そこで今回は、大量のレコード数を一度にテーブル登録可能な Import Set API を試してみました。バージョンは Vancouver です。

検証用テーブルを作成

test テーブルを下記のように作成します。

検証用テーブルに Table API でレコード登録

dinstance='dev******.service-now.com'
basicauth='admin:**************'
tablename="u_test"
imptablen="u_imp_test"

curl -s "https://$dinstance/api/now/table/$tablename" \
  --request GET \
  --user $basicauth \
  | jq .

{
  "result": []
}

curl -s "https://$dinstance/api/now/table/$tablename" \
  --request POST \
  --header "Content-Type: application/json" \
  --user $basicauth \
  --data '{
    "u_id": "001",
    "u_name": "james"
  }' \
  | jq .

{
  "result": {
    "u_name": "james",
    "sys_id": "d4a0319e9326b1100dbdb03efaba1086",
    "sys_updated_by": "admin",
    "u_id": "001",
    "sys_created_on": "2023-11-18 22:51:55",
    "sys_mod_count": "0",
    "sys_updated_on": "2023-11-18 22:51:55",
    "sys_tags": "",
    "sys_created_by": "admin"
  }
}

下記のようにレコードが登録できました。

検証用 Import Set テーブルを作成

imp_test テーブルを下記のように作成します。

検証用 Transform Map を作成

trans_test Transform Map を下記のように作成します。

検証用 Transform Map の Field Maps を設定

Auto Map Matching Fields を使って Field Maps を下記のように作成します。

Import Set テーブルに一レコード登録

curl -s "https://$dinstance/api/now/import/$imptablen" \
  --request POST \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --user $basicauth \
  --data '{
    "u_id": "002",
    "u_name": "mary"
  }' \
  | jq .

{
  "import_set": "ISET0010017",
  "staging_table": "u_imp_test",
  "result": [
    {
      "transform_map": "trans_test",
      "table": "u_test",
      "display_name": "u_name",
      "display_value": "mary",
      "record_link": "https://dev******.service-now.com/api/now/table/u_test/7744f5529366b1100dbdb03efaba10c6",
      "status": "inserted",
      "sys_id": "7744f5529366b1100dbdb03efaba10c6"
    }
  ]
}

Import Set テーブルに複数レコード登録

curl -s "https://$dinstance/api/now/import/$imptablen/insertMultiple" \
  --request POST \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --user $basicauth \
  --data '{
    "records": [
      {
        "id": "003",
        "name": "linda"
      },
      {
        "id": "004",
        "name": "david"
      }
    ]
  }' \
  | jq .

{
  "import_set_id": "04f4b5169366b1100dbdb03efaba10ba",
  "multi_import_set_id": "c8f4b5169366b1100dbdb03efaba10ba"
}

参考

https://developer.servicenow.com/dev.do#!/reference/api/vancouver/rest/c_ImportSetAPI

タグ: