マッピングオプション
インポートの状況や、本番テーブルにロードする前にデータを変換する必要があるかどうかに応じて、さまざまな方法でフィールドをマッピングできます。
また、インポート操作では複数のマッピング方法を利用する必要があり、これらの方法は簡単に組み合わせて使用できます。
自動マッピングユーティリティ
最も簡単なマッピング方法では、インポートセットのすべてのフィールド名が、データの変換先の本番テーブルのフィールド名と一致します。この場合は、[テーブル変換マップ] フォームの関連リストで [一致フィールドの自動マップ] をクリックし、適切に一致することを確認します。フィールドの自動一致の方法に不一致がある場合は、マッピング支援ユーティリティを使用して修正します。すべてのフィールドが適切に一致したら、[変換] 関連リンクをクリックして宛先テーブルへのデータの変換を開始します。
マッピング支援ユーティリティ
日付形式を変更する
| 日付形式 | 説明 |
|---|---|
| dd-MM-yyyy | 日-月-年 |
| dd-MM-yyyy hh:mm:ss | 日-月-年 時-分-秒 |
| dd-MM-yyyy hh:mm:ss z | 日-月-年 時-分-秒のタイムゾーン |
| MM-dd-yyyy | 月-日-年 |
| MM-dd-yyyy hh:mm:ss | 月-日-年 時-分-秒 |
| MM-dd-yyyy hh:mm:ss z | 月-日-年 時-分-秒のタイムゾーン |
| yyyy-dd-MM | 年-日-月 |
| yyyy-MM-dd | 年-月-日 |
| yyyy-MM-dd hh:mm:ss | 年-月-日 時-分-秒 |
24 時間形式で表示するには、hh:mm:ss の代わりに [HH:mm:ss] を使用してカスタムの日付形式を指定します。
24 時間形式から 12 時間形式に変換すると、12:00 〜 23:59 の時刻が 00:00 〜 11:59 の形式になります。
期間フィールドにマッピングする
- 開始日と終了日から期間を計算する
- 既存の期間値を ServiceNow 期間値に変換する
開始日と終了日から期間の値を計算する
- 移動先 .
- 期間の値を計算する変換マップを選択します。たとえば、インシデントテーブルにインポートする通知変換マップなどです。
- [スクリプトの実行] チェックボックスをオンにします。
- JavaScript を入力して、開始日と終了日を期間に変換します。サンプルスクリプトを参照します。
- [更新] をクリックします。
target.duration = gs.dateDiff(source.u_start.getDisplayValue(), source.u_end.getDisplayValue(), false);期間値を ServiceNow の期間値に変換する
- 移動先 .
- 変換マップを選択します。
たとえば、インシデントテーブルにインポートする通知変換マップなどです。
- [スクリプトの実行] チェックボックスをオンにします。
- 既存の期間値を ServiceNow 期間値に変換するには、JavaScript を入力します。サンプルスクリプトを参照します。
- [更新] をクリックします。
//Transform the value in source.u_duration from seconds to milliseconds
target.duration.setDateNumericValue(source.u_duration * 1000);//Transform the value in source.u_duration to ServiceNow format
target.duration.setDateNumericValue(source.u_duration);スクリプトを使用したソース値の計算
- ソース値がマッピングされたターゲット値の形式ではない。
- ターゲットフィールドにマッピングする前に値を検索する。
- ソース値を複数のフィールドから計算する必要がある。
- ターゲットフィールドで複合または計算された結合値を作成する必要がある。
ソーススクリプトは、計算された値がグローバル変数 answer に設定されることを想定しています。
バイナリまたは BLOB フィールドのマッピング
ServiceNow は、特別なプロセスを使用して、JDBC データソースからバイナリおよびバイナリラージオブジェクト (BLOB) データをインポートします。すべてのバイナリデータは、変換が行われる前に添付ファイル [sys_attachment] テーブルのレコードに自動的に変換されます。インポートセットテーブルは、実際のバイナリ値ではなく、添付ファイルレコードの sys_id 値のみをインポートテーブルフィールドに格納します。たとえば、JDBC データソースを使用して、各レコードのキー値をバイナリデータとして格納する CA サービスデスクシステムからデータをインポートするとします。サービスデスクキー値を ServiceNow テーブルにインポートすると、ServiceNow フィールドには、実際のバイナリデータではなく、添付ファイルレコード [sys_attachment] テーブル内の対応するバイナリデータへの sys_id 参照のみが含まれます。
onAfter スクリプトで GlideRecord API を使用します。target.sys_id オブジェクトは、データがインポートセットテーブルに配置された後にのみ使用できるため、onAfter イベントで実行する必要があります。たとえば、結果の添付ファイルをターゲット変換レコードにマッピングするには、次のスクリプトを使用します。var agr = new GlideRecord("sys_attachment");
agr.addQuery("sys_id", source.u_blob_field);
// the source field needs to be mapped to the source that is the BLOB
agr.query();
if(agr.next()) {
agr.table_name = "cmdb_ci"; // the target table of the transform map
agr.table_sys_id = target.sys_id; // the target record
agr.content_type = source.u_contentype;
// the content type string if available,
// this becomes the mime encoding when clicking an attachment link
agr.update(); // finally, move/re-attach the attachment to the target row }db_image テーブルに直接マッピングする場合は、次の onAfter スクリプトを実行して画像を表示します。var strTemp = source.u_file_name;
var fType = strTemp.substr(- 3);
var iCont = "" ;
if(fType == 'jpg') {
iCont = 'jpeg' ; }
else {
iCont = fType; }
var agr = new GlideRecord("sys_attachment");
agr.addQuery("sys_id", source.u_blob_field);
agr.query();
if(agr.next()) {
agr.table_name = "ZZ_YYdb_image";
agr.table_sys_id = target.sys_id;
agr.content_type = 'image/' + iCont;
agr.file_name = 'image';
agr.update(); }