FileMakerメディア管理 実作編 Ver.3 日付の情報

挿入・インポート

日付をゲットするコードの選定も行い、便利なコードテンプレDBも作ったので日付をゲットすることができるようになりました。次はメディアの読み込みにどう日付を絡めるかです。

レコードにメディアを読み込むとき(単品)

日付情報はファイル名やパスくらいに重要なデータで、空欄であることは許されません。レコードにメディアを読み込むときに同時に日付をゲットすることを義務づけます。

通常登録の場合

ボタンにスクリプトを割り当て、
新規レコード → メディア読み込み → 日付ゲット
この流れを確保します。

基本、ソロの登録はこのボタンによってのみ行うよう誘導します。

しかし、オブジェクトフィールドをアクティブにしてメニューから「挿入」もできてしまいます。これの対処は、もう一つの読み込み方法であるドラッグ挿入と共通になります。

ドラッグの場合

オブジェクトフィールドにメディアをドラッグしても登録できます。ドラッグで読み込むとメディアが登録されるだけで日付が入りません。これはマズい。一工夫入れます。

メディアのオブジェクトフィールドにトリガOnObjectExitをセットして、ドラッグ挿入時の処理スクリプトを発動させます。

トリガ OnObjectExit
ところでFileMakerっていつも何らかの表示上の問題抱えてますねえ。選択したら文字が読み辛いよ。

ドラッグ挿入後の処理スクリプトでは、日付だけでなく、他の必要フィールドにも次々に記入していきます。

ドラッグ挿入時の処理スクリプト

  • サムネイルを作成するステップ
  • ファイルパスやposixを埋めていくステップ
  • スクリプト「単品の日付ゲット」ステップ
  • mediametaテーブルにIDを入れてレコード作成ステップ

こんな感じです。

この中で mediameta という未説明のテーブルに何か入れてますが今はちょっと関係ないのでまた後で。

スクリプト「単品の日付ゲット」は単品の日付をゲットするシンプルなスクリプトです。新規登録時に使います。

単品の日付ゲットスクリプト

流れはこうです。

  1. CodeTempを利用して単品日付ゲットのコードを取得
  2. 整形して実行、データをゲット
  3. 日付を整形してそれぞれのフィールドに転記

前のページで詳しく書きましたね。

作業用テーブルを使ったフォルダ一括処理

フォルダ単位でインポートしたり更新したり追加したりするとき、作業用テーブルを利用するという必殺技をVer.2で実施しました。

メインテーブルのコピーみたいな作業用テーブルを作って、そっちにまず何も考えず全部インポートして、それからレコードをチョイスして本番用メインテーブルにもう一度インポートするという荒技でした。これは有効な手段です。

Ver.3でもこのやり方を踏襲するわけですが、ここに日付が介在することでお話がチョーややこしくなります。

日付をいつゲットするか

Ver.2 をおさらいするとこうでした

  1. まず作業用テーブルにフォルダから第1のインポートを行います。このとき、速度を考慮してファイルパスだけをインポートします。
  2. ファイルパスさえあればメインテーブルと比較できるので「同じパスがメインに存在していれば重複データ」とわかります。
  3. 重複を除いて追加すべきレコードだけ残し、第2のインポートを行います。このときはメディアもすべてフルでインポートします。
  4. これで
作業用テーブルにデータが揃い、ユーザーが任意のメディアに対して読み込む、読み込まないを選択出来る状態になります。
  5. 第三のインポートで、メインテーブルに作業用テーブルのレコードをインポートします。

このような処理の手順でした。インポートでも更新でも基本同じ流れです。

V2の流れに日付が加わります。日付データの束はGetCodeによって取得済みとしましょう。日付のデータとは即ち「パス+作成日付+変更日付」の改行区切りリストです。

手順A: インポートしてから日付を探す

V2を継承し、日付を追加するだけの流れならこうなります。

  1. まず作業テーブルに第一のインポートを行います。ファイルパスのレコード群が誕生しました。
  2. ここに日付を加えます。レコードをループで回しつつ、その中で日付が入ったリストをループで回します。同じファイルパスを見つければ「作成日付」「変更日付」のフィールドへそれぞれ転記します。
  3. あとはV2と同じ、比較して第二のインポート、チョイスして第三のインポートです。

これでOKと最初は考えていました。が、現実は厳しいのでした。100件程度のインポートなら気になりませんが、数千件のインポートをテストしていくと、イラつくレベルで速度が遅いのです。

ちょっとくらいなら我慢できても、そもそも日付ゲットの段階ってのは、プレ・インポートのさらにプレっていう立ち位置です。この後、さらにとことん遅いFileMakerのインポートが待ち受けているし、その後さらに第三のインポートまであるんです。

最初の日付ゲットくらいで待たされるのは許容できません。

手順B: 日付でリストしてからインポートする

そこでしばし考えた。そしてほどなく結論に至りました。

そもそもですよ、最初のインポートでパスだけのレコードを作っています。次にパスと日付のリストをループで回して同じパスを探します。ちょっと待てや。こっちに最初からパスあるやん。

日付リストのほうをベースにすればいいのでは?

最初のインポートが要らない作業だと気づきます。日付ゲットでパスと日付のリストを持ってるんだから、それをそのままレコード化すればいいだけです。

そんなわけで単純な解決策にいたりました。

1 日付リストをゲットしてレコードに落とし込みます。

2 パスと日付が入ったレコードが出来上がります。

3 それを元に比較したりチョイスしたりして、本番のインポートに繋げます。

まったく意味のない時間食いループを省略できて速度は1000倍アップ。

なんて良いアイデアを思いついたんだろう俺って天才?と、あほが有頂天になっていると、直後、問題が雪崩のように発生します。

 

FileMaker Pro

Download FM_MediaDB_Ver3_5.zip

ダウンロードはこちらからご自由にどうぞ

FMでメディア管理 実作編 Ver.3 日付の情報

この後、エラーによって全てを見直すことになった件について書かれます。実作ファイル V0 から継続的に追ってきた人にはちゃぶ台返しと新たな認識のおもしろい話ですが、本筋からちょっと外れますのでページを分けます。

次のページ:設計と計算式の大変更

ちゃぶ台返しの話を挟んで、このページの続きが次の次のページに引き継がれます。

次の次のページ:Importテーブル