伊藤清徳の垂直落下式ムーンサルトプレス

PerlとかPHPとかMySQLとか...がんばっても8割だ。

Category: Filemaker (page 2 of 4)

Filemaker <=> MySQL

ここ数カ月FilemakerとMySQLを、
Filemaker9より実装されたESSを使って接続し、
EC向けCMSを作っていました。

そのうえで、いくつかハマってしまったことがあったので、レポ。
(というか、実際は全部不確定要素ですけど・・・。)

まず結論。ESSはそこそこ使えるけど過信はしないほうがよい。


その理由

◆LONGTEXTが使えない??(不確定要素)
LONGTEXTのカラムはFMでは「テキスト」のフィールドとしてマッピングされます。
私の環境ではなぜか、LONGTEXTがTEXTとして扱われ、
65,535バイトで切り捨てられてFM上で表示されました。
DB構築途中でTEXTからLONGTEXTへ変更したのが影響している可能性もあります。
この辺は未確認です。すみません。

 
 
◆リレーションが効かない?
MySQLのテーブルのキーでないカラムに対して、
FMのテーブルとリレーションすることは、
仕組み上できるようになっています。
見た目上一応動きます。
が、MySQL側のレコード数が増えてくるとそれなりに影響が出ます。
たとえば、FMのスクリプト内で、
FMテーブルからMySQLテーブルへ「関連レコードへ移動」をすると、
FMエラー101(レコードなし)が帰ることがあります。
おそらく、MySQL側にインデックスがないためレコードの取得に時間がかかり、
関連レコードなしと判定されるのではと思います。
 
私の場合、MySQLのテーブルにルックアップを指定しておいて、
関連レコードに移動し再ルックアップ。
関連レコードがなければ、FM側のレコードの値を利用して、
MySQL側にレコードを新規作成。
というスクリプトを作っていたのですが、
関連レコードがあるにもかかわらず、なしと判断され、
不要なレコードを作成してしまうケースに悩まされました。

対応策としては、
主キーでリレーションするか、
リレーションしたいカラムにINDEXを作っておくというのが手でしょう。
まぁ、そもそも、キーでもなくINDEXもないカラムでリレーションとか、
プログラマ的にアホすぎるだろって自分でも反省しています。

ちなみにレコードのインポートで、一致するレコードを探すときも同じことがおきます。

私の場合は、なでしこでCOUNT()関数を使って、MySQL側にSQL発行し、レコードがあるかなしかを判定させることでとりあえずその場をしのぎました。

◆MySQLのレコードをロックできない。
まぁ当たり前なんですが、必ず頭に入れておかなければならないことです。
複数人やさまざまなインターフェイスからMySQLのレコードを操作する可能性がある場合は、
FMでどうにかしようというのは考えないほうがいいでしょう。

編集中のフラグをMySQL側のテーブルに用意して、 
そこに何かあるときは編集しないようにすれば一応はいけるでしょう。
ただ、やっぱりこれもFMだけで判定するのはよくないかなと思いましたので、
私の場合は、なでしこでSQL発行して、判断しています。
 
 


 
 
いまのところ私が困ったESSのハマりどころはこんな感じです。

別になでしこ開発コミュニティの回し者ではないですが、
やはり、なでしこプラグインがあることによって、かなり幸せになれます。
Windows版FMのDB構築する上で、なでしこは必須だろうと、改めて思いました。

Filemaker なでしこプラグイン 最近の動向

いろいろ仕事があったり、足をケガしたり、なんやかんやで、最近なでしこのFilemakerプラグインを使えてなかったのですが、先月久々に大きくバージョンアップがあったようなので使ってみました。


プラグイン自体に「vnako()」と「vnakofile()」関数が追加になっていました。

・vnako
Filemakerとは別プロセスでなでしこ本体のランタイムみたいなものを起動して、そこでなでしこスクリプトを起動する。

・vvakofile
vnako関数は引数の中に直接スクリプトを記述してそれを起動しますが、こちらは、引数になでしこスクリプトが記述されたテキストファイルのパスを書いて、それを起動するというもの。

別プロセスなので、他の従来の関数とは違い、返り値を得ることができません。
またプロセス終了を待たないので、スクリプト中に記述した場合は、起動だけして、そのままスクリプトは順に進められます。
終了を待つ関数と待たない関数があると良かったなぁと思ったり。特にvankofile。

別プロセスなので、MS-Office操作などを行うときは、各種セキュリティのブロックに配慮がいるかもです。ランタイム配布や別の人のPCで動かすときなんかとくに。


こちらでなでしこプラグインのダイアログ各種がFMのウインドウハンドルと関連付けられていないという話をしたのですが、関連付けがされて、FMのウインドウの後ろに回ってしまうということがなくなったようです!これは個人的にかなり嬉しいです!(全部のダイアログについて調べてはいませんが)


その他、

FMプラグイン版だとブラウザ要素クリック命令があるとうまく動きません。。。。これができれば、オープンのJS製WYSIWYGライブラリを使って、Filemaker上でWYSIWYGエディタが実現できるのですが・・・。近いうちに動くといいなぁ。

前からの懸案だった、メール周りの動作はこれからチェックします。

ということでVIVA!なでしこ!!

FMのウインドウスタイル変更2

以前、こちらの記事で、なでしこプラグインを利用して、Filemaker内のウインドウの最小化ボタンや閉じるボタンを無効にするお話を書いたのですが、「FMアプリウインドウ自体はできないの?」というコメントを頂戴しました。

確かにそれも価値があるかも。ということで、作ってみました。

ここからダウンロードして下さい。

仕組みは以前と一緒で、なでしこからWin32APIを呼び出してウインドウスタイルを変更しています。

使い方は同梱のテキストファイルを読んでください。なお、以前のFM内のウインドウスタイルを変更するものを改造しているので、スクリプト名が重複しています。同時利用される際は、リネームするなど適宜変更して利用してくださいね。

FMでWindowsのダイアログ

Filemakerなでしこプラグイン関連連投です。


今回やってみたのは、Win32APIでメッセージボックスを出す方法です。

FMにもカスタムダイアログあるじゃねぇかって、、、確かにそうなんですけど、Windows標準のダイアログじゃないので、なんかイケてないなぁって・・・。FM使いの人の中で同じコトを思った人絶対いると思います。

じゃぁなでしこに「言う」命令があるじゃねぇかって、、、こちらも確かにそうなんですけど、なでしこプラグインの仕様では、「言う」命令で出せるダイアログはオーナーがFMのウインドウハンドルになっていなくて、ダイアログのボタンを押さずに、FMのウインドウのどこかをクリックしてしまうと、ダイアログがウインドウの後ろに隠れてしまって、気がつかないとハングアップしているように見えてしまうんですよ。

ということで、
・FMでWindows標準のメッセージボックスを出す。
・ダイアログはFMのウインドウがオーナーとなっている。
ということを目標に作っています。



はい、いつものようにダウンロードはこちらから。

今回も説明は割愛・・・。申し訳ないです。時間がありません・・・。


なでしこのオープンファイルダイアログなんかも、FMがオーナーになっていないので同様の不都合が生じるので、Win32APIでやろうかなぁと思ってたら、構造体の定義が面倒で、今日は時間切れ。またそのうち。

その前に、なでしこプラグイン側で対応してくれないかなーーーとちょっと思ってたり・・・。

FMのウインドウスタイル変更

ひさびさにFilemakerのなでしこプラグインについてのお話。


Filemakerは、他のソフトで言うところのマクロに値するスクリプトを駆使して、アプリケーションを作り上げるデータベースソフトです。ゆえに、開発者が意図しない利用者の動作手順は、往々にして不具合に直結しがち・・・。

ウインドウ内の「閉じる」「最大化」「最小化」ボタンもその一端じゃないでしょうか?私の個人的な経験ではそういった問題は結構多いです。

そこで、なでしこプラグインで、これらのボタンを有効化|無効化できる仕組みを作ってみました。

↑これが通常状態。これを、、、

↑こんな風に変えれます。最小化と閉じるボタンを無効にしています。

どうですか?使いようによっては便利でしょ?(・・・とは言いつつ、実はすでに同様のプラグインがどっかにあったとは記憶していますが・・・)


せっかくなので、使っていただけるようサンプルを用意しました。

ここからダウンロードしてください。

使い方は同梱のテキストをお読みください。



仕組みだけ説明しますと、なでしこがWin32APIを実行できるようになっているので、これを使って、ウインドウのスタイルを変化させています。

FilemakerでWin32APIを実行できるというのは、結構強みだと思います。そういう意味でも私は、なでしこプラグインが大好きなんだなー。(バグはご愛嬌ということで・・・笑)

細かい説明は難しい話になってしまい、FMのユーザー向けじゃないのなかぁ・・・という勝手な言い訳をさせてください。(本当は書くのが面倒なだけ・・・)

サンプルをダウンロードしてもらえれば、ソースは丸分かりですから、なでしことWin32APIが少し分かる人なら、なんとなく理解ができるはずです。改変も許可していますから、ご自由にお使いください。

FM-Chubu

ファイルメーカーユーザーグループ中部というグループの勉強会に行ってまいりました。

FMに関しては私は専門というわけではないので、私なぞのレベルの10段階とか100段階とか上の方々がいらっしゃるのかと内心ガチガチに緊張しながら行ったのですが、中にはそういった方もいらっしゃいましたし、業務でちょっと触るだけだよって方もいらっしゃいました。本当にさまざまな人が集まっていて、なかなかいいグループじゃないかと思います。また、FMの汎用さを物語っているのかなという気がします。

何名かの方々は、このブログをご覧いただいているようで、普段私はWCAN界隈や、オープンソース界隈で生息するWEBプログラマなので、専門が違い非常に恐縮ですが、今後ともよろしくお願いいたします。

東海近県でFMを使っている方、今度参加してみませんか?

VBS(WSH)で標準出力取得

VBS(WSH)で、コマンドラインアプリを実行して、その標準出力を得る方法。

いろいろ調べた結果、WScript.ShellのExecメソッドを利用する方法と、同じくRunを使う方法があることが判明。

今回は私がFilemaker用に開発したVBS実行プラグインでコマンドラインアプリの出力を得たいとおもっている。

Execメソッドは標準出力から直接データを得ることができるが、Runメソッドでは実行結果をいったんテキストファイルに保存し、その内容を取得する必要がある。

「じゃぁExecで良し!」と思ったら、全然良くなかった。Execメソッドを使うと、コマンドプロンプトが必ず開いてしまう。。。Filemakerで使うことを前提としているので、あまりに不都合だ。

ということで、Runメソッドで実装。

Function KIYO_VBS( dummy )
	
	Dim WshShell, oExec
	Set WshShell = CreateObject("WScript.Shell")
	exCommand = "実行するコマンド"
	
	Dim tmpFileName
	tmpFileName = "tmptmptmp.txt"
	
	Dim command
	command = "cmd /S /C " & exCommand & " > " & tmpFileName
	
	Dim result
	result = WshShell.Run(command, 0, true)
	
	
	
	
	Dim fso
	Dim TextFile
	Dim Text
	
	Set fso=CreateObject("Scripting.FileSystemObject")
	
	
	Dim Path
	Path = tmpFileName
	
	
	Dim fUNICODE
	Dim BOM
	Set TextFile = fso.OpenTextFile( Path )
	If Not TextFile.AtEndOfStream Then BOM = TextFile.Read(2)
	fUNICODE=BOM=Chr(&HFF)&Chr(&HFE) Or BOM=Chr(&HFE)&Chr(&HFF)
	Set TextFile = fso.OpenTextFile(Path,,,fUNICODE)
	
	
	If Not TextFile.AtEndOfStream Then
	  Text=TextFile.ReadAll()
	Else
	  Text="(Empty)"
	End If
	TextFile.Close
	
	
	fso.DeleteFile(tmpFileName)
	
	
	KIYO_VBS = Text
End Function

WScript.Echo( KIYO_VBS("") )

KIYOVBSプラグインで使うことを前提としているので、なんだかとっても変な書き方でごめんなさい。必要に応じて書き換えて使ってください。

KIYOVBSの動作条件追加

クライアントさんから先日リリースしたKIYOVBSが動作しないとご指摘頂きました。
多謝です。

環境によりVC++2008ランタイムが必要です。

インストールしてみて動作しないということであれば、
ランタイムをインストールしてみてください。

ランタイムはマイクロソフトサイトより
http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=ja
こちらからダウンロードしてください。

調子にのってJScriptも実行可能に

昨日公開した、FilemkerからVBSを実行するためのプラグイン
昨日の今日でいきなりバージョンアップです。、

JScriptを使えるようにしました。

当初、こういうのはGUI機能が標準で備わっている
VBScriptを中心に使えたほうがいいと思っていたのですが、
私は、どうにも、VB系言語の扱いが苦手なので、
どうしてもJScriptを使いたくなってしまったためのバージョンアップです。

あと、初版であった余計な機能は隠蔽しましたので、
少し計算式エディタが使いやすくなると思います。

ここからダウンロード

基本的な使い方は、VBSと同じです。
同梱の説明書をご覧ください。

まだまだしばらくベータ版です。

気に入った!という方はカンパくださいというスタンスでしばらく行きます。
あ、以前、私の作った別のカンパウェアで、
お菓子を物納してくれた方もいらっしゃいます。
そういったものも面白いと思っています。

次回バージョンは、
・環境がインストールされていればPerlScriptなども使えるよう
・スクリプト実行
を予定しています。

FilemakerからVBSを実行するプラグインを作りました。

FilemakerからVBScriptを実行するプラグインを作りました。
とりあえず、日曜大工で作ったので、実装が適当ながらも公開しておきます。

こちらからダウンロードしてください。

利用方法などは、同梱の「readme.txt」に書いてありますので、
必ず読んでから利用してください。

今のところあまりに実装が適当ですので、ベータ版です。
利用する人の責において利用してください。
(いずれ正式版になったときは有料になるかも??)

しばらく、気に入った人はカンパしてねというスタンスで行きます。


仕組みは、プラグイン中で、MS COMである「ScriptControl」をロードして、
そこへVBSを渡して実行するという仕組みになっています。

ですので、実行するVBSスクリプトの実装は、OS環境によって変わりますので、
その点はご了承ください。

ScriptControlを利用していますから、JScriptも実装できると思います。
次期バージョンでは、JScriptも実装します。

(JScriptは、マイクロソフトによるECMAScriptの実装で、Javascript1.5相当に独自拡張を加えたものです。)

JScript実行も実装しました!
※現在JScriptの実装は多くのバグが発見されていますので、おまけ機能と考えてください。


実装が適当とはいえ、手前味噌でアレですが、案外便利です(^-^;

Filemaker界隈では、VBSでプリンタ切り替えをしたりするのが常套手段になっているようですから、
この辺は実装次第ではどうにかなるのではないでしょうか。


今回のプラグインはクジラ飛行机さんの八角研究所での記事を参考に作りました。多謝です。

クジラ飛行机さんは、
なでしこ」という日本語を使って作成するユニークなプログラミング言語の作者で、
この「なでしこ」をFilemakerに組み込むプラグイン「なでしこプラグイン」の作者さんです。
最も尊敬し、目標としているプログラマの一人です。

なでしこプラグインは私も愛用しており、便利さも使いやすさも抜群で、命令も豊富です。

今回のプラグインは、
なでしこプラグインほど豊富な機能はいらない。
というような場合向けに作ったプラグインです。

クジラ飛行机さんの回し者ではないですが、
より便利な機能をお求めの方、
より簡単なスクリプト環境をお求めの方は、
「なでしこプラグイン」オススメです!


【追記:2009年6月8日】
ver.0.6公開 JScriptも使えるようになりました!余計な機能を隠蔽しました。


【追記:2009年6月17日】
プラグインを認識・動作させるにあたり、VC++2008ランタイムが必要です。
インストール方法は、同梱readme.txtに記述しております。

Older posts Newer posts