FileMaker WebDirect でレコードをエクセル形式でエクスポートしたい。
Claris FileMaker WebDirect は、Chrome や Edge などの Web ブラウザで FileMaker のレコードを閲覧編集等ができる FileMaker Server ( or Cloud ) の便利な機能の一つです。
いくつかの機能制限があり、レコードのエクスポートで Microsoft Excel 形式でエクスポートすることができない。
今回はこの制限を掻い潜って、WebDirect でも Excel 形式でエクスポートする方法を備忘録として記録してみる。
サーバー上で Excel 形式でエクスポートして、とあるオブジェクトフィールドに格納しておく。
WebDirect でできないのであれば、サーバー上で Excel を出力すれば良い、というお話。
サーバー上で Excel を出力した後は、別のオブジェクトフィールドに格納しておいて、ローカルでそのフィールド内容のエクスポートをしてあげれば良い。という理屈です。
# サーバー上でエクセル in file WebDirectでエクスポート (hostName)
ウインドウの固定
ユーザによる強制終了を許可 [ オフ ]
#
レイアウト切り替え [ 「WebDirectでエクスポート」 (WebDirectでエクスポート) ; アニメーション: なし ]
変数を設定 [ $session ; 値: Get ( UUID ) ]
If [ Get ( システムプラットフォーム ) <> 4 ]
変数を設定 [ $path ; 値: Get ( テンポラリパス ) & $session & ".xlsx" ]
レコードのエクスポート [ ダイアログあり: オフ ; フォルダを作成: オフ ; 「$path」 ; 自動的に開く ; Unicode (UTF-16) ]
Else
サーバー上のスクリプト実行 [ 指定: 一覧から ; 「サーバー上でエクセル_sub」 ; 引数: $session ; 終了するまで待つ: オン ]
変数を設定 [ $path ; 値: Get ( テンポラリパス ) & $session & ".xlsx" ]
検索モードに切り替え [ 一時停止: オフ ]
レイアウト切り替え [ 「temp」 (temp) ; アニメーション: なし ]
フィールド設定 [ temp::session ; $session ]
検索実行 []
フィールド内容のエクスポート [ temp::ファイル ; 「$path」 ; 自動的に開く ; フォルダを作成: オン ]
レイアウト切り替え [ 元のレイアウト ; アニメーション: なし ]
End If
# サーバー上でエクセル_sub in file WebDirectでエクスポート (hostName)
変数を設定 [ $session ; 値: Get ( スクリプト引数 ) ]
#
レイアウト切り替え [ 「WebDirectでエクスポート」 (WebDirectでエクスポート) ; アニメーション: なし ]
変数を設定 [ $path ; 値: Get ( テンポラリパス ) & $session & ".xlsx" ]
レコードのエクスポート [ ダイアログあり: オフ ; フォルダを作成: オフ ; 「$path」 ; Unicode (UTF-16) ]
変数を設定 [ $path ; 値: ConvertFromFileMakerPath ( $path ; URLPath ) ]
レイアウト切り替え [ 「temp」 (temp) ; アニメーション: なし ]
新規レコード/検索条件
フィールド設定 [ temp::session ; $session ]
URL から挿入 [ 選択 ; ダイアログあり: オフ ; ターゲット: temp::ファイル ; $path ]
レコード/検索条件確定 [ ダイアログあり: オフ ]
現在のスクリプト終了 [ テキスト結果: True ]
上記のスクリプトを実行すると、WebDirect でも Excel 形式のファイルをエクスポートすることができる。
このまま運用すると、レコードが溜まっていってしまうので、どこかのタイミングでレコード削除するのが望ましいですが、フィールド内容のエクスポート直後にレコードを削除すると壊れた状態のファイルがエクスポートされてくるので注意が必要かと思いました。( WebDirect の場合 )
WebDirect でボタンを押すと・・・
ファイルのダウンロードダイアログが表示され、Excel をダウンロードすることができる。
ファイルのダウンロードダイアログも出したくない場合
フィールド内容のエクスポートスクリプトステップを利用した場合、ファイルのダウンロードダイアログがでてしまう。
このダイアログを出したくない場合は、フィールド内容のエクスポートスクリプトステップを利用せずに FileMaker Data API を実行スクリプトステップを使うと良い。
FileMaker Data API を実行スクリプトステップ を使うと、オブジェクトフィールドへのリンクを取得することができる。そのリンクを URL を開くスクリプトステップで開いてあげる、と言う流れです。
( ただしタブが切り替わってしまうのが玉に瑕。。。そう考えると、ダウンロードダイアログが出た方がまし、と言う考え方になる。 )
# Data API
変数を設定 [ $result ]
FileMaker Data API を実行 [ 選択 ; ターゲット: $result ; JSONSetElement ("" ; [ "layouts" ; Get ( レイアウト名 ) ; JSONString ] ; [ "limit" ; 1 ; JSONNumber ] ) ]
変数を設定 [ $path ; 値: JSONGetElement ( $result ; "response.data[0].fieldData.ファイル" ) ]
URL を開く [ ダイアログあり: オフ ; $path ]
ファイルのダウンロードダイアログも出したくないし、タブも移動したくない場合
ダウンロードのダイアログも出したくないし、タブも移動したくない。この問題を解決するためにもう少し考えてみる。
URL を開くダイアログを利用すると、新規タブができてタブが移動してしまう。そこで、Web ビューアを使ってやってみる。
# Data API 2
変数を設定 [ $result ]
FileMaker Data API を実行 [ 選択 ; ターゲット: $result ; JSONSetElement ("" ; [ "layouts" ; Get ( レイアウト名 ) ; JSONString ] ; [ "limit" ; 1 ; JSONNumber ] ) ]
変数を設定 [ $path ; 値: JSONGetElement ( $result ; "response.data[0].fieldData.ファイル" ) ]
Web ビューアの設定 [ オブジェクト名: "web" ; URL: $path ]
スクリプト一時停止/続行 [ 間隔(秒): .1 ]
Web ビューアを設定した後、少しスクリプトを停止等をしておかないと、ダウンロードされないので注意。
WebDirect 対策はいろいろ大変だった。この備忘録が誰かの役に立つことを願っております。
サンプルファイル
サンプルファイルを添付いたします。FileMaker Server ( or Cloud ) にアップロードして、WebDirect でアクセスしてみてください。