- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-14-2025 04:03 AM
インシデントテーブルに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);
解決方法をご存じでしたらご教示いただけますでしょうか
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-15-2025 01:39 PM
Hello @紗代近
You cannot use setValue() in an after Business rule rather in a before Business rule.
(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!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-15-2025 07:35 AM - edited 03-15-2025 05:39 PM
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');
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-15-2025 01:39 PM
Hello @紗代近
You cannot use setValue() in an after Business rule rather in a before Business rule.
(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!