Passing Multiple Parameters to Scripts – Advanced

以下の blockquote部分は上記出典ページの段落、直後の日本語は内容の拙訳です。
拙訳への具体的な「ちげーよバカ!」な突っ込みは大歓迎です。
※ 万一のトラブルは、出典サイトはもちろん、(たとえそれが僕の拙訳のせいだとしても) 一切関知しませんのであしからず。

素晴らしいカスタム関数を発表してくれた sixfriedrice.com の Jesse Antunes / Geoff Coffey に感謝します。


Wouldn’t it be nice if whenever you need a parameter you could just ask for it by name? Lets say that you have a create order script and you want to pass the script the name, street and zip code of the customer. If you were stuck with just the regular old FileMaker functions there ain’t no way that’s happening. But after you are done with this post, you will be able to get the name of your customer with the simple function: GetParameter( “customerName” ).

もし、パラメータを使いたいときはいつでも名前で呼び出せるとしたら、いい感じじゃないですか?
受注スクリプトがあったとしましょう。
そして、そのスクリプトに対して、顧客の名前/住所/郵便番号を受け渡したいとします。
もし、あなたが、FileMakerに元々ある関数で立ち往生しているばかりだとしたら、これはどうにもできません。
しかし、この post の内容をやっつけた後だとしたなら、シンプルな関数で、顧客の名前をとりだすことができるでしょう:
GetParameter (“customerName” )

Alright, since your interest is hopefully already piqued, I’m just going to go ahead and tell you the functions right away. There are three of them. I know that sounds like a lot but if you give me a chance to explain myself, trust me your going to love it and once you get used to them you’ll never go back.

さて、もう十分興味を刺激することはできたでしょうから、その関数の話の中身にさっさと移りましょう。
3つあります。
こう言うと大変そうでしょ?
でも、まあだまされたと思って説明を聞いてくださいな。
あまりに気に入ってしまって、これなしの世界に戻れなくなりますから。

These different functions are probably a little bit confusing right now so lets go through them one by one.

たぶん、これらの別々の関数を見て、ちょこっと脳みそがこんがらがっちゃったでしょうから、ひとつひとつ説明していくことにしましょう。

This custom function is your bread and butter. You use it every time you want to pass a parameter to another script. name is the name of the parameter your are passing and value is the actual text that you want to send over. So for instance if you were sending the name of your customer to a script you would use:

これが基本です。
別のスクリプトにパラメータを受け渡したいときには、これを使います。
name というのは、受け渡したいパラメータの名前で、value は受け渡したい値そのものです。
したがって、仮に、顧客の名前をスクリプトに渡したい場合はこうなります。

If you want to pass multiple parameters to our order creation script would just string this custom function together using the ampersand like so:

もし、受注システムに対して、複数のパラメータを受け渡したいのなら、& (アンパサンド) を使って以下のように繋げて書けばいいわけです。

How it works: PassParameter() turns the name, value pairs that you pass in into a special format so that they are easy to manage. It basically puts two special characters in front of the name, between the name and value, and after the value. Basically if you were to say PassParameter( “customerName” ; “joe blow” ), this function turns your text into:

実際の動き方:
PassParameter ( ) は、name/value のペアを、処理しやすいように特殊なフォーマットに変換します。
要は、name の前と、name と value の間と、value の後に、2文字の特殊な文字を追加するわけです。
つまり、
PassParameter( “customerName” ; “joe blow” )
と書いたら、返ってくるのは…

or in the case of multiple parameters as above it would look like this:

先述の複数のパラメータ例の場合は、以下のような感じになります。

This construct of name and value pairs is what we refer to as a dictionary. This becomes important because our next function operates on a dictionary. You’ll notice in the actual definition of the function PassParameter() that I do a couple of substitutions. I use this process to escape the different characters that I use in my delimiters so that my scripts won’t break when you send in those same characters. Don’t worry though, when I get them back out I remove any extra characters that I added.

この name/value のペア構造を dictionary として参照させているわけです。
これは大変大切なことです。
次の関数は、この dictionary を操作する関数です。
PassParameter ( ) の定義式を見れば、二度ほど substitute をしていることがわかりますね。
このプロセスは、デリミタ(区切り記号) として使っているのと同じ文字列をパラメータの内部で使っても、スクリプトが破綻しないように、別の文字列にエスケープするためのものです。
余計な文字列は最終的には除去されますから、ご心配なく。

The dict parameter in this custom function is, yup you guessed it, short for dictionary. The second parameter, ‘name’, is just the name of a value that you would like to get out of the dictionary. So if you were to execute the following code:

このカスタム関数内の dict という引数は、(はい!もうわかりましたね!)、dictionary の略ですね。
2番目の引数の name は、dictionary から取り出したい値の名前です。
ですから、もし以下のコードを実行すると…

It would return “Joe Blow”. On it’s own this DictGet function doesn’t seem that useful but it is the workhorse of the three functions.

How it Works: DictGet() actually works as a basic text parser. It takes the name that you pass in and turns it into the format you would expect in the dictionary. If the name passed in is “customerName”, then it would be turned into “<:customerName:=”. The we take that weird looking text and search for it in the dictionary. If we find the weird string in the dictionary, then we return the value for it (”joe blow”, otherwise we return an empty string (””). Pretty neat huh?

“Joe Blow” が返ります。
DictGet 関数は、これ自身のみではさほど役に立つとは思えないでしょう。
しかし、DictGet 関数は、くだんの3つの関数の間で馬車馬のように働いてくれるのです。

実際の動き方:
DictGet ( ) は、基本的なテキストパーサとして働きます。
name を受け取ると、dictionary に対して、よき案配のフォーマットに変換します。
渡された name が “customerName” だとすると、
“<:customerName:=”
と変換されます。
そしてこの妙ちくりんなテキストを、dictionary の中で探します。
dictionaryの中に このへんてこテキストを見つけた場合、”joe blow” という値を返すわけです
(見つからなければ、空値 “” が返されます)
なかなかイケてるでしょ?

This is the function you would use whenever you are trying to access data that was passed in using the PassParameter() function. It’s is specifically designed to operate on a script parameter that contains a dictionary. It actually just pulls the value of the name you give it, out of the script parameter using the DictGet() function. Very Simple…. not a whole lot going on here.
Now that you have a pretty good understanding you are pretty much ready to enter into the world of named parameters. Once you get used to using these little gems, I am positive that you will never be able to go back to plain old vanilla script parameters ever again. There are a couple more benefits to using these functions such as using named values in your script results, nesting parameters and accessing multiple occurrences that I will probably get into a later date. For now… I hope these functions help make FileMaker Development a little easier for you.

PassParameter ( ) 関数を使って受け渡されたデータにアクセスしたいときに使います。
dictionary を内包するスクリプト引数を操作するため専用に作成しました。
DictGet ( ) 関数を使って、スクリプト引数から、与えられた name にひもづく値を引き出すわけです。
すごくシンプル。なんちうこたない。
さて、なかなかいい感じで理解できたなら、named parameter の世界に入る準備はいい感じでOK ということです。
いったん、これらのちょっとしたテクを使うのに慣れると、もう、あの古式ゆかしいペラッペラに薄っぺらな標準のスクリプト引数に二度と戻る気はさらさらなくなることでしょう。
これらの関数を使うことで、他にも、二三の恩恵に浴することができます。
スクリプトの結果から 名前で値を引っ張りだしたりとか、入れ子のパラメータからとか、後日言及する複数のオカレンスへのアクセスとか…ね。
とりあえず、これらの関数が、あなたの FileMakerでのデータベース開発を少しでもラクチンにすることを願います。

More About Dictionaries: If you would like to get a little more in-depth into these functions there is a second post that adds functionality to this idea here:FileMaker Dictionary Functions.

NOTE: We had a couple of good comments from some of our early release readers. Genx who blogs on FileMakerMagazine.com added that he thought it would be much more visually appealing and easier to use XML style tags. I can’t remember the exact reason why I didn’t go this route… I am pretty sure it was because I wanted to have two delimiters at each break point in the name/value pair. He did convince us to change the names of the functions from our more nondescript names ( #() #P() ) we started with so that it would be easily understood what each one did. Another useful tip came from Fitch ofpre1.com, who pointed out that another similar name/value pair implementation can be seen in Back Magic from SeedCode.com

dictionary 関連のより詳しい話:
これらの関数についてもっと詳しく知りたい場合、下記の second post で、ここのアイデアの機能追加発展版な記事が読めますぜ。
FileMaker Dictionary Functions

日本語 拙訳

Note:初期版読者からの 良きコメントが、ふたつみっつありました。
FileMakerMagazine.com の blog をやっている Genx からは…
XMLスタイルタグを使えば、もっと見た目で分かりやすくて訴求力のある感じになるんじゃね?…と。
今となってはなんでそのルートに行かなかったのかを思い出せないのですが… おそらくは、たぶん name/value ペアのブレークポイント毎に、2文字のデリミタを差し込みたかったんだと思われます。
また彼がそうしろというのがもっともなので、最初 #() #P() とかいう何なんだかわからない記述にしていたこれらのカスタム関数の名前を、何をするものなのか分かるような名前に変えることにしました。

もうひとつのナイスコメントは、pre1.com の Fitch でもって…
似て非なる name/value ペアの実装方法を指摘してくれました。
Back Magic from SeedCode.comで見られます。


  1. FileMaker – マルチプルスクリプトパラメータの受け渡し
  2. マルチプルパラメータのスクリプトへの受け渡し – 応用編 (このエントリ)
  3. FileMaker Dictionary 関数

3 thoughts on “マルチプルパラメータのスクリプトへの受け渡し – 応用編

  1. Pingback: FileMaker – マルチプルスクリプトパラメータの受け渡し » 脳みその中身

  2. Pingback: FileMaker Dictionary 関数 » 脳みその中身

  3. Pingback: Dictionary関数が必要な理由(FileMaker)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)