見出し画像

JavaScriptとWebビューアで簡単合計計算

FileMaker ProでJavaScriptが使いやすくなってからやってみたかったことがあります。ポータルで絞り込んでレコードの合計金額を計算する、というシンプルなものです。だって計算速いぜとJS使いな人たちが言うのですもの。

作業1 レイアウトの修正

絞り込み一覧を表示しているレイアウトの表示範囲外にWebビューアを置きます。
名称を"web"とつけておきます。
Webアドレスにあるコードは削除して空白にします。
オプションのJavaScriptによるFileMakerスクリプトの実行を許可にチェックを入れておきます。(重要なので太字です。)
合計を表示したいところにマージ変数を配置します。
今回は$$toatlAmountとしました。
これにも名称をつけてください。今回は"合計"としました。

作業2 集計フィールドの用意

売上伝票に伝票金額の一覧を取るための集計フィールドを用意します。
合計値の一覧フィールドとでもします。

作業3JavaScriptで計算するためのスクリプトを用意

JavaScriptをWebビューアで利用するためのスクリプトを準備します。

1.これから利用する変数を宣言します。
変数を設定 [ $code ]
変数を設定 [ $data ]

2.対象レコードを絞り込むためにポータルの1行目に移動します。
 ポータルフィルタなど仕込んでいると、ポータルの中にいないと意図した結果が得られません。

ポータル内の行へ移動 [ 選択: オン ; 最初の ]

3.$data変数に伝票金額の一覧をセットします。
変数を設定 [ $data ; 値: List(UI_売上伝票::売上伝票の合計値の一覧) ]

4.$codeにJavaScriptのコードをセットします。
テキストを挿入を使うのはダブルコーテーションのエスケープなどを考慮しなくていいからです。

テキストを挿入 [ 選択 ; ターゲット: $code ]

テキストの内容です。今回使うのは無名関数という方法でJavaScriptを使っています。最後のFileMaer.PerformScript("js結果表示",total)は変数totalを引数として、FileMakerのjs結果表示というスクリプトを起動するためのものです。

(function (csv) {
let total = 0 ;
const lines = csv.split("\r");
const result = 0;
const arr = lines.map(line => line.split(","));
for ( let i = 0, len = arr.length; i < len; i++) total += Number(arr[i]);
FileMaker.PerformScript("js結果表示", total)
})

オブジェクトに移動して、JavaScriptを実行します。
この時に移動して一旦停止しないと動作しませんでした。

オブジェクトへ移動 [ オブジェクト名: "web" ]
スクリプト一時停止/続行 [ 間隔(秒): .001 ]
Web ビューアで JavaScript を実行 [ オブジェクト名: "web" ; 関数名: $code ; 引数: $data ]
#
現在のスクリプト終了 [ テキスト結果:    ]
#

作業4 結果を表示するためのスクリプトの用意

変数を設定 [ $$totalAmount ; 値: GetAsNumber(Get ( スクリプト引数 )) ]
オブジェクトの更新 [ オブジェクト名: "合計" ; 繰り返し: 1 ]
現在のスクリプト終了 [ テキスト結果:    ]

以上で終了です。

サンプルファイルは気が向いたら作るかも。。。。

参考にした資料

JavaScriptのコードは10分でスキルアップにある、計算ツールとしてのWebビューアシリーズの計算ツールとしての Web ビューア -3 クロス集計を参考にして作成しました。とてもわかりやすく解説されているので、まだみていない方は是非!

2023-03-01追記 マージ変数にも名称が必要なので追記しました。



この記事が気に入ったらサポートをしてみませんか?