10 返信 最新の回答 日時: Dec 3, 2015 4:57 PM ユーザー:nkk47

    ボタン詮索によるレコードの表示2

    nkk47

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

       

      処方された薬品の記録をつけようと、ファイルを作成しております。

       

      テーブルは

      ・記録

      ・医療機関(医療機関のデータ)

      ・薬局  (薬局のデータ)

      ・くすり (くすりのデータ)

      ・一覧_医療機関(医療機関の項目をポータル表示)

      ・一覧_薬局  (薬局の項目をポータル表示)

      ・一覧_くすり (くすりの項目をポータル表示)

       

      記録テーブルのフィールドとして、下記のものを用意。

      ・薬局名

      ・処方医療機関

      ・処方薬_01

         ・

         ・

         ・

      ・処方薬_10

       

      上記のような構成で、

      ・記録テーブルの「医旅機関」への入力

       ・記録テーブルレイアウト上の「選択ボタン」で「一覧_医療機関」へレイアウト切替。

       ・ポータル表示されている項目(医療機関名)から該当するものを選択。

       ・選択された「医療機関名」をスクリプトによって「記録;;医療機関」に入力

       

      ・記録テーブルの「薬局」への入力

       ・上記(医療機関)と同じ流れ

       

      ここまではこちらでご教示頂き出来ました。

       

      ・記録テーブルの「くすり」への入力

      今回、これをどうしたらよいかのご相談なんですが、「医療機関」「薬局」と同じような流れで、記録テーブルレイアウトの「処方薬_01~10」に入力できるようにしたいのですが、「医療機関」や「薬局」のように

       

      ・変数を設定[$くすり名; 値;くすり;;名]

      ・レイアウト切替[「記録」(記録)]

      ・フィールド設定[記録;;処方薬_01; $くすり名]

       

      というスクリプトで対応しようとすると、当然のことながら10個(処方薬の数)のスクリプトが必要になってしまいます。

      先日こちらでご教示頂きました「Get (スクリプト引数)」で対応できないかと考えましたが、どうにも方法が思い浮かびません。

       

      取り敢えず、ファイルを下記にアップ致しました。

       

      http://firestorage.jp/download/6f545efd325f89d353e7121049f5a8ac1839c5e5

       

      ご教示の程宜しくお願い致します。

       

      作業環境

      Windos Vista HP SP2

      FileMaker PRO 11 0v3

        • 1. Re: ボタン詮索によるレコードの表示2
          user14047

          スクリプトに渡す引数は

           

          GetFieldName ( 記録::処方薬_01 ) & ¶ &
          1
          

           

          という感じでフィールド名と番号を改行区切りで与えておきます。

          受け取った後処理する際には、

           

          GetField ( GetValue ( Get ( スクリプト引数 ) ; 1 ) )
          

           

          で引数で指定した値が取れますので、この値を変数なりに設定すればいいかと思います。

          番号は GetValue ( Get ( スクリプト引数 ) ; 2 ) で取れますので、「記録::処方薬_01」...「記録::処方薬_10」というような命名規則でしたら、

           

          フィールドを名前で設定 [ "記録::処方薬_" & Right ( "0" & GetValue ( Get ( スクリプト引数 ) ; 2 )  ; 2 ) ; GetField ( GetValue ( Get ( スクリプト引数 ) ; 1 ) ) ]
          

           

          のように、[フィールドを名前で設定] スクリプトステップを使えばいいでしょう。

          • 2. Re: ボタン詮索によるレコードの表示2
            nkk47

            user14047 さん

             

            早々にありがとうございます。

            初めてのスクリプト関数ですので、実際に手を動かしていますが、3歩進んで長考30分って感じです。

            というわけで、結果はまだご報告できませんが、取り急ぎお礼まで。

             

            頑張ります。

            • 3. Re: ボタン詮索によるレコードの表示2
              nkk47

              user14047 さん

               

              悪戦苦闘中です。m( _ _ )m

               

              > GetFieldName ( 記録::処方薬_01 ) & ¶ &

               

              GetFieldName は、指定したフィールドのフィールド名を返す。 ということですので、

               

              GetFieldName

              ( 記録::処方薬_01 ) & ¶ &

              ( 記録::処方薬_02 ) & ¶ &

                    ・

                    ・

                    ・

              ( 記録::処方薬_10 )

               

              と、スクリプト設定の「オプションのスクリプトパラメータ」に記述すれば良いわけでしょうか。

              これ(記録::処方薬_01~記録::処方薬_10)が Get ( スクリプト引数 ) で参照されるスクリプト引数になるわけですね。

               

              > GetField ( GetValue ( Get ( スクリプト引数 ) ; 1 ) )

               

              GetField(フィールド名) は、レコード内にある計算式で指定したフィールドの内容を返す。

              GetValue(値一覧;値番号)は、値一覧から指定した番号の値を返す。

              ということですので、

              GetFieldName で設定した「スクリプト引数」の1番目の値(ここでは(記録;;処方薬_01)を返すという意味になるのですね。

               

              > 番号は

              >

              > GetValue ( Get ( スクリプト引数 ) ; 2 ) で取れますので、

               

              GetValue ( Get ( スクリプト引数 ) ; 2 )であれば「記録;;処方薬_02」

              GetValue ( Get ( スクリプト引数 ) ; 3 )であれば「記録;;処方薬_03」

               

              ということですね。

               

              「フィールドを名前で設定」は、現在のレコードの指定されたフィールドの内容全体を、計算結果で置き換える。

              ※「ターゲットフィールドの指定」では、フィールドは "" で囲んで指定する。

              ということですので、

               

              ・ターゲットフィールド

               "記録::処方薬_" & Right ( "0" & GetValue ( Get ( スクリプト引数 ) ; 2 ) ; 2 )

               は、

               GetValue ( Get ( スクリプト引数 ) ; 2 ) で取得した「記録;;処方薬_02」というフィールド名 に

               "0" と、右から 2 つのテキストを "記録;;処方薬_ " に付ける。という意味になってしまうのでしょうか?

               これだと、「記録;;処方薬_002」になってしまうような気がしますのですが・・・?

                

               また、最後のの「; 2」の意味も分かりません。

                

              ・計算式の設定

                GetField ( GetValue ( Get ( スクリプト引数 ) ; 1 ) )

               

               というのは、ターゲットフィールドに対して置き換える値となるのでしょうか。

               これは前述のとおり、GetFieldName で設定した「スクリプト引数」の1番目の値を返すという意味になるのですね。

               

              あれっ、「記録;;処方薬_002」を「記録;;処方薬_01」という値に置き換える?

               

              すみません、頭が混乱してきました。

              風呂にでも入って、気分を変えて再度取り組んでみます。

              取り敢えず経過報告まで。

              • 4. Re: ボタン詮索によるレコードの表示2
                user14047

                すいません。もしかしたら勘違いしていたかもしれません。[記録] レイアウトの処方薬フィールドの隣に置くボタンのことかと思っていましたが違っていましたか?

                どのテーブルのどの値をどのテーブルのどのフィールドに入れたいのかよくわかりません。

                記録テーブルの「くすり」への入力

                これはどの値をここ(記録::処方薬_n)へ設定?

                 

                 

                混乱させてしまいましたが念のため...

                > 番号は
                > GetValue ( Get ( スクリプト引数 ) ; 2 ) で取れますので、

                GetValue ( Get ( スクリプト引数 ) ; 2 )であれば「記録;;処方薬_02」
                GetValue ( Get ( スクリプト引数 ) ; 3 )であれば「記録;;処方薬_03」
                ということですね。

                GetFieldName ( 記録::処方薬_01 ) & ¶ &1 を引数にして、GetValue ( Get ( スクリプト引数 ) ; 2 )  で取りたかったのは何番目のフィールドを指定したいかの番号だけだったので、結果は 1 だけが欲しかっただけです。

                スクリプト引数は複数指定できないので、改行で区切って複数の値を渡す例を示したかったわけです。

                ですから

                Right ( "0" & GetValue ( Get ( スクリプト引数 ) ; 2 ) ; 2 )

                の値は Right ( "0" & 1 ; 2 )  すなわち "01" の右から2文字の "01"。もし引数の2行目の値が "10" なら "010"  の右から2文字の "10"。 これと "記録::処方薬_" を組み合わせたのが設定したいフィールドの完全修飾名が得られると。

                ...そういった意図でした。

                • 5. Re: ボタン詮索によるレコードの表示2
                  nkk47

                  user14047 さん

                   

                  こちらこそ説明不足で申し訳ございません。

                   

                  「記録」レイアウトの処方薬フィールド(処方薬_01)の隣に配置されている [選択] ボタンですが、20151202.fp7 では「処方薬_01」フィールドの隣にしかございませんが、本来は「処方薬_01」~「処方薬_10」の全てのフィールドに並んで配置しています。取り敢えず1つだけでも動くようにと思い、端折ってしまいました。

                   

                  その部分だけの変更ですが、ファイルをアップし治しました。

                  http://firestorage.jp/download/835b9950a7c5b1f8d0086ee16408b8a9bdd6ef15

                   

                  希望の動作と致しましては、

                   

                  1, 「記録」 レイアウトで、「処方薬_01」~「処方薬_10」フィールドに並んで配置している[選択]をクリック

                    ※[選択]のボタン設定は、「一覧_くすり」 にレイアウト切り替え

                  2, 「一覧_くすり」 レイアウトのポータルから必要な項目を [選択]

                  3,  間違いなければ [これに決定!(処方薬)] をクリック

                  4, 「記録」 レイアウトに戻り、1, で選択した 「処方薬_**」 フィールドに 2, の値 (くすり名) を返す。

                   

                  という感じです。

                   

                  ご教示頂きましたスクリプトの意味も概ね理解できました。

                  ありがとうございます。

                   

                  引き続きましてご教示の程、宜しくお願い致します。

                  • 6. Re: ボタン詮索によるレコードの表示2
                    user14047

                    「記録」レイアウトの処方薬フィールドの隣に置くボタンに割りあてるスクリプトは

                     

                    変数を設定 [ $$処方薬フィールド名 ; 値: Get ( スクリプト引数 ) ]
                    レイアウト切り替え [ 「一覧_くすり」 (一覧_くすり) ]
                    

                     

                    スクリプト引数に GetFieldName ( 記録::フィールド名 )  を指定してください。

                    上記のスクリプトで、スクリプト引数をグローバル変数として値を保持しておきます。

                     

                    「これに決定(くすり→記録)」 スクリプトは、最後の行を変更

                     

                    変数を設定 [ $くすり名 ; 値: くすり::名 ]
                    レイアウト切り替え [ 「記録」 (記録) ]
                    フィールドを名前で設定 [ $$処方薬フィールド名 ; $くすり名 ]
                    変数を設定 [ $$処方薬フィールド名 ; 値: "" ]
                    

                     

                    昨日説明した [フィールドを名前で設定] スクリプトステップで値を設定するようにすれば、ボタンのスクリプト引数さえ変えるだけでスクリプト自体は変更する必要がなくなります。

                     

                    こんなところでしょうか。

                    • 7. Re: ボタン詮索によるレコードの表示2
                      nkk47

                      希望通りの動作を確認出来ました。

                      ありがとうございます。

                       

                      今回のスクリプトの内容はまだ十分に理解できていませんので、これから勉強いたします。

                      • 8. Re: ボタン詮索によるレコードの表示2
                        nkk47

                        2点だけご教示頂きたく、宜しくお願い致します。

                         

                        その1

                        変数を設定[$$処方薬フィールド名; 値; Get ( スクリプト引数 ) ]

                        $$処方薬フィールド名 の $$ の意味が分かりません。

                        この $$処方薬フィールド名 というのは変数名ですよね。

                        普通にスクリプトの編集で[変数設定]のオプションの[名前]の所に文字を入力して、[値]の欄にカーソルを移すと、自動的に[名前]に入力した文字列の先頭に $ が付加されますが、何故ここでは $$ と二つ付けたのでしょうか?

                        試しに $処方薬フィールド名 と書き換えますと、動いてくれませんでした。


                        その2

                        「これに決定(くすり→記録)」スクリプトの最後の行に追加さえrました

                        変数を設定 {$$処方薬フィールド名 ; 値 : "" ]

                        ですが、これはどういった意味があるのでしょう。

                        試しに、この行を削除してみましたが、動きとしては問題ありませんでした。


                        最初にスクリプト引数で得た値を、変数 $$処方薬フィールド名 に与えているので、1回 [フィールドを名前で設定] が終わったら、変数を空にしておくという意味でしょうか?


                        回答済にしてからの質問で大変恐縮ですが、ご教示の程、宜しくお願い致します。

                         

                        • 9. Re: ボタン詮索によるレコードの表示2
                          user14047
                          何故ここでは $$ と二つ付けたのでしょうか?

                          FileMaker Pro ヘルプ : 変数の使用

                          グローバル変数といって $ 一つのローカル変数と違いファイルが閉じられるまで有効です。

                          なので要らなくなった変数は明示的に消すようにする方が無難かと思っています。

                          GlobalVariables.png

                          • 10. Re: ボタン詮索によるレコードの表示2
                            nkk47

                            ダイアログのコメントを読んでいませんでした。

                            灯台もと暗し・・・

                            FileMaker Pro ヘルプやネットで「$$ 変数」などと検索したんですが、やり方がまずかったのですね。

                             

                            いつもいつも勉強になります。m(_ _)m

                            ありがとうございます。