結合を使用したレコードの更新
結合オプションを使用すると、インポートデータを変換するときに既存のターゲットテーブルレコードを更新できます。
フィールドマップの結合オプションを使用すると、インポートセットレコードの変換時に、選択した [ターゲットフィールド] を使用するかどうかを指定できます。フィールドマップの [結合] チェックボックスが選択されている場合、インポートセット行が変換されると、インスタンスは [ターゲットフィールド] の値がインポートセット行の [ソースフィールド] と同じであるターゲットテーブルの既存のレコードをチェックします。詳細な手順については、「 フィールドマップの作成」を参照してください。
結合オプション
インポートセットのデータの結合に使用できる構成がいくつかあります。
結合なし
結合が定義されていない場合、インポートされたすべての行が新しいレコードとして扱われます。既存のレコードは更新されません。
単一フィールド結合
単一のフィールドで結合して既存のレコードを更新できます。
ターゲットテーブルレコードがステージングテーブルレコードと同じ値の結合フィールドに存在する場合、ターゲットテーブルレコードはインポートセットレコードの値を使用して更新されます。
複数フィールド結合
複数のフィールドで結合して、既存のレコードを更新できます。
すべての結合フィールドにステージングテーブルレコードと同じ値を持つターゲットテーブルレコードが存在する場合、ターゲットテーブルレコードはステージングテーブルレコード値を使用して更新されます。複数のフィールドを結合するには、ターゲットテーブルとステージングテーブル間のすべての結合フィールド値が一致する必要があります。
条件付き結合
スクリプトを使用して、ステージングテーブルの行をターゲットレコードに結合するかどうかを決定できます。
ほとんどの条件付き結合スクリプトは、[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;
}
大文字と小文字を区別する結合フィールド値
インポートセットを異なるケースと一致する値で結合させるかどうかをコントロールできます。
フィールドマップの [結合で大文字と小文字を区別] フィールドを使用すると、大文字と小文字を区別してフィールド値を結合できます。
デフォルトでは、フィールドマップで [結合] としてマークされたフィールドは、既存のレコードの大文字と小文字を区別しないルックアップで使用されます。[結合で大文字と小文字を区別] チェックボックスをオンにすると、インスタンスは結合フィールド値を大文字と小文字で照合します。ターゲットテーブルレコードは、ターゲットレコードの値とインポートセットステージングレコードの値と大文字と小文字が同じ場合にのみ更新されます。それ以外の場合は、新しいレコードが作成されます。
空フィールドでの結合
インポートセットを値のないフィールドで結合させるかどうかをコントロールできます。
フィールドマップの [空フィールドの結合] フィールドを使用すると、値のないフィールドを結合できます。
デフォルトでは、フィールドマップで [結合] とマークされているフィールドにより、インポートセットのステージングレコードの値と一致するフィールド値を持つターゲットレコードがチェックされます。そのフィールドマップに対して [空フィールドの結合] が選択されている場合、ターゲットレコードとインポートセットのステージングレコード内の空の値は、結合の目的で一致としてカウントされます。
たとえば、ユーザー変換マップをメールフィールドで結合させます。[空フィールドの結合] オプションを選択すると、空のメールアドレスを含むソースレコードが、空のメールアドレスを含むターゲットレコードに結合します。