FileMaker Advent Calendar 2015の17日目
「FMC2Goスケジューラーにおけるスケジュールの自動アップデート機能」のつづき
FMC2Goスケジューラーにおけるスケジュールの自動アップデート機能の続きです
前回は「checkForUpdate」スクリプトを追いかけていたわけですが、今回はそこから呼ばれている「importUpdate( update_num )」というスクリプトを追いかけてみる
「importUpdate( update_num )」というスクリプトは、なにをしている?
スクリプトの名前から、取得しておいたアップデート版のファイルを取り込もうとしているのは容易に想像がつく
最初のブロック
ダウンロードしてきたアップデート版のファイルを保持しているグローバルフィールド「Utility::zgr_update_file」に入っているファイル名に拡張子".fmp12"が含まれているかを確認
Let ( [ $file_type = ".fmp12";
$last_err = not PatternCount( Utility::zgr_update_file; $file_type )] ;
$last_err)
PatternCount関数の戻り値をnotで反転しているので、
- ".fmp12"がファイル名に含まれる:0
- ".fmp12"がファイル名に含まれない:1
となる
ファイル名に拡張子".fmp12"が含まれていなければローカル変数「$err_msg」にエラーメッセージを設定してスクリプト終了
その次のブロック
書き出すパス(テンポラリパス)を取得して、そこにアップデート版のファイルを書き出す
テンポラリパス
テンポラリフォルダ名は S で始まり、操作が行われる間のデータベースエンジンのセッションを表す番号がそれに続きます。
- FileMaker Pro では、テンポラリフォルダおよびそれに配置されているすべてのファイルは、FileMaker Pro を終了すると、削除されます。
- FileMaker Server では、それぞれのスケジュールは固有のセッションで実行されます。スケジュールが完了すると、セッションは終了してテンポラリフォルダは削除されます。
書き出すパス(テンポラリパス)を生成する
fnPlatformPathPrefix & Get( テンポラリパス ) & Utility::zgr_update_file
「fnPlatformPathPrefix」というカスタム関数
「fnPlatformPathPrefix」というカスタム関数が定義されているようなので、ついでにそれも見ておきましょう
カスタム関数
カスタム関数の機能を使用すると、作成したデータベースファイル内の任意の場所で再使用できるカスタム関数を作成することができます。FileMaker Pro ファイル間でカスタム関数をコピーおよび貼り付け(ペースト)したり、カスタム関数を他の FileMaker Pro ファイルからインポートできます。一度関数に対して計算式を作成すれば、他のフィールドに適用したり、他のスクリプトで使用する場合に式を作成し直す必要はありません。
カスタム関数とカスタム関数に含まれる式を一元的に維持および修正することができます。カスタム関数に適用された変更は、そのカスタム関数が使用されているすべてのインスタンスにコピーされます。
カスタム関数は、FileMaker Pro と FileMaker Pro Advanced の両方で使用できます。
fnPlatformPathPrefix関数(カスタム関数)
/*
* PURPOSE: returns a file path prefix appropriate for the current system platform - "filemac:", "filewin:", or "file:"
*
* DEPENDENCIES: built-in functiosn Abs() and Get( SystemPlatform ).
*
* HISTORY: See end of code.
*/
Let ( [
$cur_plat = Abs( Get( システムプラットフォーム ) )
] ;
Case(
$cur_plat = 1;
"filemac:";
$cur_plat = 2;
"filewin:";
"file:"
)
)
/*
* HISTORY:
* 20130312 - dsimerly - initial implementation.
*/
なぜ「fnPlatformPathPrefix」関数を使うのか?
FileMakerで外部のファイルを扱うためには動作するプラットフォームにあわせて
- MacOSX→filemac:
- Windows→filewin:
を付加してアクセスする必要があるため
詳しいことは
ファイルパスの作成
を参照
ということはFileMakerGoは"file:"を付加してテンポラリパスにアクセスしているんでしょうね
ちなみに"file:"はMacOSXでもWindowsでも相対パスなら使えるんですが、Get( テンポラリパス )では絶対パスが返ってくるので、ちゃんと環境によって切り分ける必要があります
そして正しく書き出せたかどうかを「Get( 最終エラー )」で確認して、エラーが検知されていたらローカル変数「$err_msg」にエラーメッセージを設定してスクリプト終了
Get( 最終エラー )
目的
直前に実行したスクリプトステップでエラーが発生した場合は、そのエラー番号を返します。
構文
Get ( 最終エラー )
忘年会がつづきお疲れモードなのと、ここから先は別スクリプトに処理も移るので、つづきはまた明日