10 返信 最新の回答 日時: Jun 11, 2015 11:47 PM ユーザー:parc_box

    Let関数に関する質問です。

    parc_box

      タイトル

      Let関数に関する質問です。

      フォーラムに投稿

      データベースの最終更新者のアカウント名から、フィールド「最終更新者」の名前を入力させたく思います。

      以前、教わった「ログを残す関数の組み方(URL貼り付けようと思ったら、見つからず…)」から簡単に出来るだろうと想像してたら「最終更新者」フィールドの部分には「0」と入ってしまいました。

      フィールドが「a」、「b」、「c」と「最終更新者」の4つのみと仮定して、次の様に組んでいます。

      Let([
      $tg = a & b & c
      ];
      Case (
      Get ( アカウント名 )  = "nan" ; 最終更新者 = "ほ" ;
      Get ( アカウント名 )  = "de" ; 最終更新者 = "にゃ" ;
      Get ( アカウント名 )  = "dame" ; 最終更新者 = "らら" ;
      ))

      Let関数そのものを理解できないまま組んだのがそもそもの間違いであるのは承知してるのですが、
      この場合、Let関数は"$tg"部分でローカル変数として、各フィールド[a][b][c]を見張らせてるんだろうな、という自分勝手な解釈で組んでます。

      ──結果、前に書いたように「最終更新者」フィールドには「0」が入力されるのみとなってます。

      Let部分を外すと、最終更新者フィールドは空欄のままですし、やはりどこかそれぞれのフィールドが更新された合図になるべきなんだろうなとLet関数を勘で使ってる所です。

      指定のフィールド[a][b][c]に対して入力値が変更された際「最終更新者」フィールドの値を再計算させるにはどうするのが良いでしょう。

      あと、現在「最終更新者」フィールドに入力されてしまう「0」というコードは、Get関数で「エラーが無い」という解釈で大丈夫でしょうか。

        • 1. Re: Let関数に関する質問です。
          sago350@未来Switch
          Case( Evaluate ( "Get( アカウント名 )" ;[ a ; b ; c ]) = "nan"  ; "ほ" ; Evaluate ( "Get( アカウント名 )" ;[ a ; b ; c ]) = "de"   ; "にゃ" ; Evaluate ( "Get( アカウント名 )" ;[ a ; b ; c ]) = "dame" ; "らら" ; Get( アカウント名 ) ) こんな感じで。
          • 2. Re: Let関数に関する質問です。
            parc_box

            ありがとうございます^^。

            見張ってる(?)フィールドを「最終修正日時」(修正タイムスタンプ)1個にしぼり、アドバイスに従って式を組み直した所、今度は動作できました。
            意味合いとしては──

            [最終修正日時]を更新したアカウント名が"a"だった場合には"ほ"を入力する。
            [最終修正日時]を更新したアカウント名が"b"だった場合には"にゃ"を入力する。
            [最終修正日時]を更新したアカウント名が"c"だった場合には"らら"を入力する。

            ──こんな解釈で大丈夫でしょうか。ほげ。

            • 3. Re: Let関数に関する質問です。
              sago350@未来Switch

              a,b,cのフィールドのみ変更された場合ということだったので、こういう計算式だったのですが・・・

              あるテーブルのどこかのフィールドだったら、こんな複雑な計算式を書かずに、フィールドの設定オプションを利用して、Case文で分岐させた方が簡単かと。

              • 4. Re: Let関数に関する質問です。
                parc_box

                まず、先ほどの解釈の所、訂正させて頂きます。

                [最終更新日時]を更新したアカウント名が"nan"だった場合には"ほ"を入力する。
                [最終更新日時]を更新したアカウント名が"de"だった場合には"にゃ"を入力する。
                [最終更新日時]を更新したアカウント名が"dame"だった場合には"らら"を入力する。

                ──こうでした。
                アカウント名に何を使ったか、混乱させて申し訳ないです。
                ※フィールド[最終修正日時]も[最終更新日時]に変更しました。

                さて、sago35さんの仰る複雑な計算式部分、Evaluate部分が指定したフィールドを見張ってて、計算式に応じた値を返してくるという解釈でいました。
                ※これで出来上がった計算式は、後日、使用するメンバーが増えた際、修正がラクで有難いなあと感じ入ってた次第です。

                ──で、RESにありました、Case文で再度作ってみたのですが

                Case(
                Get ( アカウント名 ) = "nan" ; "ほ" ;
                Get ( アカウント名 ) = "de" ; "にゃ" ;
                Get ( アカウント名 ) = "dame" ; "らら" ;

                これだと、何も値が返ってきません。
                何も合図になる部分が指定されてないのがいけないのかなあとか、再びそんな事を考え始めちゃってます。

                • 5. Re: Let関数に関する質問です。
                  parc_box

                  追記です。
                  a,b,c,の3つのフィールドのみとしましたが、実際には210個を超すフィールドだったものですから、どこかのフィールドで集約できないものかなと考え『そういえば「最終更新日時」というタイムスタンプフィールドがあったなと気が付き、そこだけを見張ればスマートかも?という発想で、a,b,c,の3つのフィールドではなく、「最終更新日時」というフィールド1個を見張らせてるつもりになってました。

                  • 6. Re: Let関数に関する質問です。
                    sago350@未来Switch

                    この添付ファイルの様な設定でよくないですかね。

                    FileMakerの標準の機能で最終修正アカウント名を記録することが出来るので、そのアカウント名を変更するCace文を書けばいいのかなと。

                    さらに、メンバーが増えた場合は計算式に書くのではなくて、アカウントとリレーションして別のテーブルで管理されているユーザ名を表示させれば管理のラクかと。

                    • 7. Re: Let関数に関する質問です。
                      parc_box

                      わわ!
                      ちょっと、そこは盲点でした。確認出来ました。
                      なるほどそうか、そこでやっちゃうと、ラクそうですね。
                      なんだか恥ずかしいです。

                      ──それにしても、別テーブル(これからデータベース作ろうとか思っちゃいました)で、メンバー管理をするというのは上手く動作すればラクそうですね。
                      なんだか難しそうと、敬遠してたけど、スケジュールは余裕がありますし、この辺も挑戦したいと思います。

                      • 8. Re: Let関数に関する質問です。
                        parc_box

                        その後、アカウント名ルックアップ用のDBを作成した所、とてもラクチンになりました。
                        ありがとう御座います。

                        ファイルメーカー社にサポートの電話を入れたついでに「アカウントを管理してるソリューションで、他のソリューションで使うアカウントを作成する事やアクセス権を設定させる事って、やっぱりスクリプトが用意されてないだけあって、出来ないって事でしょうか」と確認してみたら「出来ません」と即答でした。

                        人間、欲張るとどこまでも欲深くなりますねえ……と、お坊さんみたいな事を思ってしまいました。
                        工夫でなんとかなりそうな気もチラッと昼休み前に思ったのですが、忘れてしまいました。

                        • 9. Re: Let関数に関する質問です。
                          sago350@未来Switch

                          この本に複数のファイルに対するアカウント管理の方法が書いてありますよ。

                          http://www.key-planning.co.jp/book/filemaker-development-technique-r2/

                          • 10. Re: Let関数に関する質問です。
                            parc_box

                            なんと。本に紹介されてるとは……。
                            今度、チェックしてみます><。