はじめに
システム開発担当の「ほうがん」です。
今回は分岐を含んだ複雑な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での条件分岐のスクリプトの代わりの処理が実現します。
条件に合致しない場合、そのまま「生年月日」が書き込まれますので、書き換えなしと同じです。
「条件を満たさない場合には元のフィールド値をセットする」、この部分が処理の融通を利かせられる肝になります。
これは、スクリプトからではなく、メニューからの「全置換」を行う場合にも有効です。さらに工夫を加えることで、色々と処理のバリエーションが増やせますのでお試しください。