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 でアクセスしてみてください。


いいなと思ったら応援しよう!