FileMaker アドオン 「カレンダー」を修正する

Claris FileMaker のアドオンは、自分自身のカスタム App に簡単に高機能を実装できる仕組みだと思っております。

デフォルトでは JavaScript タイプのアドオンが 9 個、テーブルタイプのアドオンが 11 個が登録されている。それ以外にも日本・海外の Claris MarketPlace に様々なアドオンが登録されています。これからも Claris Partner 様が色々な機能を持ったアドオンを追加していただけると、現場の FileMaker 開発者は嬉しく感じると思っております。

今回はそのうちカレンダーのアドオンのスクリプトを少しだけ修正していこうと思います。


事の発端は

とあるツイートがきっかけです。

確かに長期の期間設定がされているレコードなど、カレンダーに表示されないケースがありました。
JavaScript タイプのアドオンは FileMaker Data API スクリプトステップを利用してレコードのデータを取得していいて、この FileMaker Data API スクリプトステップの箇所で、リクエストが長期の期間設定がされているレコードなどが表示されない書き方がされているためだとわかりました。

FileMaker Data API スクリプトステップに渡すための $data を指定している箇所。
スクリプトデバッガで確認した $data の中身

上の画像のように、2023年4月のデータを表示するのに、次のようなデータをクエリとしてスクリプトに渡しているのがわかります。

2023+03+24 <= 開始日 かつ 終了日 < 2023+05+09

これだと開始日が2023年03月24日 より前だったり、終了日が2023年05月09日より後だったりする場合、レコードがヒットしないということになります。

これを次のように修正すれば良いはずです。

2023+03+24 <= 終了日 かつ 開始日 < 2023+05+09

実装してみる

FCCalendarFind スクリプト内に [ 変数を設定 ] スクリプトステップを新たに追加して、 $data を修正します。

Let ( [
		keys = JSONListKeys ( $data ; "query[0]" ) ;
		key1 = GetValue ( keys ; 1 ) ;
		key2 = GetValue ( keys ; 2 )
	] ;
	JSONSetElement (
		$data ; [
			"query[0]." & key1 ;
			JSONGetElement ( $data ; "query[0]." & key2 ) ;
			JSONString
		] ; [
			"query[0]." & key2 ;
			JSONGetElement ( $data ; "query[0]." & key1 ) ;
			JSONString
		]
	)
)

こうすることによって、長期のスケジュールも表示されるようになります。
お試しあれ。


2023年05月12日修正

「開始日や終了日のフィールド名を変更していると動かないよ」と taka さんより連絡を受けて、最後の実装の箇所を修正いたしました。taka さんありがとうございます!

この記事が気に入ったらサポートをしてみませんか?