ココに注意
ラジオボタンを変更する前の値を得るだけですが注意が必要
フォーム表示とリスト表示では挙動が変わります!(初心者なのでハマった!)
やりたい事はシンプル
FileMakerPro19初心者から脱する事がなかなかできません。
シンプルな処理だとは思いますが、やっているうちに迷路に迷い込んでしまいました。
やりたい事
ラジオボタンを選択した時に、前の値を記憶しておいて制限を掛けたい!
例えば、上のようなフォームから、
メモ
- 「リンゴ>>ミカン>>バナナ」の方向に進むのはOK
- 「リンゴ>>バナナ」の方向はNG
- 「ミカン>>リンゴ」の方向はNG
- 最初に、「ミカン、バナナ」は選択できない。
- 最後の、「バナナ」に進んだら終了とし動けない。
という感じの機能を実装したいと考えています。
その為に、事前に前の値がないと判別できないのです。
ラジオボタン選択前の値
ラジオボタン選択前の値を得る方法は簡単ですが、自分の場合はものすごい時間がかかりました。
まずは、ラジオボタンにスクリプトトリガにて、「OnObjectEnter」にて、変更前のラジオボタンの値をグローバル変数に代入します。※これではダメ
ココに注意
レイアウトのスクリプトトリガ「OnRecordLoad」に前値を得る設定をする!
「OnObjectEnter」でもなんかうまく動いてしまう時があったので良しとしましたが、「OnRecordLoad」でないと、レコードが変わった時に、前レコードの値を引っ張ってきてしまうので挙動がおかしいという事になりました。
ココがポイント
グローバル変数でないとうまく行きません!
次に「OnObjectModify」にて、変更前のグローバル変数を呼び出せればOKになります。
とりあえず、カスタムダイアログにて、グローバル変数に何が入っているのかを表示できるようにしました。
そして、カスタムダイアログの表示を消すと、グローバル変数に変更後の値を代入して書き換えます。
上記のようなスクリプトとスクリプトトリガを使えば、ラジオボタンの変更前の値を得ることができました。
【注意】リスト表示だと挙動が変わる
まだまだ初心者の自分にとっては、フォーム表示とリスト表示で挙動が変わることまで理解していませんでした。
ココに注意
前のレコードのグローバル変数を拾ってきています!
ID2を「ミカン」に変更した後、ID3の「バナナ>>ミカン」に変更すると、ID2で行った作業のグローバル変数を拾ってきてしまい、「ミカン」と表示されました。
つまり、
ココに注意
フォーム(1レコード限定)だけしか使えない機能
ということになります。
自分が実際に使おうとしている仕組みではフォームだけで使用する予定なので、レイアウトをフォーム専用にしてリスト表示にさせないようにしようと考えています。
ラジオボタンに制限を付ける
ラジオボタンの更新前の値を得ることができたので、その値と現在値を比較して制限を掛ける事にしました。
上の図のようなスクリプトを組んで自分が制限したい規則を設定することができました。
本当は、フィールドの値を書き換える前に、判別して「書き換える?書き換えない?」の選択ができればスマートなのですが、現時点の自分のスキルでは方法が見つかりませんでした。
そういう方法があるなら教えて頂けると助かります。
FileMakerTips(おまけ)
カスタムダイアログにて、改行をする方法で時間を取られました。
色々とネット検索してもなかなかでてきません(泣)
ココがおすすめ
そこで、ChatGPTにきいてみました!
最初は、「改行文字は、Windows環境では「\r\n」、Mac環境では「\r」または「\n」のいずれかを使用できます。」なんていう回答をしていましたが、自分の場合はやっても改行できなかったので、「他に方法はないのか?」と聞いたら上のような、2つの方法を教えてくれました。この2つの方法とも改行ができるようになりました。
AIも使いようによっては便利ですね。