2014年8月20日水曜日

FileMaker WEBビューア経由でJSONデータにアクセス!(2)

例えば、こんなJSONデータがあって、

「"2014-08-17T01:10:00+09:00"」このデータを

フィールド設定 [JSON::Result; $start.dateTime]
こんな感じで取得できたらイイですよね!
それができるんです!
しかも! プラグインなし! FileMakerの標準機能だけで!
※標準機能だけ と言いつつ、WEBビューア+JavaScriptは、使用します。


追記:2014/08/20
修正!
・OS X , iOS でJSONのキーが日本語の場合に対応。
・値がTEXTでない場合、[object Object] を出力しないように変更。
・JSONのキーに対する変数名を取得するように変更。
・Winは、クリップボード経由を追加。
FileMaker WEBビューア経由でJSONデータにアクセス!(3) : http://qbxxdp.blogspot.jp/2014/08/filemaker-webjson3.html



検証:
FileMaker Pro 13
FileMaker Go 13
Mac OS X 10.9
Windows 7|Windows 8

○|Mac OS X 10.9
○|FileMaker Go 13
△|Windows 7|Windows 8

「OS X」と「iOS:FileMaker Go 13」は、イイ感じです。
Winは、不安定です。

レイアウトに「WEB1」と言う名前でWEBビューアを設置。


スクリプト:JsonAnalyzer
Web ビューアの設定 [オブジェクト名: "WEB1"; 処理: リセット]
スクリプト一時停止/続行 [間隔(秒): 0]
変数を設定 [$JSON; 値:Substitute ( JSON::JSON ; ["¶" ; ""] ; [Char ( 10 ) ; ""]  ; [Char ( 13 ) ; ""]  )]
変数を設定 [$OS; 値:Get ( システムプラットフォーム )]
変数を設定 [$HTML; 値:" ....."]
Web ビューアの設定 [オブジェクト名: "WEB1"; URL: "data:text/html;charset=utf-8," & $HTML]

「$HTML」の中身


JavaScriptでJSONのキーをFileMakerの変数名にして
location.href = fmp://$/..... で渡すデータを作成します。
&$start.dateTime=2014-08-17T01:10:00+09:00&$start.timeZone=Asia/Tokyo.....
入れ子になっている場合は、ドット「.」でつなぎます。


(location.href = 'fmp://$/JSON?script=fmpJsonAnalyzer'+FMDATA; で受ける側。)
スクリプト:fmpJsonAnalyzer

フィールド設定 [JSON::Result;
$kind
& & $etag
& & $id
& & $status
& & $htmlLink
& & $created
& & $updated
& & $summary
& & $description
& & $location
& & $creator
& & $creator.email
& & $creator.displayName
& & $creator.self
& & $organizer
& & $organizer.email
& & $organizer.displayName
& & $organizer.self
& & $start
& & $start.dateTime
& & $start.timeZone
& & $end
& & $end.dateTime
& & $end.timeZone
& & $iCalUID
& & $sequence
& & $reminders
& & $reminders.useDefault
]
フィールドへ移動 []
スクリプト一時停止/続行 [制限時間なし] ※テストでGoogleカレンダーのEventを取得。テストなのでひとつのフィールドへ設定。


OS Xの場合、綺麗に取得できました!※テスト時は、「"kind: "& $kind」としていたので「Result」の値が異なります。
iOS FileMaker Go 13 でもバッチリです!



Windowsは、少し残念。
"htmlLink"の値が取得出来ていません。値に「=」があるのが問題のようです。
「%3D」に置換してみたりしましたが、無理。解決策は、また今度。



Windowsの場合は、まだまだ残念な事があります。
JSONのデータが多いと動作しません。

テスト
Googleカレンダーの「日本の祝日」データを取得してみました。


(location.href = 'fmp://$/JSON?script=fmpJsonAnalyzer'+FMDATA; で受ける側。)
スクリプト:fmpJsonAnalyzer

変数を設定で「$feed.entry.1.title.$t」こんな名前($が先頭以外にある)を設定するとエラーになりますが、取得時は、エラーになりません。

フィールド設定 [JSON::Result;
$feed.entry.1.title.$t
 & ¶ & $feed.entry.2.title.$t
 & ¶ & $feed.entry.3.title.$t
 & ¶ & $feed.entry.4.title.$t
 & ¶ & $feed.entry.5.title.$t
 & ¶ & $feed.entry.6.title.$t
 & ¶ & $feed.entry.7.title.$t
 & ¶ & $feed.entry.8.title.$t
 & ¶ & $feed.entry.9.title.$t
 & ¶ & $feed.entry.10.title.$t
 & ¶ & $feed.entry.11.title.$t
 & ¶ & $feed.entry.12.title.$t
 & ¶ & $feed.entry.13.title.$t
 & ¶ & $feed.entry.14.title.$t
 & ¶ & $feed.entry.15.title.$t
 & ¶ & $feed.entry.16.title.$t
 & ¶ & $feed.entry.17.title.$t
 & ¶ & $feed.entry.18.title.$t
 & ¶ & $feed.entry.19.title.$t
]
フィールドへ移動 []
スクリプト一時停止/続行 [制限時間なし] ※テストでGoogleカレンダーのEventを取得。テストなのでひとつのフィールドへ設定。

JSONデータ



OS Xの場合、取得OK!
iOS FileMaker Go 13 OK!



Windowsは、残念動きません。
色々試してみましたが、現在は、無理。
Windows の場合は、プラグイン:ScriptMakerPS を使うとカンタンです。

0 件のコメント:

コメントを投稿