レコードの挿入時に自動的にフィールド値を入力したい

紗代近
Tera Contributor

インシデントテーブルにHinemosからレコードが連携されたときに、インシデントレコードのホスト名(u_hostname)が自動で入力されます。この時に、インシデントレコードのサーバ名(u_servername_test_field_1)に、ホスト名に対応するサーバ名を自動で入力されるような方法について検討しています。
マスタテーブルとして、列Aにホスト名が、列Bにはホスト名に対応するサーバ名を事前に登録しておくものとします。
インシデントレコードのホスト名に列Aと同じ値が入った時に、列Bの値をサーバ名フィールドに表示させたいです。

ビジネスルールに以下のスクリプトを埋め込んでみたのですが、思ったようにフィールドに値が入ってくれませんでした。
※インシデントレコードのホスト名はu_hostname、サーバ名はu_servername_test_field_1
マスタテーブルはu_hostname_server_mapping_test_1、列Aはu_host_name_test_1、列Bはu_server_name_test_1です

 

(function executeRule(current, previous /*null when async*/) {

// インシデントのホスト名を取得
var hostName = current.u_hostname;

// ホスト名が設定されている場合のみ処理を実行
if (hostName) {
// マスタテーブル(u_hostname_server_mapping_test_1)を検索
var gr = new GlideRecord('u_hostname_server_mapping_test_1');
gr.addQuery('u_host_name_test_1', hostName); // マスタテーブルの列A(u_host_name_test_1)と一致するホスト名を検索
gr.query();

// 一致するレコードが見つかった場合
if (gr.next()) {
// インシデントのサーバ名フィールド(u_servername_test_field_1)に対応するサーバ名を設定
current.setValue('u_servername_test_field_1', gr.u_server_name_test_1); // マスタテーブルの列B(u_server_name_test_1)をインシデントのサーバ名に設定
}
}

})(current, previous);

 

解決方法をご存じでしたらご教示いただけますでしょうか

1 ACCEPTED SOLUTION

Vishal Jaswal
Giga Sage

Hello @紗代近 

You cannot use setValue() in an after Business rule rather in a before Business rule. 

vishal_jaswal_0-1742068548950.png

 

(function executeRule(current, previous /*null when async*/ ) {
    // Add your code here
    var hostName = current.u_hostname.getDisplayValue();
    var grMap = new GlideRecord('u_hostname_server_mapping_test_1');
    grMap.addQuery('u_host_name_test_1', hostName);
    grMap.query();
    if (grMap.next()) {
        //current.setValue('u_servername_test_field_1', grMap.u_server_name_test_1.getValue());
        current.u_servername_test_field_1 = grMap.u_server_name_test_1.getDisplayValue();
        current.setWorkflow(false);
        current.update();
        current.setWorkflow(true);
    }
})(current, previous);

Hope it helps!

 




Hope that helps!

View solution in original post

2 REPLIES 2

shun6
Giga Sage

@紗代近 

if文の中の処理を以下のように修正して、値がセットされるか確認していただけますでしょうか?

ご確認お願いいたします。

current.setValue('u_servername_test_field_1', gr.u_server_name_test_1); 

→curren.u_servername_test_field_1 = gr.getDisplayValue('u_server_name_test_1');

Vishal Jaswal
Giga Sage

Hello @紗代近 

You cannot use setValue() in an after Business rule rather in a before Business rule. 

vishal_jaswal_0-1742068548950.png

 

(function executeRule(current, previous /*null when async*/ ) {
    // Add your code here
    var hostName = current.u_hostname.getDisplayValue();
    var grMap = new GlideRecord('u_hostname_server_mapping_test_1');
    grMap.addQuery('u_host_name_test_1', hostName);
    grMap.query();
    if (grMap.next()) {
        //current.setValue('u_servername_test_field_1', grMap.u_server_name_test_1.getValue());
        current.u_servername_test_field_1 = grMap.u_server_name_test_1.getDisplayValue();
        current.setWorkflow(false);
        current.update();
        current.setWorkflow(true);
    }
})(current, previous);

Hope it helps!

 




Hope that helps!