【Claris FileMaker】トランザクションとインポート

Claris FileMaker 19.6以降のスクリプトステップとして実装された「トランザクションを開く」について、インポート時における「修正情報タイムスタンプ」フィールドなどの挙動を少し解説したいと思います。

トランザクションのメリットを再度おさらい

これまでのインポートでは、途中で失敗した場合、一部はインポートが成功してしまっているので、レコードを削除したり全置換したりなど元に戻す必要がありました。その戻す作業も失敗したら元に戻すこともできなく(通称デッドロック)なります。
そこで、「トランザクションを開く」、「トランザクション確定」「トランザクション復帰」を組み合わせることで、途中で失敗したときに確実にもとに戻せる(通称ロールバック)ようになりました(トランザクションの詳しい機能については過去のブログをご参照ください)。
https://kotovuki.co.jp/archives/13624
https://kotovuki.co.jp/archives/13660
https://kotovuki.co.jp/archives/13693

インポート時のデータを比較

<検証環境>
Claris FileMaker Pro 20.2.1.60

FileMaker Pro トランザクション中にデータをインポートして値を検証してみます。Sample.fmp12というファイルにテーブル「 A 」と同じフィールド構成を持つ「 B」を作成します。

フィールドの構成は以下の通りで、標準の更新タイムスタンプのフィールドを含みます。

テーブル「 A 」のレコードをテーブル「 B」にインポートしますが、インポートオプションのチェックを外します。この方法でインポートした場合、受け入れ元フィールドのオプション設定に影響なく「 A 」のテーブルのレコードが「B」のテーブルへそのままコピーすることができます。よく使用される便利な機能です。

トランザクション中でのインポート


スクリプトステップでトランザクションを設定し、その中で先ほどの設定でデータをインポートします。今回はトランザクションが成功した場合のテーブル「 A 」とテーブル「 B」のレコードを比較します。

テーブル「A」のデータ

テーブル「B」のデータ

更新タイムスタンプの情報が全て同じ値に変更されました。

トランザクションを開いた後、レコードのインポートのステップまではテーブル「 A 」と同一のレコードでコピーされますが、最後の確定で一気に複数のデータが更新されます。

何に気をつけなければいけないか

これまでインポートオプションを適切に設定していれば問題なかったのですが、トランザクションを開くなどを利用すると、各クライアントが編集したときに記録された更新タイムスタンプの情報を失ってしまいます。同期構成を構築する時や、ログの時系列などが重要な場合は注意が必要です。

作成されるソリューションによってはトランザクションの確定時に、更新タイムスタンプが全て同じ値になると不都合なケースがあるかもしれません。その場合は、トランザクションのスクリプトが実行されている時は自動計算が動作しない設定のフィールドを別に用意するなど、更新情報の取得の仕方を少し工夫する必要がありそうです。

 

【 余談 】
最近下記リンク先への流入増大したいこともあり、
流入量が多いとブログの価値が高まりますます投稿を加速していきたいと思います。
リンク先を開いていただけると大変助かります。
Claris International Inc. (日本語)
ご協力いただけましたら幸いです。