- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
12-12-2023 06:03 AM
皆様
お世話になります。
どのように実装すればよいかわからないため、お知恵をいただけますでしょうか。
案件管理的なことをServiceNowで実装しようとしています。
案件には売上及び支払いがあります。
案件は案件テーブルで管理し、売上は売上テーブルで管理しているとします。
案件テーブルのフォーム上に、関連リストで売上テーブルの情報を表示させます。
1案件に対して、複数の売上があるため、関連リストに複数のレコードが紐づいています。
このとき、案件テーブルの1案件のレコード上のフィールドである「売上合計」に
関連リストに紐づいているレコードの売上の合計値を表示させたいです。
例)
〇〇案件
売上合計:7,000 万円(←計算させて自動入力させたい)
<関連リスト>
売上A 1,000万円
売上B 2,000万円
売上C 4,000万円
この設計方法について、
① ServiceNow上のどの仕組みを使って実装するのが適切か
② Scriptが必要な場合、サンプルコード
以上をご教示いただけますでしょうか。(②はなくてもOKです)
どうぞよろしくお願いいたします。
解決済! 解決策の投稿を見る。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
01-02-2024 05:51 PM - 編集済み 01-02-2024 05:55 PM
>① ServiceNow上のどの仕組みを使って実装するのが適切か
Business Ruleがよいかと思います
>② Scriptが必要な場合、サンプルコード
作ってみましたので下記ご参考まで
・Business Ruleの設定
→When:After
→Insert,Update,DeleteがTrue
→売上テーブルへのBusiness Rule
→条件:売上フィールドの変更
スクリプト(合計を算出する処理は2つ考えてみました)
(function executeRule(current, previous /*null when async*/ ) {
var sum = 0;
// 売上明細の売り上げを1件ずつ拾って加算
var grChild = new GlideRecord('u_revenue');
grChild.addQuery('u_parent', current.u_parent);
grChild.query();
while (grChild.next()) {
sum = sum + grChild.u_revenue;
}
// // 売上明細の売り上げを集計して合計を算出
// var revenueGA = new GlideAggregate('u_revenue');
// revenueGA.groupBy('u_parent');
// revenueGA.addAggregate('SUM', 'u_revenue');
// revenueGA.addQuery('u_parent', current.u_parent);
// revenueGA.query();
// revenueGA.next();
// sum = revenueGA.getAggregate('SUM', 'u_revenue');
// 合計を案件のほうに反映して更新
var grParent = new GlideRecord('u_custom_project');
grParent.get(current.u_parent);
grParent.u_sum_revenue = sum;
grParent.update();
})(current, previous);
※前提条件
- 案件テーブル:u_custom_project
- 売上合計フィールド:u_sum_revenue
- 売上テーブル:u_revenue
- 売上金額フィールド:u_revenue
- 案件テーブルへの参照フィールド:u_parent
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
01-02-2024 05:51 PM - 編集済み 01-02-2024 05:55 PM
>① ServiceNow上のどの仕組みを使って実装するのが適切か
Business Ruleがよいかと思います
>② Scriptが必要な場合、サンプルコード
作ってみましたので下記ご参考まで
・Business Ruleの設定
→When:After
→Insert,Update,DeleteがTrue
→売上テーブルへのBusiness Rule
→条件:売上フィールドの変更
スクリプト(合計を算出する処理は2つ考えてみました)
(function executeRule(current, previous /*null when async*/ ) {
var sum = 0;
// 売上明細の売り上げを1件ずつ拾って加算
var grChild = new GlideRecord('u_revenue');
grChild.addQuery('u_parent', current.u_parent);
grChild.query();
while (grChild.next()) {
sum = sum + grChild.u_revenue;
}
// // 売上明細の売り上げを集計して合計を算出
// var revenueGA = new GlideAggregate('u_revenue');
// revenueGA.groupBy('u_parent');
// revenueGA.addAggregate('SUM', 'u_revenue');
// revenueGA.addQuery('u_parent', current.u_parent);
// revenueGA.query();
// revenueGA.next();
// sum = revenueGA.getAggregate('SUM', 'u_revenue');
// 合計を案件のほうに反映して更新
var grParent = new GlideRecord('u_custom_project');
grParent.get(current.u_parent);
grParent.u_sum_revenue = sum;
grParent.update();
})(current, previous);
※前提条件
- 案件テーブル:u_custom_project
- 売上合計フィールド:u_sum_revenue
- 売上テーブル:u_revenue
- 売上金額フィールド:u_revenue
- 案件テーブルへの参照フィールド:u_parent
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
01-09-2024 07:49 PM
ありがとうございました!!!
いただいたScrriptを参考にビジネスルールを作ったところ、想定どおりの動作をしました。
大変助かりました。お返事が遅くなってしまいすいません。