Report

イベントのレポートです。 >> 写真へ >> アンケートの声へ

第24回 今さら人に聞けないスクリプト
・開催日時:2007/06/23 18:00-19:30
・開催場所:Apple Store Ginza 3F シアタールーム
概要:
スクリプトについて、基本を見直してみるシリーズです。一回目は制御関連のスクリプトをおさらいします。条件によって動作を制御したいときに不可欠のスクリプトステップについて、じっくりおさらいします。
レポート:
このところ本業がヒマ傾向になっている。おかげで自社システムの開発やら改良がはかどり、それはそれで助かっているけれども、しまいにはFileMaker選手権の応募作まではかどってしまった。こんなことで良いのかと自問自答しつつもゲットしたiPodの画面に映る「可愛かった頃のウチの子たち」のアクションを楽しみながら銀座線に揺られて行く。今日、実は楽しみがもうひとつ。お題に「トランザクション」の延長戦が含まれるのだ。前回「?」マークに終わってしまったリベンジを果たすため、いざ、Apple Store 3階シアターへ。

<今回のお題>
[しっかり覚えるFileMaker]〜ちゃんと覚える値一覧〜
【特集:今さら人に聞けないスクリプト】
恒例Tips対決!
[FMスーパーテクニック]〜トランザクション処理ふたたび〜



[しっかり覚えるFileMaker]〜ちゃんと覚える値一覧〜 <茂田さん>
値一覧は、データベースを「それっぽく」演出するだけでなく、誤字脱字や想定外の値の入力防止など、とても効果的に働きます。設定のダイアログを見ると、こんな選択肢が並んでいます。

・カスタム値を使用:任意の文字列を改行区切りで入力したものを使う。→選択肢の増減や変更がまず無いものならいいかも(左/中央/右 とか)。
・フィールドの値を使用:指定フィールドの全ての値、または関連フィールドの値だけを改行区切りで入力したものを使う。→これがキモです。
・別のファイルの値一覧を使用:別ファイル上で設定されている値一覧を参照して使う。→データ分離構造などに適用多し。
「関連レコードの値のみ含める」をチェックすると、リレーションを条件として絞り込んまれた選択肢で構成された値一覧になります。

「2番目のフィールドの値も表示」って何ですか。
1番目のフィールドからの選択肢に加えて2番目のフィールドの値も表示される。
・1番目はリレーションIDに、2番目はその説明文に使うなど。このときはどちらのフィールドの値でもソートできる。
・説明文(2番目のフィールドから値のみを表示)だけが表示されるけど、入力されるのはID(1番目の値)というパターンもあり。
 (ただしこの場合、ソートは2番目の値が基準になる。)

さて、値一覧を設定した後は...
・フィールドに初期値を設定する場合は、「入力値の自動化」を使用する。
 ダイレクトに文字列を指定するだけでなく、「GetValue(ValueListItems ( Get(ファイル名) ; "値一覧の名" );1)」という式で指定すれば、値一覧のいちばん上にある値が初期値として格納されます。後日のメンテを考慮するとお勧め。
・リレーションキーとして値一覧を利用する。
 チェックボックスを使用すると複数選択可能になる→入力値は改行区切りになるので、リレーション上はOR条件となりポータルフィルタリングに利用できる。
 ここでも、リレーションキーをIDにし、説明文を「2番目のフィールド」として表示させれば、説明文だけをいつでも変更できますね。
 ポータルフィルタだけが目的ならば、別テーブル参照の値一覧にするのがお勧め。更にメンテが楽になります。
 
さて、私の使ってみたい値一覧とは、2つのフィールド値を使い、フィールド1を入力値とし、かつフィールド2のみ表示、なおかつフィールド1でソートする...というヤツなんですが、できないみたいですね。
(会場で質問したかったんですが、質問を暗唱できない恐れがありまして...)
 

【特集:今さら人に聞けないスクリプト】 <今泉さん>
計算式による処理よりもダイナミックな処理を可能にするスクリプト。今回はその「制御」まわりを中心に説明してくれました。
「エラー処理」などFileMaker独特のものもありますが、基本要素は「分岐」と「繰り返し」くらいなもの、実はシンプルです。良い機会なのでしっかり押さえておきたいところです。

If/Else If による条件分岐
状態を評価した結果によって以後の処理を切替える。
・単なるIf/(Else)End Ifだけではなく、Else If を複数使用することで、Case関数と同等の構造を作ることができる。
・条件に合致したところで評価を終了するので、合致しやすい条件から順に書くことでパフォーマンスを稼ぐことができる。

Loop/End Loop によるループ処理
Exit Loop If などの条件に合致するまで処理を繰り返す。

・ここでは「$エラー番号」とか「$繰り返し数」といった「変数」を活用すれば効果的な制御ができる。
 何行も進んでから発生したエラー内容を評価したり、現在のループ回数を確認するような場面で、v8から搭載された変数はとりわけ強力。

変数には2種類あります。
・「$変数名」:ローカル変数→そのスクリプト内だけで有効。スクリプトが終わると即忘れる。
・「$$変数名」:グローバル変数→ファイルを閉じるまで有効。

ここで、今泉さんはローカル変数を愛用しているそうです。その理由は「すぐに忘れてくれるので、他の場面で作った変数との干渉を心配しなくて良いから」とのこと。確かに「$$MyCounter」など、思わずやってしまいそうですし、多分私もどっかでやってることでしょう。運良くトラブってないだけかも。
なるほど好都合なローカル変数ですが、サブスクリプトに渡ったときも忘れてくれちゃうので、「スクリプト引数」に含めておくことだけは「お忘れなく」。
もうひとつ、Exit Loop If 等でループを脱出するステップを忘れないこと。レコード複製などで無限ループになったら面倒なことに。

ということで「関連レコードを所定の数だけ複製する」デモです。
ポータル内で複製するより、「関連レコードへ移動」を新規ウィンドウ上に行って、そこで処理した方が断然速いようです。Sevensdoor サイトにサンプルファイルを置くので是非お試しを、とのことでした。


恒例Tips対決!

・不要かもしれないフィールドを削除可能かどうか判断するワザ <竹内さん>
 →悩んだときに、とりあえず「削除」しようとすれば警告ダイアログが色々知らせてくれるという。

・FileMakerのフィールド名に関する「予約語」を確認するワザ <茂田さん>
 →ヘルプの 目次 > データベースの作成 > データベースフィールドの定義 > フィールド名の指定 に予約語のことが記されているが、実際やってみると「タイトル」「英語」「その他」などの語も予約語になっている。これについては、実はTextFont 関数TextStyleAdd 関数の引数の欄に掲載されている。
 もし予約語を使ってしまったとしても、計算式などでは自動的に ${ フィールド名 } のようにエスケープしてくれるので実害はないんですが。
 
・リレーションごとTOGを複製するワザ <今泉さん>
 →必要なTOGを複数選択した状態で複製ボタンをクリックすれば、その間のリレーション設定ごと複製される。

・ダイアログの上位に、特定のTO名を集結させるワザ <Shinさん>
 →TOGのネーミングの際に、「テーブル名__(アンダーバー2コ)TO名」と設定しておく。


[FMスーパーテクニック]〜トランザクションふたたび〜 <竹内さん>
前回、時間不足から苦しい展開を強いられたトランザクション話のリベンジです。アンケートにおいても多数の人がトランザクションの延長戦を望まれていたため再設定されました。実はワタシ的にも楽しみにしてました。

前回までのおさらいとして...トランザクションとは、
・ある処理が終了するまでの間、横ヤリを入れられたくない。→排他処理
・途中でおかしな事になったら、全部元に戻したい。→ロールバック処理

これをFileMakerの持つ機能に当てはめると...
・排他処理→レコードのロック→「レコードを開く」スクリプトステップ
・ロールバック→変更内容の破棄→「レコード復帰」スクリプトステップ
・変更の確定→「レコード確定」スクリプトステップ

同時に開けるレコードは1つだけですが、例えば1000レコードをロックするには一体どうすれば。
・現在のレコードをロックとは別に、そのレコードに置かれたポータル上の関連レコードも個別にロックすることができる。レコード復帰も確定も同様。

すなわち、トランザクションの為の親レコードを作成し、そこに置いたトランザクション用のポータルに、目的のレコードを呼び込んだ状態で必要なポータル行をロック(ロールバック/確定)すればよい。ということ。えぇっ?て感じですが、デモを見てもその通り動いてます。これは凄いですね。こんな手があったとは。(やっぱり前回は良く判っていなかったらしい)
トランザクション用テーブル→親レコード→子レコード という構成でも、孫引き可能なのでちゃんと子レコードまで見えますし、問題はないようです。
「レコード/検索条件を開く」にてエラーが返ったら、誰かが先にレコード(の一部)を掴んでいるので、そこで処理をやめれば良いのです。
まだ何もしていないので、戻すこともないし、ロックしただけなら編集行為が発生しておらず、タイムスタンプ等に変化が無い、というのも好都合ですね。
ただ、ユーザが触ることのできる画面でこれをやると、うっかりフィールド外のどこかをクリックすると即座にレコード変更が確定してしまうので、この処理はあくまでスクリプトの中だけで完結させるべきでしょう、ということでした。

今回、よく判りましたね〜。
質問も幾つか挙がりました。流石に「処理可能な上限は何レコード?」には「幾つでも大丈夫と思います」という回答になりましたが、例えば10万レコード位ならループでレコード作成して検証もできるでしょう。追試の結果報告もまた楽しみですね。
それより何より、ロールバックを含むトランザクション処理で座が盛り上がるということは、FileMakerというツールが更に上位の開発環境として世の開発者たちに認識されつつある証かもしれません。自称ローテク代表の一人としては、取り残されぬよう気張って行かねば。


★難問・奇問続出、Neralendar6月分のFileMaker Quiz after FP7 について

問題:FileMaker Server 8 Advance でホストされたデータベースに、同時アクセスできるクライアント数を適切に表しているものをひとつ選択せよ。
 a. FileMaker、ODBC、JDBC、インスタントweb、カスタムweb のそれぞれで 5。
 b. FileMaker、ODBC、JDBC の合計で 5。インスタントweb、カスタムweb の合計で 5。
 c. FileMaker、ODBC、JDBC、インスタントweb、カスタムweb の合計で 5。
 d. IT戦隊ネラレンジャーの合計で 5。

正解:「b」
あ、web系は構造的に別要素なのでこういう解になるんですね。


Reported by 金丸康明



アンケートのご協力、どうもありがとうこざいました!
ご意見、ご要望やご感想はこらちからお寄せください。 >> ご意見箱

Special Links:
・「今さら人に聞けないスクリプト」のサンプルファイルダウンロード by 今泉みゆき
・「トランザクション処理ふたたび」のサンプルファイルダウンロード by 竹内康二
・待望の新刊書、「FileMaker 関数・スクリプト+α辞典」(ラトルズ)
・IT戦隊ネラレンジャーのカレンダー「ネラレンダー」ご存知ない方はこちら

Special Thanks to:
 FileMakerまんが:たまみそさん(今回のまんがはこちら
 イベントレポート:金丸康明さん
 会場ヘルプ:酒井芳枝さん
会場の様子:>> Topへ









役立つTipsがイッパイ!


とても丁寧な解説





皆さんに喜んでいただけて嬉しそうです



カレンダーQuiz解答!

声が枯れてもマンガ描いてくれるたまみそ先生デス

来場のみなさんのご感想:>> Topへ
男性1.竹内さん、2.しげたさん、3.蜷川さん。
値一覧参考になりました。
男性トランザクション再び、良かったです。今日はよくわかりました。
Tipsの順位をつけてとの声があったため、1.シゲタさん、2.ニナガワさん、3.タケウチさん、4.イマイズミさん。でも本当は順位付けれないです。皆良かったですから。
トランザクションのデモファイル、自分で見てみたいのでDLできるようにしてほしいです。
Tips対決はニナガワさんの圧勝だと思いました。
男性今泉さんのスクリプトの話は役に立ちそうでした。
女性スクリプトの説明は大変参考になりました。スクリプトステップは全部メモがとれなかったので、このファイルがサイトでダウンロードできるのは有難いです。今後もファイルの公開をぜひお願い致します。
女性すいません、前半ねてました...。ごめんなさい...。
男性予約語やっと解決しました。
男性トランザクション大変参考になりました。いつもありがとうございます。
男性Tipsは他にも応用ができますね(アンダーバー2つ並べるのは、FileMakerではなくMailboxの名前や3D-CGのマッピングデータファイル名に使っていました)。
FileMakerは大昔から使っていますが、トランザクション処理については目からウロコでした。(かなり大変そうですが)
男性エアコンが寒かった。頭がしびれてきた。でも眠ることなく良かったかも。
前回、うっかり参加できなかったのですが、トランザクションふたたびで聞くことが出来て良かった。親ポータルの考え方、めちゃめちゃうれしかったです。
男性トランザクションふたたび、勉強になりました。
男性トランザクションをもう一度していただいてありがとうございました。前回は竹内さんだからできるんだろうなあと思ってましたが、今回は自分でもできそうと思えました。
男性正直言ってよくわからない部分多かったのですが、大変刺激的な内容でした。暇がなかなかなくて、今回はじめて参加しました。FM選手権第3回でMacBookもらいました。
女性Miyuさんのサンプルファイル、とてもシンプルでわかりやすかったです。ありがとうございました。今日は...後部シートからでもしっかり見るために双眼鏡を持ってくるってのが一番びっくりのTipsでした!なるほど...8月は持って行こうかな...
男性トランザクションの説明がとても分かりやすく実用的でした。どうもありがとうございます。Tipsは、にながわさんのTipsがよかったです。
女性途中から参加なので、スクリプトの話は少ししか聞けず残念でした。
トランザクションの話は、前回嵐のようにすぎていった思いがしましたが、今回はうーん、なるほどネェ(気分だけ...)と思いました。
Tips対決では竹内さんに1票です。(消したいフィールドが多くて悩んでました...)
男性Tipsにしても各ご説明にしても、大変役に立っています。
印刷の記憶スクリプトについての対策について。
男性Transactionの話、とても参考になりました。ありがとうございました。
男性”スクリプト”のコーナーでは、エラー処理等、プロの技を見せて頂きました。難しかったので復習してみます。
Tipsは”予約語”がちょうど気になってたので、一番にします。
男性Tipsはにながわさんの勝ちだな。
またデータモデリングやってほしい。
男性今回のような基本的な内容を扱っていただけると知識の整理になって良いので、ぜひたくさんやってほしい!!
男性値一覧ひたすらカスタム値を並べてました。とても参考になりました。
トランザクションってこんな風に使うんだなーって思いました。データのロックに使えそうですね。その前にポータルもっと勉強します...
男性トランザクション処理、タメになりました。
男性必要に迫られて久しぶりにFileMaker Proを使い、InDesign CS2での自動組版用XMLを出力する原稿作成支援ツールを作ったところだったので、とてもおもしろく、参考になりました。また次回参加させていただきます。
男性トランザクション、すごく良かったです。竹内さん、ありがとうございました。何レコードまで同時につかめるかわかったら教えて下さい。
男性30分ほど時間つぶしでのぞいたら、このイベントにめぐり会えました。この後の予定がなければ最後まで参加したかったです。
男性本を出してください。良い本が少ないので。
男性Tips対決、アンダーバーに一票。
男性少し難しかったですが、役に立つ部分がいくつかありました。
プレゼンが上手だったので聞きやすかったです。
男性トランザクションのデモが大変わかりやすく参考になりました。

Copyright © 2004-2010sevensdoor.com. All rights reserved.