6 返信 最新の回答 日時: Jun 19, 2017 12:43 AM ユーザー:mddld

    スクリプトでの入力値判定

    mddld

      お世話になっております。

       

      以前投稿した内容↓の続きになるのですが、

      https://community.filemaker.com/thread/175028

       

      csvファイルの内容を各フィールドに格納する際に、不正な文字列、数値が格納された場合にエラーにし、

      不正な値は格納不可にする仕様です。

       

      フィールドの入力値の制限で、最大文字数や下限値・上限値を指定し、

      スクリプトでエラーとなる値を格納し、エラーコードが返ってくるところまではできました。

       

      しかし、以前の投稿のとおり、フィールドに計算値自動入力としてGetValue($csv ; [行カウント])を設定し、

      各フィールドでエラーを発生させる値を格納し、最後のフィールドで正常な値が格納されると、最終エラーのコードは0で返ってきます。

       

      各フィールドに値が格納された時点で最終エラーを取得すれば、エラーを取得することができるのは動作させてわかったのですが、

      やはり1フィールドずつエラーチェックしなければならないのでしょうか。

       

      イメージとしては、他のプログラムで言うtry~catchの考え方です。

      FileMakerではこのような考え方は難しいでしょうか。ご教示のほどよろしくお願い致します。

       

      環境:FMPA16、FMG16、win7

        • 1. Re: スクリプトでの入力値判定
          user14047

          ...なにかの処理...

          レコード/検索条件確定 [ ダイアログあり: オン ]

          変数を設定 [ $error ; 値: Get ( 最終エラー ) ]

          If [ $error ]

            レコード/検索条件復帰 [ ダイアログあり: オフ ]

          End If

           

          みたく、確定時のエラーで処理を入れてみてはいかがでしょうか。

          • 2. Re: スクリプトでの入力値判定
            mddld

            user14047様

             

            いつもお世話になっております。

             

            状況変わらずといいますか、やり方に問題があるかもしれません。

             

            例をあげますと、

            フィールド

             A テキスト、最大文字数:5

             B 数字、下限値:0、条件値:999

             C テキスト、最大文字数:3

            を持つテーブルがあります。

             

            このテーブルに、csvファイルで取得した1行のデータを格納します。

            各フィールドには、計算値自動入力で、GetValue ( $coldata ; 1 ) ※Bは2、Cは3 を設定しています。

             

            スクリプトは以下のとおりです(csvの1行分を格納します)

             変数を設定: $data ; "ABCDEF, 1000, 123"

             変数を設定: $coldata ; Substitute(Substitute(GetValue($coldata; 1); ","; ¶); "\""; "")

             新規レコード/検索条件

             カスタムダイアログを表示[Get(最終エラー)]

             

            フィールドA、Bにエラーとなる値、Cに正常な値を格納すると、最終エラーは0となります。

             

            user14047様のスクリプトをどこかのタイミングで試したいと思うのですが、

            そもそもこのやり方では難しいでしょうか。

            • 3. Re: スクリプトでの入力値判定
              user14047

              フィールド A, フィールドB には値を設定するけど、フィールドC には値を設定しない。

              というのであれば、[このフィールドの入力値を制限する:] を [常時] にするのが一番スクリプトでの処理は簡単になりそうです。

              FileMaker Pro 16 ヘルプ : 入力値の制限の設定

              DefiningFieldValidation.png

              • 4. Re: スクリプトでの入力値判定
                mddld

                user14047様

                 

                回答ありがとうございます。

                 

                すでに各フィールドは常時に設定しておりました。

                やはりCのフィールドにも値は入ってきますので、値を設定しないのは難しく。。

                 

                ちなみに、少し視点を変えて考えてみたのですが、

                例えば、CSVの1行のデータを格納した後に判定する、

                または、計算値自動入力の計算式でエラーをキャッチするといったことは可能でしょうか。

                 

                考えてはみたものの、具体的な方法が思いつかずこちらにすがる思いです;

                • 5. Re: スクリプトでの入力値判定
                  user14047

                  スクリプトの全体が掴めないので、どこでつまずいているのかよく分かりません。

                  自分だったら、こんな感じに処理しちゃいます。

                  1 人中 1 人が役に立つと言っています
                  • 6. Re: スクリプトでの入力値判定
                    mddld

                    user14047様

                     

                    添付ファイルを確認致しました。

                     

                    情報少なくてすみません;;

                    ですが、まさにやりたいのはこれです!

                     

                    今のスクリプトは、アップロードしていただいたスクリプトの45行目(GetValue)を、各フィールドの入力値の自動化の計算式に設定していました。

                    スクリプトで新規レコード/検索条件を実行した時点で、自動計算によりフィールドの値が格納されるように作成していた次第です。

                     

                    実は、今の方法では、GetValue($colData ; $ii)の$iiの部分を固定値で書いており、将来的に列がズレた場合に不安が残っていました。

                    幸い、テーブルのフィールド名はすべてCSVファイルのタイトルと合わせて作成していましたので、user14047様の方法で解決しそうです!

                    実際に組み込んでテストしてみます。

                     

                    スクリプトの組み方、とても参考になります。

                    ありがとうございます!