メディアを管理するデータベースを作り、ステップバイステップで進めています。真の「追加のみインポート」を組み入れ、フォルダ更新が実用になります。専用ですメディアファイルをステップバイステップで作り育てるシリーズです。よって、あくまで試験的にお使いください。2メディア管理で次のようなシチュエーションありますね。フォルダから一括でインポートしました。その後元のフォルダに新たなファイルが追加されました。メディア管理からそのフォルダを再度指定して新たに追加されたファイルだけをインポートしたい。インポート」ですでに実現してないか?はい。ナンチャッテで実装していました。標準機能、インポートオプション「更新」を使ったものです。比較して更新しているように見えますがそれは嘘で、実態は「すべてを上書きして追加」しています。メディア管理でこれは致命的に駄目ですよね。1000点の画像が入ったフォルダを登録することを想像してみれば判ります。「既存があればそれを避けて追加のみインポート」でないと、時間と容量の浪費にしかなりません。真の追加のみインポートを実現しました。フォルダを指定して「更新」したとき、すでに登録済みのアイテムを飛ばして未登録のファイルだけを追加でインポートします。他テーブルと合わせるためです。そのため、登録方法ラベルという、表示用のフィールドを追加することとなりました。ひとつ、拡張子フィールドがありますが、抽出計算を少し見直し、空欄の場合に「N/A」と記入するように。関連して、フィルタのスクリプトの不出来を修正しています。他、オブジェクトフィールドと設定の「メディアフォルダ」フィールドを元にファイルパス(FMとPOSIX)をゲットするカスタム関数をこしらえてご機嫌に使っています。このファイルでしか意味がないローカルカスタム関数です。ダイアログ風のレイアウトを作ってみたりもしています。細かすぎる上に本質的なことではないのでここでは触れませんが。使い方ダウンロードしたてのファイルは空ですので、何かメディアファイルをインポートしてください。前回と同じく、インポート設定パネルで設定し、インポートします。インポート設定パネルここで指定したフォルダは「セッションフォルダ」として記録され、フィルタや更新で使えます。セッションフォルダの実態はフォルダパスですが、表示用に「セッション名」としてフォルダ名がセットされます。このセッション名は好きな文言に変更できます。overview上下矢印キーでレコード移動、スペースキーでプレビュー画面が出ます。検索窓と4つの項目で絞り込みができます。ボタンでは、セッションフォルダと同じフォルダを選ぶとボタンが「更新」になって、追加されたファイルだけをインポートできます。いうことで、仕組みは大きく変更されましたが使用感も見た目も前回のバージョンと同じです。違いがはっきりわかるのは、多くのファイルが入ったフォルダを登録し、再度「更新」したときでしょう。1000個の画像が入ったフォルダを参照でインポートしました。そのフォルダに、新たに3点の画像を追加しました。インポートパネルでそのフォルダを再び指定すると「更新」になります。前回のバージョンでは、1003個のファイルを無理矢理追加インポートしていました。今回は3個のみを新規に追加します。仕組み編インポートの仕組みは専用の作業用テーブル追加してそれを使います。追加のみインポートについて、すでに投稿がありますのでご参照ください。追加のみインポートこれをそのまま実践したのが今回のバージョンです。いうテーブルを追加し、作業用として使います。インポート関連のスクリプトは刷新されました。テーブルには、メインテーブルと同じフィールドをいくつか用意します。リレーションで繋げておきます。何で繋げるかというと、メディアファイルを特定するユニークな値、すなわちパス(的なフィールド)です。パスフィールドではありません。スクリプトで行うインポートの流れはこうです。テーブルにまず追加インポートします。ここではファイル名とインポート元パスだけをインポートし、メディアを取り込みません。フォルダ内アイテムをリスト化するといった感じです。ファイル名とパスのみインポート。既存があれば右側に現れる。次に、メインテーブルと比較して登録済みのレコードがあれば全部削除します。残ったのが、未登録つまり追加すべきファイルです。インポートなら既存はありませんし、そうでなければ既存がいっぱいあります。新規と更新はそれだけの違いです。既存をバッサリ削除したあとは第二のインポートを行います。今度は「更新」で、イメージとサムネイルをインポートします。インポートオプションファイル名とファイルパスを照合するのがポイントです。どちらか一方では完全ユニークであることを担保できません。その理由は散々リンクしているこちらの記事に。テーブルにインポートが大体完了しました。見るとサムネが空欄のやつがおります。ImportFMテーブルへのインポートを完成させます。インポートしたファイルタイプによって、「オブジェクト」や「サムネイル」が読み込まれない場合があります。それぞれにチェックを行い、エラーを抽出してレコード一個ずつ処理します。「オブジェクト」がない場合、多分このファイルはメディアファイルではないのでしょう。「ファイルを挿入」します。ここで「アイコン」を選択することが重要。インポートで弾かれたファイルもこれで挿入されます。サムネイルの作成はこれまでの通り、代替アイコンを付けて回る処理を行います。サムネイルメインテーブルへ転記ImportFMテーブルが完成したので、丸ごとメインテーブルに新規で転記します。必要な他のフィールドのデータも作成して追加します。ファイル」してもいいけど、私はリストを使ってチクチクと追加していくのを好んでいます。何かフィールドを転記します。ファイル名とインポート元パスがいいですね。これによりメインテーブルにレコードが作成されるので、あとは他のフィールドを「全置換」スクリプトで埋め尽くします。各種パスやセッション各フィールド、日付とか。これにてインポート完了しました。今回採用した方法により、一つのスクリプトでファイルでだろうがフォルダインポートだろうが新規だろうが更新だろうが全部共通でイケます。詳細ここからはさらに細かい説明になります。仕組みの詳細に興味ある方のみ、お進みください。テーブルのリレーションさてところで、メインテーブルとImportFMテーブルをリレーションで繋げる際の照合フィールドの件です。それは本来パスであるべきです。メディアファイルを特定するユニークな値と言えばオブジェクトそのものを除いてパスしかありません。パスフィールドは照合に使えません。その事情については、長年の苦難の末に近年真理を発見し、報告済みですのでご覧ください。何度も同じのをすいません。FileMakerで正しくリレーションできない照合の問題、原因と解決【重要】パスモドキそのような事情で、パスフィールドが使えないのでそれに変わるフィールド、パスモドキを追加します。テーブルにも用意します。パスモドキとは何ですか。それはインポート元パスから作ります。変換し、それを右から100文字抽出したものです。パス代わりに照合フィールドとして使います。チェックフィールド既存チェックメインテーブルにあるかないか。簡単な計算で済むのでフィールドを用意しておけば楽です。みたいな、そういう計算です。第一のインポートでパスモドキを作ったらリレーションされるので、このチェックフィールドにも0か1かが入ります。1を検索して削除すれば、既存を除く処理が一瞬です。オブジェクトのチェックパスを読み込んだ後にメディアをインポートするとき、ファイルタイプによってオブジェクトフィールドにインポートされないケースがあります。インポート時にエラー(700や724だったかな)が出ているのですが気付きません。オブジェクトフィールドに何もないように見えるので目視で確認できますが、こうしたケースを抽出したい局面があります。そこで、オブジェクトフィールドに正しくオブジェクトが存在しているかどうかチェックします。次のような計算フィールドを置いて、オブジェクトをチェックしています。)この計算式に辿り着くまでのど根性の日々についてくどくは申しませんが、参照のリンクだけ置いときます。状態を取得する方法サムネイルのチェックサムネイルが作られないケースはもっと多くありますね。上記と同じ計算式でサムネイルフィールドのチェックもしています。)さて、チェックするからにはエラーに備えた仕組みが必要です。第二のインポート後、エラーで検索し、エラーがあればループでレコード一個ずつ処理します。目的ファイルのFMパスはすでにありますから、そのパスを使って「ファイルを挿入」ステップを実行させます。「参照」と「格納」で処理を分けますが、肝心なのは「ファイル名付きのアイコン」を指定することです。これで、オブジェクトがインポートできなかったファイルをファイルとして挿入できます(出来ないタイプもありますがほぼいけます)作られないサムネイルを何とかする措置これは本シリーズで既存ですので割愛します。1スクリプトスクリプトは自分に判りやすいように作業ごとに作成、[batch]でまとめます。本筋とあまり関係ない見栄え的なこととか、そういうのは[batch]が担当します。今回でいうと、ダイアログモドキの処理とか。ダイアログモドキダイアログ的なウインドウを出したい気持ちがあるので、テスト的にダイアログモドキを作ってみています。いったウインドウです。前は必要なときに必要な数だけレイアウトを作ったり、何か条件を付けて四角オブジェクトを前面に覆ってフリをしてみたり、いろいろやってきました。今回はダイアログモドキを試しています。グローバル変数を駆使するだけです。モドキレイアウトだけでは済まないので、インポートでは特別製レイアウトを用意したりします。影でフィールドがひしめいておりますな。ダイアログ風のレイアウトでは見えないところにフィールドを配置スクリプトや計算式の詳細はファイルでご確認スクリプトや計算式は、ファイルをダウンロードして直接ご確認ください。ここに載せ始めたらキリがないので。課題さて、何か機能を追加すると、途端に新たな不満が出てきます。物作りの恐ろしさですね。今回は機能を追加したわけでもないですが、インポートが快適になりましたのでさくさく試用していると、やはりフィルタ機能が気になり始めます。拡張子を値一覧にセットして分類しています。調子に乗ってファイルを登録して遊んでいると、拡張子分類があっという間に妙なことになります。指定したフォルダにメディアファイルだけが入っているともかぎりませんしね。不要なファイルタイプもインポートしてしまいます。これはこれで良いんです。メディア管理を越えて、ファイル管理ができます😀(ファイル管理ならFinderでやっとけと)これをそのうち何とかしたいですね。インポートするファイルタイプを最初から絞り込んでおくという仕組みです。使うと、これは逆に扱えるタイプが少なすぎてお話になりません。