破損は検知したけれど
FileMaker で真っ白レコードを見つけるで破損レコードの検知方法を見つけることが出来ました。
時間帯からバッチ処理などではなく、作業中に破損を誘引する何かがあったことは分かりましたが、はっきりとした原因究明には至りませんでした。
そこで対応の1つとして、作業ログを取ってみることにしました。
作業ログを取る
- 作業ログテーブルを作成
- 作業ログ取得スクリプトを作成
- onRecordCommit を仕込む
作業ログテーブルを作成
まずは記録用のテーブルが必要ですので、こんな感じでつくりました。
作業ログ取得スクリプトを作成
これは本当に簡素なスクリプトで、およそこんな感じにしました。
- レイアウト移動
- 新規レコードを作成
- フィールド設定
- レイアウトを元に戻す
onRecordCommit に登録
レコードの修正タイミングでスクリプトを走らせたいので、レイアウトスクリプトトリガ onRecordCommit を使います。
詳しく知りたい方はリファレンスをお尋ねください。
これで、レコードを修正したタイミングで作業ログを登録できるようになりました!!
はじめてのレイアウトスクリプトトリガにちょっとルンルン気分なのを隠して、事務チームに報告です。
「もし何かあったら言ってくださいね」と、一応予防線を貼ることも忘れず。
事務チームからのフィードバック
1回カーソルを外すたびに、記録用のスクリプトが走るので、
その度に別レイアウトに裏で飛ばされてしまいます。
そこから元のレイアウトに戻ってくると、レイアウトの
1番上に引き戻されてしまうので、メンテ作業が
ものすごくしにくいです…
あ。。。なるほど。。
事務チームが作業しているレイアウトは縦に長いレイアウトなのですが、
裏で走る記録処理の結果、レイアウトの最上部に表示が移動してしまってやりにくい、ということでした。
たしかに使いづらいですね。。
レイアウト移動をしない方法に修正
といっても方法が思いつかなかったので、ピティナで一番FMに詳しい noguchi に相談したところ、
「レイアウト移動せずに実装できるよ」というので、方法を教えてもらいました。
(データベースの管理)
・記録用テーブルを作業用テーブルの子テーブルとしてリレーションを貼る
・その際、作業テーブルのPKと修正日時をリレーションキーとする
・リレーションを貼る際、「このリレーションシップを使用して、このテーブルでのレコードの作成を許可(I)にチェック」(スクリプト)
・これで"新規レコード作成"は不要になったので削除する
・レイアウトスクリプトトリガはそのままでOK
ということでした。
説明を聞いた時は???という感じだったのですが、
詳しく聞くと、こういうことでした。
今回の要点は
・レイアウト移動+新規レコード作成+フィールド設定
という処理から
・関連レコードのフィールド設定+関連レコードがなければ自動的にレコード作成
という処理への変更。"関連レコードのフィールド設定"自体は、リレーションを貼ったことで出来るようになった。
あとは、「関連レコードがなければ自動的にレコード作成」の部分だが、修正日時をリレーションキーにしているので、スクリプトで関連レコードのフィールド設定をしようとした時、必ず関連レコードがない状態になっている。
この時、
「このリレーションシップを使用して、このテーブルでのレコードの作成を許可(I)」にチェックしていることで
・関連レコードがなければ新規レコードを作成
をしてくれる。
うまく説明でき・・・てないと思いますが(苦笑
これで担当チームに煩わしい思いをさせずに作業ログを取れるようになりました。
参考になれば幸いです。