OnWindowTransaction -まだよくわかっていない人のために-
「Claris FileMaker Pro 2023」が発売されてから数か月が経過しました。
特徴は、
- OnWindowTransaction スクリプトトリガ
- スクリプトが完了するのを待たずにサーバ上のスクリプトを実行
- Claris Connectの無料利用枠の提供
- 「FileMaker Server」のUbuntu 22.04 LTS (Long Term Support) Server AMD64 および ARM64のサポート
などがあります。
今回はその中の「OnWindowTransaction」についてみていきましょう。
なにができるのか
まず、「Clarisエンジニアリング ブログ(OnWindowTransaction スクリプトトリガによる監査ログの作成)」をみてみます。
OnWindowTransaction スクリプトトリガによる監査ログの作成 OnWindowTransaction スクリプトトリガは FileMaker Pro 20.1.1 の新機能で、データベースのインタラクションの作成、更新、および削除をすべて記録できます。このエンジニアリングブログではサンプルデータベースを使用して、OnWindowTransaction スクリプトトリガ、このスクリプトトリガを使用して監査ログを作成するプロセス、およびプロセスに存在するいくつかの制限について説明します。 |
トリガイベント OnWindowTransaction スクリプトトリガは次のスタンドアロンイベントとトランザクション内のイベントに関する情報を取得します。 単一のレコードの作成 単一のレコードの更新 単一のレコードの削除 複数のレコードの作成 複数のレコードの更新 複数のレコードの削除 |
URL : https://support.claris.com/s/answerview?anum=000037258&language=ja
どうやら、レコードが作成、更新、削除された際の情報が取得できるようです。
では「どのように使用するのか」についてですが、引き続き「Clarisエンジニアリング ブログ」の記事をみて、そこで挫折した方もいるのではないでしょうか。自分もそのひとりです。
同じような方のために、もうすこし、初歩のわかりやすいところから見ていきたいと思います。
なにはともあれ、まずはヘルプをみてみましょう。
URL : https://help.claris.com/ja/pro-help/content/onwindowtransaction.html
ヘルプを見てわかったのは、
(準備)スクリプトを作成する ↓ (準備)OnWindowTransactionスクリプトトリガに作成したスクリプトを指定する ↓ レコードの作成、更新、削除が行われると作成したスクリプトにそれらの情報がわたされてくる |
という動きのようです。
「作成するスクリプトでわたされてきた情報をログテーブルに記録」していけば、レコードの変更履歴がとれるのではないか。
ということになりそうです。
どこのフィールドの変更内容が取得されるのか
簡単そうだと喜んでいたのですが、見逃してしまいそうになったヘルプの
「onWindowTransaction」という名前の基本テーブルのフィールド (または指定されたフィールド) の内容」 |
という記載に気付きました。
前もってテーブルに「onWindowTransaction」というフィールドを用意しておかないといけない。
そして取得される情報はその「onWindowTransaction」フィールドのものになる。
ということらしいです。でも普通とりたい変更内容の情報は
「商品マスタ」の「価格」フィールド
「見積詳細」の「見積金額」フィールド
などではないでしょうか。
このことのためにわざわざ「見積金額」フィールドの名称を「onWindowTransaction」にしたくはないはずです。
さらによく見てみると「(または指定されたフィールド)」とあります。
ということは、変更内容の情報をとりたいフィールド名が指定できる、ということのようです。
やっとみえてきました。
整理してみる
整理すると
- レコードの新規作成、更新、削除が行われると、「ファイル>ファイルオプション>スクリプトトリガ」で指定したスクリプトが呼び出される。
変更内容はスクリプトの引数で受け取る。 - フィールド名で指定したフィールドの内容が監視される。
- (指定がない場合は「onWindowTransaction」というフィールドが監視対象となる)
ここで以下のような疑問がでてくるかと思います。
〇 いつ、だれが変更したという情報はないの?
〇 監視対象(変更内容の情報をとりたい)フィールドが複数ある場合はどうするの?
〇 変更後の内容とセットで変更前の値も同時にログに出力しておきたい時は?
(ログをさかのぼって見るのはイヤだ)
等々が出てくるかと思いますがそれはひとまずおいて、さっそくやってみたいと思います。
どのようなスクリプトを作成したらよいかなどはやってみながら探っていきましょう。
やってみよう
準備
業種別サンプルから「会員管理」をダウンロードしてきます。
URL : https://content.claris.com/jpapps
このサンプル「会員管理」に「onWindowTransaction」の機能を追加していきます。
ここでは、「入金額」が変更された場合の内容を取得してみます。
① 呼び出されるスクリプトを用意する
ヘルプの
「トランザクションが正常に確定された後にスクリプトを実行して JSON オブジェクトを作成します。」
とは、レコードに変更があったら、トリガに指定されたスクリプトが呼び出される。変更内容はJSON形式のデータが引数としてわたされてくる。
ということのようです。
●「会員管理」をひらいて、新規スクリプト「Trg_onWindowTransaction」を作成し、わたされてきた変更内容(引数)を受け取る変数「$$変更内容」を指定します。
② OnWindowTransactionスクリプトトリガに作成したスクリプトを指定する
「OnWindowTransaction」トリガはヘルプ スクリプトトリガの設定 をみると「ファイルオプション」で指定するようです。
●ファイル>ファイルオプション>スクリプトトリガから作成した「Trg_onWindowTransaction」を指定します。
●フィールド名の欄にフィールド「入金額」を指定します。
これで準備ができましたので実行してみましょう。
実行
① 「会員情報詳細」画面から入金額を入力してみます。
※検証のために「入金日」も入力してみます
●ツール>データビューアを開いて変数「$$変更内容」を確認します。
$$変更内容の中身は以下となります。
・ファイル名 : 会員管理 ・基本テーブル名 : 会費 ・レコード処理 : Modified ・レコードID : 45 ・変更後の内容 : 10000 |
「会費」が「10000」に変更されたという内容になります。「入金日」についての内容はありません。
「レコード処理」についての解説がヘルプを探してもどこにも記載がありませんでした。「Clarisエンジニアリング ブログ(OnWindowTransaction スクリプトトリガによる監査ログの作成)」をみると、
New Modified Deleted |
の3つのようです。内容は下記となります。
New : 新規作成の時
Modified : 更新の時
Deleted : 削除された時
② 今度は削除してみたいと思います。
「会員情報詳細」画面をひらいてゴミ箱ボタンを押して削除します。
●「$$変更内容」を確認します。
③ 追加してみます。「会員情報詳細」画面をひらいて+ボタンを押して追加します。
●「$$変更内容」を確認します。
最後に
ここまでの操作でフィールド名に指定した「入金額」についての作成、更新、削除の履歴がとれることが確認できました。
では、「複数フィールド」(「入金額」と「入金日」など)の作成、更新、削除の履歴が知りたい場合はどうすればよいのでしょうか。
また、履歴をとるときは、「いつ、だれが」操作したのかという情報もあわせてほしいはずです。
さらに、変更後の内容とセットで変更前の値も同時にあればさらに便利です。
これらについては別途機会があればブログで取り上げていきたいと思います。
「OnWindowTransaction」について、まだよくわかっていなかった方のために、今回の記事が参考になれば幸いです。