2019年8月4日日曜日

FileMaker 配列変数から取り込む

前回の
API_OpenWeatherMapをFileMakerに取り込む際、

1、改行テキストに変換
2、配列をグローバル変数に格納
3、GetValue関数を使ってLOOP処理でFMのデータ化させる

という流れでした。

OpenWeatherMapは項目とデータをグローバルフィールドで照合していて分かりずらかったと思いますので、今回はよくあるid、品名、分類のテキストにしました。






前回のものをデバッガで確認していただけたらOKなのですが、あえて順序だてたサンプルを用意しました。

1~4まで青枠のボタンがありますので、サンプルで確認してみてください。


FileMakerの場合、
配列変数からの取り込みは「変数設定の繰返し(繰返し変数)」を使用するのではなく、
グローバル変数を使った改行テキストからGetValue関数を使って抜き出すというのが一般的であると考えています。

------省略------
Loop
新規レコード/検索条件
フィールド設定 [id;GetValue ( ※1.整理する配列変数 ; 1 )] 
フィールド設定 [品名;GetValue ( ※1.整理する配列変数 ; 2 )]
フィールド設定 [分類;GetValue ( ※1.整理する配列変数 ; 3 )]
変数設定[$cnt;値:$cnt+1]
Exit Loop If [$cnt>$$cnt_mx]
End Loop
------省略------
※1.整理するというのは
Substitute ( GetValue ( $$source ; $cnt ); [ " " ; "¶" ] ; [ " " ; "¶" ] 
の事です。

変数設定の繰返し(繰返し変数)を使用した場合、どのように取り込むのかは、なんとも想像できません。(繰返し変数からインポートとか出来るようになったら・・・・かな。
僕が古いのかな・・・)




ダウンロード(FileMaker17Win)



追記
配列変数と書いてますが、FMの場合、他の言語とはまったく違います。
ここでは単純にテキスト改行にして一括取り出しをしているだけで、行や列という概念が無いですしインデックスを持たせられません。行、列の部分的な宣言、代入はできません。
( Dim C(3,4) ⇒ Dim B(3,4)の誤り )

このような宣言として配列変数を使用することが出来ないという事です。
残念ながらExecuteSQLにもありませんし(データを生成させてグローバル変数を利用して並べる事は出来ます)、
無償のSQLでいえば
MySQLにも配列変数が無いので、PostgreSQLか、高価なOracleとODBC連動という事も考えられますが、そこまでして・・・というめんどくささがあります。

行と列の変数での宣言、もしくは指定というより、抜き出す前の段階でデータを絞り込む事を考えた方が賢明かもしれません。


最適化してますか?

 まるで入院していた患者が退院して元気に復活するような機能。 クラウドを使用するユーザーさんがほとんどなのですが、このゴールデンウィーク中は 最適化のメンテしときます。 データがピチピチしちゃいますよぅ。