マッピングオプション

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む8読むのに数分
  • インポートの状況や、本番テーブルにロードする前にデータを変換する必要があるかどうかに応じて、さまざまな方法でフィールドをマッピングできます。

    また、インポート操作では複数のマッピング方法を利用する必要があり、これらの方法は簡単に組み合わせて使用できます。

    自動マッピングユーティリティ

    最も簡単なマッピング方法では、インポートセットのすべてのフィールド名が、データの変換先の本番テーブルのフィールド名と一致します。この場合は、[テーブル変換マップ] フォームの関連リストで [一致フィールドの自動マップ] をクリックし、適切に一致することを確認します。フィールドの自動一致の方法に不一致がある場合は、マッピング支援ユーティリティを使用して修正します。すべてのフィールドが適切に一致したら、[変換] 関連リンクをクリックして宛先テーブルへのデータの変換を開始します。

    マッピング支援ユーティリティ

    マッピング支援ユーティリティは、インポートセットフィールドと本番テーブルフィールド間のマッピングを指定するための視覚的に直感的な環境を提供します。マッピング支援ユーティリティを使用すると、単一のソースフィールド (インポートセットテーブルのフィールド) を複数の宛先フィールド (本番テーブルのフィールド) にマッピングできます。
    図 : 1. マッピング支援

    日付形式を変更する

    ソースフィールドの日付形式がターゲットフィールドの形式と一致しない場合は、日付形式マッピングを設定して、日付をある形式から別の形式に変換できます。たとえば、このマッピングは、CSV ソースファイルの日付形式で [MM-dd-yyyy] 形式を使用するよう指定します。
    図 : 2. フィールドマップの日付形式
    図 : 3. フィールドマップの日付形式オプション
    日付形式オプションは次のとおりです。
    表 : 1. マッピングオプション
    日付形式 説明
    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 期間フィールドでは、期間の値をミリ秒単位でリストする特別なデータタイプを使用します。インポートデータを期間フィールドにマッピングするには、次のいずれかの方法を使用してソース値を期間に変換します。
    • 開始日と終了日から期間を計算する
    • 既存の期間値を ServiceNow 期間値に変換する

    開始日と終了日から期間の値を計算する

    インポートソースに開始日と終了日がある場合は、JavaScript で期間を計算できます。
    1. 移動先 システムインポートセット > 変換マップ.
    2. 期間の値を計算する変換マップを選択します。たとえば、インシデントテーブルにインポートする通知変換マップなどです。
    3. [スクリプトの実行] チェックボックスをオンにします。
    4. JavaScript を入力して、開始日と終了日を期間に変換します。サンプルスクリプトを参照します。
    5. [更新] をクリックします。
    このサンプルスクリプトは、source.u_start および source.u_end フィールドを target.duration フィールドの期間値に変換します。必要に応じて、ソースフィールドとターゲットフィールドに一致するようにフィールド名を変更します。
    target.duration = gs.dateDiff(source.u_start.getDisplayValue(), source.u_end.getDisplayValue(), false);

    期間値を ServiceNow の期間値に変換する

    インポートソースに開始日と期間の値が既に含まれている場合は、既存の期間を ServiceNow 期間に変換できます。たとえば、期間を秒単位でリストする Excel データソースがあるとします。ServiceNow では、期間にミリ秒の値が必要です。
    1. 移動先 システムインポートセット > 変換マップ.
    2. 変換マップを選択します。

      たとえば、インシデントテーブルにインポートする通知変換マップなどです。

    3. [スクリプトの実行] チェックボックスをオンにします。
    4. 既存の期間値を ServiceNow 期間値に変換するには、JavaScript を入力します。サンプルスクリプトを参照します。
    5. [更新] をクリックします。
    このサンプルスクリプトは、秒単位の期間 (source.u_duration フィールドから) をミリ秒単位の期間 (target.duration フィールド) に変換します。必要に応じて、ソースフィールドとターゲットフィールドに一致するようにフィールド名を変更します。
    //Transform the value in source.u_duration from seconds to milliseconds
    target.duration.setDateNumericValue(source.u_duration * 1000);
    このサンプルスクリプトは、既にミリ秒単位の期間 (source.u_duration フィールドから) を ServiceNow 期間 (target.duration フィールド) に変換します。必要に応じて、ソースフィールドとターゲットフィールドに一致するようにフィールド名を変更します。
    //Transform the value in source.u_duration to ServiceNow format
    target.duration.setDateNumericValue(source.u_duration);

    スクリプトを使用したソース値の計算

    次の場合は、[ソースフィールド] の代わりにソーススクリプトを使用します。
    • ソース値がマッピングされたターゲット値の形式ではない。
    • ターゲットフィールドにマッピングする前に値を検索する。
    • ソース値を複数のフィールドから計算する必要がある。
    • ターゲットフィールドで複合または計算された結合値を作成する必要がある。
    たとえば、このソーススクリプトの例では、user_name フィールドがソースで空白になっている場合にその値を計算します。
    図 : 4. フィールドマップソーススクリプト

    ソーススクリプトは、計算された値がグローバル変数 answer に設定されることを想定しています。

    バイナリまたは BLOB フィールドのマッピング

    ServiceNow は、特別なプロセスを使用して、JDBC データソースからバイナリおよびバイナリラージオブジェクト (BLOB) データをインポートします。すべてのバイナリデータは、変換が行われる前に添付ファイル [sys_attachment] テーブルのレコードに自動的に変換されます。インポートセットテーブルは、実際のバイナリ値ではなく、添付ファイルレコードの sys_id 値のみをインポートテーブルフィールドに格納します。たとえば、JDBC データソースを使用して、各レコードのキー値をバイナリデータとして格納する CA Service Desk システムからデータをインポートするとします。Service Desk キー値を 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(); }