ぺーぺーぷーぷーな日々

Claris FileMaker と戯れる日々です。

While関数を使って対象レコードの特定のフィールドの値を改行区切りで取得する

以下、 以前に書いた記事の補足になります。


kei0114.hatenablog.com

 


目次


 

GetFieldValues関数について

 

上記の記事の中で、GetFieldValues関数 というカスタム関数を拝借しておりました。

大変お世話になったカスタム関数なのですが、再帰回数5万回という制限があるとのご指摘も頂いておりました。 

iphlox.hatenadiary.org

 

また現在では、 上記カスタム関数が掲載されていたサイトが無くなっていて、残念ながらオリジナルの情報にたどりつくことができないようです。

 

 

While関数

 

解決策としては、FileMaker 18 以降から使えるようになった While関数 と SetRecursion関数 を組み合わせて代替する計算式を書いてしまうのが良さそうです。While関数単体だと5万回の再帰回数制限があるそうなのですが、それを SetRecursion関数 で解除できるのだとか。

 

とりあえず今回は、再帰回数制限のことは脇に置いておきます。<おい!

まずは GetFieldValues関数で実現していたことを While関数で作り直してみます。

下図は以前の記事でも掲載していた画像です。この画像中のスクリプトで GetFieldValues関数で記述していたことを While関数で作り直します。

 

f:id:Kei0114:20210424221849p:plain

 

While関数で書き直した内容が、以下です。

取り出したいフィールドは、[患者_idorrk::__fk_患者番号]というフィールドです。

 

Let ([
 
#field = 患者_idorrk::__fk_患者番号    //ターゲットにするフィールド
 
];
 
GetNthRecord ( #field ; 1 ) &  //最初のレコードだけ先に取り出しておく
 
While (
 
//条件を揃える
[
#max = Get ( 対象レコード数 );
#i = 1;
#result = ""
] ;
 
#i < #max ;  //終了条件
 
//繰り返し部分
[
#i = #i + 1;
#result = #result & ¶ & GetNthRecord ( #field ; #i )
];
 
#result
 
)//while
)//let

 

 

別のフィールドを書き出したい場合は、
[#field = 患者_idorrk::__fk_患者番号    //ターゲットにするフィールド]
という部分を書き換えれば、そのまま転用できると思います。
 

本当は、JSONでも使ってよりスマートに仕上げるべきところなのですが、とりあえず今回は、以前からのスクリプトを踏襲する形で修正いたしました。JSONは、もう少し勉強いたします(笑)。

 

参考

以下、While関数の解説など、参考にさせていただいた記事です。

ありがとうございます。

 

ywc.com

www.mirai-switch.com

usagi-mimi.com

qiita.com

help.claris.com