結合を使用したレコードの更新

  • リリースバージョン: Zurich
  • 更新日 2025年07月31日
  • 所要時間:5分
  • 結合オプションを使用すると、インポートデータを変換するときに既存のターゲットテーブルレコードを更新できます。

    フィールドマップの結合オプションを使用すると、インポートセットレコードの変換時に、選択した [ターゲットフィールド] を使用するかどうかを指定できます。フィールドマップの [結合] チェックボックスが選択されている場合、インポートセット行が変換されると、インスタンスは [ターゲットフィールド] の値がインポートセット行の [ソースフィールド] と同じであるターゲットテーブルの既存のレコードをチェックします。詳細な手順については、「 フィールドマップの作成」を参照してください。

    ターゲットテーブルに一致する値を持つ既存のレコードが見つかった場合、そのレコードが更新されます。一致するレコードが見つからない場合は、ターゲットテーブルに新しいレコードが作成されます。
    注:
    それらのフィールドが一意の値を持つ場合にのみ、結合するターゲットテーブルのフィールドを選択します。ターゲットテーブル内の複数のレコードが指定された結合オプションに一致する場合、ターゲットテーブル内の最初に一致したレコードのみが更新されます。

    結合オプション

    インポートセットのデータの結合に使用できる構成がいくつかあります。

    結合なし

    結合が定義されていない場合、インポートされたすべての行が新しいレコードとして扱われます。既存のレコードは更新されません。

    単一フィールド結合

    単一のフィールドで結合して既存のレコードを更新できます。

    ターゲットテーブルレコードがステージングテーブルレコードと同じ値の結合フィールドに存在する場合、ターゲットテーブルレコードはインポートセットレコードの値を使用して更新されます。

    複数フィールド結合

    複数のフィールドで結合して、既存のレコードを更新できます。

    すべての結合フィールドにステージングテーブルレコードと同じ値を持つターゲットテーブルレコードが存在する場合、ターゲットテーブルレコードはステージングテーブルレコード値を使用して更新されます。複数のフィールドを結合するには、ターゲットテーブルとステージングテーブル間のすべての結合フィールド値が一致する必要があります。

    条件付き結合

    スクリプトを使用して、ステージングテーブルの行をターゲットレコードに結合するかどうかを決定できます。

    ほとんどの条件付き結合スクリプトは、[sys_id] フィールドのフィールドマップの [ソーススクリプト] フィールドで定義されます。ステージングテーブルレコード値を使用してターゲットレコードを更新するには、スクリプトがターゲットテーブルレコードの sys_id を返す必要があります。

    条件付き結合スクリプトの例

    条件付き結合スクリプトの例を確認します。

    更新のみ

    一致が見つかったレコードのみを更新し、一致が見つからなかったレコードをスキップするには、結合フィールドを指定し、次のスクリプトを [onBefore] スクリプトとして変換マップに追加します。

    if (action == 'insert') 
      ignore = true;

    ドット連結を使用した条件付き結合

    インシデントデータをインポートするときにユーザーのメールアドレスを照合する場合などに、条件付き結合スクリプトでドット連結フィールドを使用できます。

    この例では、このスクリプトは、インシデントターゲットテーブルの [sys_id] フィールドのフィールドマップの [ソーススクリプト] で定義されています。

    var gr = new GlideRecord('incident');
    gr.addQuery('caller_id.email', source.u_email); //check if the incident caller's email matches the import row email value
    gr.query();
    
    if(gr.next())
    {
        answer = gr.sys_id; //if a match exists, return the sys_id of the matching Incident record
    }
    else
    {
        answer= -1;
    }

    OR 条件による条件付き結合

    条件付き結合スクリプトを使用して、複数のフィールド値に基づいてソースレコードとターゲットレコードを一致させることができます。すべての結合フィールドが一致する必要がある複数フィールドの結合とは異なり、1 つのフィールドのみが一致するようにスクリプトを指定できます。

    この例では、このスクリプトは、ユーザーターゲットテーブルの [sys_id] フィールドのフィールドマップの [ソーススクリプト] で定義されています。

    var gr = new GlideRecord('sys_user');
    var qc = gr.addQuery('email', source.u_email); //first check if the user's email matches
    qc.addOrCondition('user_name', source.u_name); //alternatively, check if the username matches
    gr.query();
    
    if(gr.next()) 
    {
        answer = gr.sys_id; //if a match exists, return the sys_id of the matching User record
    }
    else 
    {
        answer = -1;
    }

    大文字と小文字を区別する結合フィールド値

    インポートセットを異なるケースと一致する値で結合させるかどうかをコントロールできます。

    フィールドマップの [結合で大文字と小文字を区別] フィールドを使用すると、大文字と小文字を区別してフィールド値を結合できます。

    デフォルトでは、フィールドマップで [結合] としてマークされたフィールドは、既存のレコードの大文字と小文字を区別しないルックアップで使用されます。[結合で大文字と小文字を区別] チェックボックスをオンにすると、インスタンスは結合フィールド値を大文字と小文字で照合します。ターゲットテーブルレコードは、ターゲットレコードの値とインポートセットステージングレコードの値と大文字と小文字が同じ場合にのみ更新されます。それ以外の場合は、新しいレコードが作成されます。

    空フィールドでの結合

    インポートセットを値のないフィールドで結合させるかどうかをコントロールできます。

    フィールドマップの [空フィールドの結合] フィールドを使用すると、値のないフィールドを結合できます。

    デフォルトでは、フィールドマップで [結合] とマークされているフィールドにより、インポートセットのステージングレコードの値と一致するフィールド値を持つターゲットレコードがチェックされます。そのフィールドマップに対して [空フィールドの結合] が選択されている場合、ターゲットレコードとインポートセットのステージングレコード内の空の値は、結合の目的で一致としてカウントされます。

    たとえば、ユーザー変換マップをメールフィールドで結合させます。[空フィールドの結合] オプションを選択すると、空のメールアドレスを含むソースレコードが、空のメールアドレスを含むターゲットレコードに結合します。