client scriptで別テーブルから値を取得し、反映する方法  How to get the value from another table with client script and reflect it

Kazuki Maekawa
Mega Explorer

こんにちは。

現在、「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.
 

 

 

10 REPLIES 10

ご返信ありがとうございます。

>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フィールドで選択した時点で行いたいです。

 

回答になっているかわからず申し訳ございませんが、お力添えの程よろしくお願いいたします。

 

 

ビジネスルールかスケジュールジョブから次ぎのようなスクリプトインクルード関数を呼び出すことになると思います。

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'
};

 

何度も申し訳ありません。
script includeで取得した値(memberテーブルの原価、利益)を、
client scriptもしくはbusiness rule側で、shien_kanriテーブルの稼働時間とかけて反映するという処理は可能でしょうか。
質問参考画像の下にもう一つ同じ処理を行うフィールドを作成したいと考えており、
script includeは同じ物を呼び出し、client script側で反映先を変更したいと考えております。

お手隙の際で問題ございませんので、ご教授いただけますと大変助かります。

済みません。クライアントスクリプトは入力フォームがフォーム上の値を変更するためのスクリプトです。

クライアントスクリプトはテーブルを参照しますが、テーブルの変更は申請が送信されたときにビジネス

ルールで行います。

フォーム画面上に表示する値を変更したいのでしょうか?それともデータベーステーブルを変更したいのでしょうか?

フォーム画面の表示を変更したい場合はフォーム画面のレイアウトをお願いします。

クライアントスクリプトには3種類あります。フォームが開けれる時に実行するonLoad、フォーム内のフィールド毎の値が変更された時に実行されるonChange、フォームが送信された時に実行されるonSubmit。

テーブルではなく、入力フォームのフィールドとフィールドに値が設定された時の動作のみの仕様が必要です。

例えば、フィールド1にxxxを入力したら、xxxに該当するmemberテーブルの価格とフィールド2に設定して、原価をフィール3に設定する。

説明がわかりづらく申し訳ありません。

行いたい処理はフォーム画面上に表示する値の変更です。

①shien_kanriフォーム上のフィールド「1」の値が選択されたら、その情報を基にmemberテーブル上で一致するレコードを探す。

②一致したレコードの「原価」「利益」の値を取得する。

③その数字に、shien_kanriフォームの「稼働時間」に入力された数字をかける。

④③で計算した数字をshien_kanriフォームの「原価」、「利益」フィールドに反映する

という処理になります。

find_real_file.png