2014年頃にここで作っていた弁護士向けのシステムにも関係してくるんですけど、ファイル管理をもっと細かくパスを利用して、フォルダごとや、ファイルごとに管理できないかということで作ってみました。
案件管理っていろんな分野で使われるので知っておくと便利かもしれません。
さっそく作ってみますか!
僕はwinのFileMakerPro16Advancedで作っています。
たぶん、15でも動くかな
テーブルは
案件管理と関連ファイルの
2つです。
頭にDとか付いているのは
データベースのD
マスタになるテーブルなどには
Mとか付けています。
案件管理は入力や修正などを行うテーブルなのでD、関連ファイルは、事前登録するようなマスタではなく、案件管理と連動してデータが増えていく明細のような働きをするので、これもD、
開発者の癖とかあるので気にしないでください。
テーブルごとにフィールドの設定を行います。
Keyになる案件idなどは
デフォルトのシリアルでも良いのですが、全削除しても1から始まらないので簡単なSQLを使っています。
僕的にはFileMakerでSQLを使うのはこれだけ。
(FMでSQLって好きじゃないんですけど、まぁ、これだけは便利なので・・(笑))
g_フォルダpathというフィールドはテキストのグローバルフィールドです。
関連ファイル側も同様にフィールを設定します。
ファイルpathのフィールドは、ファイルを格納するファイルBOXというオブジェクトフィールドを指定したいので、計算式でGetAsText()を使用します。
あとは、基本的な設定です。
リレーションはkeyになる案件id同士を結びます。
関連ファイル側の作成許可にチェック。
運用の用途によりますが、削除にチェックすると、案件レコードが削除されると関連ファイル側も削除されてしまうので、ここではあまりお勧めしません。
ごくごく単純なレイアウトです。
基本データとポータル
ポータルは関連ファイルのテーブルです。
アイコンの絵はSVGのファイルを沢山追加していますので
このファイルを移植すれば使えます。
ポータルの中のボタンを設定していきます。
×ボタンは+ボタンと重ねており、インスペクタのオブジェクトを隠す項目にスクリプトを入れて制御しています。
+ボタン(追加ボタン)は
Get( ウインドウモード ) = 1 or
not IsEmpty( GetRepetition( D_関連ファイル::ファイルBOX ; 1 ) )
×ボタン(削除ボタン)は
Get( ウインドウモード ) = 1 or
IsEmpty( GetRepetition( D_関連ファイル::ファイルBOX ; 1 ) )
です。
追加ボタンのスクリプトです。
今回は外部保存ではなく、パスを利用した管理なので
ファイルの挿入方法を”参照”に設定しています。
参照にすると、オブジェクトをクリックするとファイルが展開して開きます。
※ファイル名付のアイコンを選択してください。画像ファイルの場合は、その画像はオブジェクトに表示されませんが、参照の場合はこれでOKです。
削除ボタンのスクリプト。
僕個人で使うときはボタンを設定しないでオブジェクトに直接右クリックだの削除だの行うのですが、ここはちゃんとボタン操作で設定してみます。
フォルダパスを取得するスクリプト。
そうなんです。
フォルダパスとファイルパスを別々にしてめんどくさいのですが、説明のためにあえて分けてます。ゆくゆく使っていくと運フォルダパスだけで用が足りるかと思うのですのが・・・。
フォルダパスを取得して、指定のフォルダの中身を閲覧させ、その中身をクリックするとファイルが展開する!便利ですよね。
ファイルを一つ一つ選んでパスを取得するなら、こっちの方が楽なんです。
ここではMiddle関数を使用してパスを取得
Middle ( $path ; 2 ; 50 )
Middle ( テキスト ; 先頭文字位置 ; 文字数 )
フォルダパスからの展開先を作成します。
グローバルフィールドと
webビューアーを使って展開させます。
webビューアーにはしっかりとオブジェクト名を指定してください。
フォルダを開く
スクリプト。
ファイルを開く
スクリプト。
Let([
#path=GetValue(GetAsText(D_関連ファイル::ファイルBOX);2);
/*絶対ファイルパスの抽出*/
/*この2ってのはパスが2行取得されちゃうので2。3行取得されるときは3*/
#pos=Position(#path;"/";Length(#path); -1);
/*逆から数えて1つ目の"/"の位置*/
#path=Left(#path;#pos);
#path=Substitute(#path;["image:";"file:/"]; ["filewin:";"file:/"];["imagewin:";"file:/"];["filemac:";"file:/"])
/*fileスキーム変換 ここんところ、多くて勘弁してほしいよね*/
];
#path & GetContainerAttribute ( D_関連ファイル::ファイルBOX ;"filename" )
)
//けっこう強引かも(笑)
この辺はちょっと難しいかもしれませんが、いちを掲載しておきます。
オブジェクトにファイルをドラッグすると、参照ではなく挿入になり、パスが入りません。よく「ドラッグさせてほしい」という要望があるのですが、ひとつのディスプレイでドラッグドロップするには、一旦画面を縮小させてファイルが置かれているフォルダを見える場所に配置して行うので、一見便利そうで使われてない事が多いです。
ちゃんと、ボタンからディレクトリを確認してフォルダやファイルを選ぶのがベストかと思います。
パスが2行表示になるのはFileMakerの仕様です。
1行目が相対パスで
2行目が絶対パスです。
読み込まれるのは絶対パスの方になります。
今回はパスがメインですが、次回はフォルダの場所が変わった場合や、インポートを利用した一括取り込みなども追記していきます。
今日のデモファイル(ダウンロード)
ボタン設定のアイコン、200個くらい入れておきました(笑)