このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

FMPro CDML 「レコード作成」の後に「レコード検索」できないかな?

発言者:YOU
( Date Friday, February 09, 2001 17:29:33 )


CDMLで2つ以上のアクションをさせられないでしょうか?
見逃したのかもしれませんが........過去のスレッドを探したところみつかりませんでした。

CDMは1度に一回だけの作業命令しかできないですよね。次の場合はOKなんです。

+++++++++++++++++++++++++++++++++++++++++++++
        データベースの情報

データベース名 = address.fmj(住所録)
レイアウト名  = web
フィールド例  = name(名前のフィールド)
+++++++++++++++++++++++++++++++++++++++++++++
        CDMLのコマンド(<A HREF>以降)

---検索の場合.....(例)木村さんを調べるとき
FMPro?-db=address.fmj&-lay=web&-format=search_results.html&name=木村&-find

---追加の場合.....(例)山村さんを追加するとき
FMPro?-db=address.fmj&-lay=web&-format=new.html&name=山村&-new

---削除の場合.....(例)鳩村さんを削除するとき
FMPro?-db=address.fmj&-lay=web&-format=delete.html&name=鳩村&-delete
+++++++++++++++++++++++++++++++++++++++++++++

となるんですけど、次の場合応用できるCDMLコマンドがありません。FMPro4.1添付のCDMLリファレンスにものっていません。

+++++++++++++++++++++++++++++++++++++++++++++
        こんなことがしたい!のコマンド

---河村さんを追加して、市村さんを検索とか.....
---山村さんを削除して、志村ケンさんを検索とか.....(へんなおじさんパラパラいいね!)

+++++++++++++++++++++++++++++++++++++++++++++

現実にはこのようにして使いたい要求がかなりあると思います。
僕は暫定的にこれをJavaScriptの、document.replace="CDMLコマンド" でページを切り替える感じで行っています(ファイルメーカーに2回にわけてCDMLコマンドを送る)が、どうも効率が悪いようでなりませんし、ブラウザ側で「Scriptをオフ」にされてしまうのがトッテもイヤです。
なれないAppleScriptでCGIを作ろうかと思いましたが時間がかかりそうだし、スピードが落ちると聞きました。それにもし、サーバーをWindowsに変えたときに今度はVisualなんとかで作る必要があるのですよね?
できればFMPro単独で2アクションをやりたいのですが、なにか裏技!!(初代ファミコンのコントローラーのマイクに向かって「バンゲリングベイ」みたいな)とかあるのでしょうか? あるのでしょ〜か〜? あるので〜し〜ょ〜か〜?

僕がチャレンジした裏技!(初代ファミコンのコントローラーのマイクに向かって「バンゲリングベイ」みたいな)

その1 追加して検索
FMPro?-db=address.fmj&-lay=web&-format=new.html&name=山村&-new&-db=address.fmj&-lay=web&-format=search_results.html&name=木村&-find

結果:ムリでした(笑) エラーがでます。

FMPro?-db=address.fmj&-lay=web&-format=new.html&name=山村&-new&FMPro?-db=address.fmj&-lay=web&-format=search_results.html&name=木村&-find

結果:ムリでした(にがわらい) 招きねこがでます。



!!!!裏技募集中!!!!!


他の方法での2アクションは無理なんでしょうか?
もし知っていて、他の人にしゃべりたいけどウブなあなた、知っててニヤニヤしてる人、「これがベストだ!」と自信のある方、身長・体重明記の上書き込んで下さい。

あと、僕は業務でWEBを作っています。業務でWEBを作っているかたに基本的な質問ですが.......WEBをお客様に提供するとき、

1_ 重要な部分にブラウザ側の力を借りてもいいのでしょうか?(Scriptを多用)
2 _ どんな設定のブラウザでも見れる「完全にサーバー側に依存した作りかた」がいいのでしょうか?(FM+AppleScriptCGI、FM+NetCloak、FM+Tango?...etc)

さぶ さんからのコメント
( Friday, February 09, 2001 18:20:28 )

昔、大規模オンラインデータベース関連の仕事を
若干していた時期があります。
回答には程遠いのですが
万が一、あっても裏技は使わないほうが
商用の場合良いようです。
データベースには静止点の確立という概念があります。
大勢が同時にデータベースを更新したときに
矛盾が出ないように、なおかつ検索者からの
検索に迅速に答えるように、という2重苦から
(巻戻しも含めて)、静止点の確立を行いながら
オンラインデータ提供をしていました。
サーバにつながるクライアントが常にひとつだけなら
宜しいのですが、そうでない場合には、更新したら
いったんデータベースを解放したほうが良いのです。

昔国鉄で2重発券の事故などがありましたが
このへんの問題だったです。

私は、コントローラに対して
復活の呪文をいれる前に大声を出すだけで
すばらしい勇者になれることを信じていました。


YOU2 さんからのコメント
( Friday, February 09, 2001 19:19:16 )

たしかにそうですね。裏技があろうがなかろうがマニュアルに載ってないことやメーカーが公にしてないことは動作保証範囲外ってやつですね。サブ名人。ところで僕は27才なんですけど高橋名人って覚えてます?

藤川 さんからのコメント
( Friday, February 09, 2001 22:26:18 )

はたしてこれが裏技と言えるかどうかわかりませんが...
それと「同時に2つ」とはいえず、単なるシーケンシャルな処理になるのですが
ほぼ同じ結果が得られると思います。

私は、このような場合、-formatのファイル(html)にmetaタグを埋め込んで
最初の処理の後に指定のURLへ自動で飛ばす(つまり次の処理をする)ようにします。

>河村さんを追加して、市村さんを検索とか.....

であるなら

ファイルメーカ内のフィールド定義は
FIELD1はそのまま単なるテキストフィールド
FIELD2はグローバルフィールド(つまりテンポラリ)にします。

で、登録(検索)設定ページ(html)内には
FIELD1(name)とFIELD2(search)という2つのフィールドがあるフォームをつくります。

で、FIELD1に「河村」を入れ、FIELD2に「市村」を入れて「-NEW」を
実行するとFIELD1に「河村」とFIELD2に「市村」が各々書き込まれた
新規レコードが作られ、その応答ページ(new.html)が表示されるわけですが、
metaタグが埋め込まれているため、自動的に次のページへジャンプ、つまり検索を実行するわけです。
なお、当然この時「市村」の値はFIELD2から取得するようにしておきます。

つまりnew.htmlのヘッダに

<meta http-equiv="refresh"content="0;url=FMPro?-db=address.fmj&-lay=web&-format=search_results.html&name=[FMP-FIELD: search]&-find>

という具合に書き込んでおくわけですね。

FIELD2はグローバルフィールドなので、使いまわされる(上書き)だけで
データが増えることはありません。

これって参考書やマニュアルには(たぶん)載っておりませんが
割と常套的に私は使っております。しかしだからといって動作的にそれほど
不安定になることはないようです。

CDMLというよりもHTML記述の応用ですね。

2つ以上の連続処理とかも、クッキーを利用すれば可能だと思います。

なお身長と体重は秘密です(^^;

YOU3 さんからのコメント
( Saturday, February 10, 2001 01:08:54 )

+++++++++++++++++++++++++++++++++++++++++++++++++
フィールドをテンポラリーとして使うのはグッドなアイデアでございます。
「HTMLの記述そのものをフィールドに入れてCDMLでページに反映させる」
とか、
「CDMLで検索結果をリスト表示させるときに奇数行・偶数行の色を変える」
とか(見やすくていいかも!!)
他でも応用がききそうですね!

++++++++++++++++++++++++++++++++++++++++++++++++++
ダミーファイル(ページ切り替え専用html)のnew.html<HEAD>に、
<meta http-equiv="refresh"content="0〜〜
と書き込んで切り替える方法ですが、過去にやってみたんです。

その時の僕の気持ちは.......

よい点

HTMLのみなので(Script未使用)ほとんどのブラウザで、ブラウザ
設定イジってる人でもでイケます。

よろしくない点

HTMLのまめ知識の本の中に、<meta http-equiv="refresh" content="〜">
"〜" の部分に "0"を入れれば秒数=0とゆうことで瞬時に切り替わると書い
てあるのですが、3秒待たされるらぁぁ。
NetScape4.7(Mac)ではたしか瞬時に切り替わりました。IE5.0(Mac&Win)では
上のようになります。僕は時間にうるさいのです。
そこで暫定的にJavaScriptを使いました。JavaScriptの
location.replace("")はNetScapeでもIEでも(MacでもWin)でも瞬時に切り
替わってくれます。

++++++++++++++++++++++++++++++++++++++++++++++++++
location.replace("")で疑問に残るのは、
NetScape4.7でこれを使うと履歴が残らない。ブラウザのバックボタンを押す
とダミーページはなかったものとされる。今回のテーマでは好都合。

IE5.0で使うと履歴が残る。ブラウザのバックボタンを押すとダミーページの
切り替わるプロセスまで見えてしまう。(MacとWinでは反応が違ったような)
ふ〜し〜ぎー。

切り替わりプロセスが見えてしまうのは<meta http-equiv="refresh">でも同
じことが言えます。ダミーファイルに、-new を入れるのは禁止ですね。バック
ボタンを押すたびにレコードがふえちゃいます。

僕はいつも<META http-equiv="refresh">にすればいいのか、
JavaScriptにすればいいのか迷います。今度ドクターコパに占ってもらおうか
思います。たぶんトイレが北向きだからJavaScript。

++++++++++++++++++++++++++++++++++++++++++++++++++

使っている環境を書き忘れましたので、書きます。

作業環境
PowerMac G4
FileMaker4.1v2 ポート591

検証環境
MacOS8.1、9、9.0.4
IE4.5以降
NN4.5以降
Windows95なんとかパック
IE5.0以降
IE5.0以降

++++++++++++++++++++++++++++++++++++++++++++++++++

さぶ名人といい、藤川さんといい僕をオカマとおまちがえなのかしら?
やだわー。
でも、みなさまのお知恵に感謝。