client scriptで別テーブルから値を取得し、反映する方法 How to get the value from another table with client script and reflect it
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-08-2021 11:22 PM
こんにちは。
現在、「1」で設定した値を基に「member」テーブルを参照し、1と一致するレコードの「原価」「利益」の値を取得し、「稼働時間」に入力された数字をかけた値を、それぞれ「shien_kanri」テーブルの「原価」、「利益」フィールドに反映させるという処理を実行したいです。
下記ページを参考にコードを書いているのですが、初学者のためうまくいかず、
どのように書き直せば上記の処理を実現できますでしょうか。
https://community.servicenow.com/community?id=community_question&sys_id=c74a21961b407450a17c62c4bd4bcb31
Hi.
Currently, refer to the "member" table based on the value set in "1", get the "原価" and "利益" values of the records that match 1, and multiply by the number entered in "稼働時間". I want to execute the process of reflecting the value in the "原価" and "利益" fields of the "shien_kanri" table, respectively.
I wrote the code referring to the following page, but it didn't work,
How can I rewrite it to achieve the above process?
Thank you.
- Labels:
-
Studio
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-09-2021 07:00 PM
ご返信ありがとうございます。
>U_reference_1とはこのsys_idのことでしょうか?
→u_reference_1はフィールド名になります。
イメージとしては、u_reference_1で選択したレコードのsys_idを取得し、memberテーブルからそれと一致するレコードの原価フィールドと利益フィールドの値を反映するという形になるのですが、別途何か設定が必要でしょうか。
また、2つのテーブルは、同じアプリケーション内で作成している形になります。
>shien_kanriレコードとmemberレコードは1:1の関係なのでしょうか?それとも1:nの関係でしょうか?
→1つのshien_kanriレコードに対しmemberレコードの選択肢が複数あるという意味でしょうか。
その意味でしたら、1:nの関係になります。
>どのように実行されるかの説明も必要です。
→実行タイミングは、u_reference_1フィールドで選択した時点で行いたいです。
回答になっているかわからず申し訳ございませんが、お力添えの程よろしくお願いいたします。

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-09-2021 08:53 PM
ビジネスルールかスケジュールジョブから次ぎのようなスクリプトインクルード関数を呼び出すことになると思います。
var test = Class.create();
test.prototype = {
initialize: function() {},
updateCostProfit: function(key_value) { // key_valueはmemberテーブルから取得するu_reference_1の値
var gr_member = new GlideRecord('member'); // memberテーブルを検索
gr_member.addQuery(u_reference_1, vakey_valuelue); // 検索条件
gr_member.query(); // 実行
var total_cost = 0; // 原価後継
var total_profit = 0; // 利益ごプ系
while (gr_member.next()) { // 該当レコードをループして処理
var cost = gr_member.cost; // 原価
var profit = gr_member.profit; // 利益
var hours = gr_member.hours; // 稼働時間
total_cost += cost * hours;
total_profit += profit * hours;
}
gr_shien.cost = total_cost;
gr_shein.profit = total_profit;
gr_shein.update(); // 更新する
},
type: 'test'
};
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-09-2021 10:23 PM
何度も申し訳ありません。
script includeで取得した値(memberテーブルの原価、利益)を、
client scriptもしくはbusiness rule側で、shien_kanriテーブルの稼働時間とかけて反映するという処理は可能でしょうか。
質問参考画像の下にもう一つ同じ処理を行うフィールドを作成したいと考えており、
script includeは同じ物を呼び出し、client script側で反映先を変更したいと考えております。
お手隙の際で問題ございませんので、ご教授いただけますと大変助かります。

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-09-2021 10:55 PM
済みません。クライアントスクリプトは入力フォームがフォーム上の値を変更するためのスクリプトです。
クライアントスクリプトはテーブルを参照しますが、テーブルの変更は申請が送信されたときにビジネス
ルールで行います。
フォーム画面上に表示する値を変更したいのでしょうか?それともデータベーステーブルを変更したいのでしょうか?
フォーム画面の表示を変更したい場合はフォーム画面のレイアウトをお願いします。
クライアントスクリプトには3種類あります。フォームが開けれる時に実行するonLoad、フォーム内のフィールド毎の値が変更された時に実行されるonChange、フォームが送信された時に実行されるonSubmit。
テーブルではなく、入力フォームのフィールドとフィールドに値が設定された時の動作のみの仕様が必要です。
例えば、フィールド1にxxxを入力したら、xxxに該当するmemberテーブルの価格とフィールド2に設定して、原価をフィール3に設定する。
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-09-2021 11:54 PM