top of page

FileMaker 複雑なLoop処理を全置換1ステップで置き換え!?


はじめに

 システム開発担当の「ほうがん」です。

 今回は分岐を含んだ複雑なLoop処理を1行の全置換ステップで代用する方法についてのご紹介です。

 FileMakerを使用していて複数レコードに対してある条件のレコードのフィールド内容を書き換えたい場合、スクリプトでLoop処理を組んで処理するのが一般的な手法だと思います。今回はこのLoop処理でスクリプト組む代わりに1ステップの全置換のみで複雑なレコードの書き換え処理を行ってみます。



1,特定条件のレコードのフィールド内容書換を行うスクリプト

 例として住所録(ダミーデータ)の「仮生年月日」フィールド(テキストタイプ)に「1985/2/26」と完全な日付形式と「0809」、「十月三十日」などの正確な日付と認識できないデータが混じっている場合に正しく日付として認識されるもののみ、「生年月日」(日付タイプ)に転記するという場合を考えてみます。

 ただし、既に「生年月日」が入力されている場合には、そのままにするという条件を加えた処理を考えます。 



「仮生年月日」(テキスト)→「生年月日」(日付)※日付が既に入っていたら置換しない


 通常、このような処理を行うには、以下のスクリプトのどちらかで処理を作成されると思います。


  1,検索を行って条件にあったもの(この場合、「仮生年月日」を日付に変換して「?}にならないレコード)でかつ生年月日」が空白のレコードのみ検索し「生年月日」フィールドにGetAsDate ( 仮生年月日 ) の全置換を行うスクリプトを作成する 

 

 2,LoopとIf構文を用いて条件を満たすレコード(この場合、日付に変換して「?」にならないレコードと「生年月日」が空白)の「生年月日」フィールドのみ書き換える 

 

 2、この条件でLoop処理のスクリプトを組んでみましょう。

 


 以上のようなスクリプトになります。

 結構複雑です。


 このLoop処理スクリプト群の代わりに全置換スクリプト1ステップを使用して同じ機能を実現してみます。

 


2,全置換1ステップで置き換えてみる

 これを全置換の1ステップで実現するには「生年月日」フィールドに、「フィールド内容の全置換」で以下の式を入力します。 

フィールド内容の全置換 ( 生年月日;
 Case(
   //書換条件に合致しているので書換
   GetAsDate ( 仮生年月日 ) ≠ "?" and isEmpty ( 仮生年月日 ) ; GetAsDate ( 仮生年月日 ) ;
   //書換条件に合致してないのでそのまま
   生年月日
 )

 これで条件判断されながら、Loop処理とIfでの条件分岐のスクリプトの代わりの処理が実現します。 

 条件に合致しない場合、そのまま「生年月日」が書き込まれますので、書き換えなしと同じです。

 「条件を満たさない場合には元のフィールド値をセットする」、この部分が処理の融通を利かせられる肝になります。 

 これは、スクリプトからではなく、メニューからの「全置換」を行う場合にも有効です。さらに工夫を加えることで、色々と処理のバリエーションが増やせますのでお試しください。


bottom of page