みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
FileMakerから以下のようにするとcmdコマンドを実行し、戻り値の取得が取得出来ます。
OS:Windows
FileMaker 12以降で使えるはずです。
フィールド:Command
値:
$Rsult=cmd /C dir /b "c:\" ;
$return=$Rsult -join "%0A" ;
フィールド:CallBack
値:
Start-Process ('fmp://$/{ファイル名}?script=FireCommand&$Return='+$return);
スクリプト名:FireCommand
If [ not IsEmpty ( $Return )]
フィールド設定 [PS::Result; $return]
フィールドへ移動 []
現在のスクリプト終了 []
Else If [Get ( スクリプト引数 ) = 1]
変数を設定 [$Script; 値:Quote ( Substitute ( PS::Command & PS::CallBack ; ¶ ; "" ) )]
Event を送信 [「aevt」; 「odoc」; "powershell -windowstyle hidden -Command " & $Script]
End If
Offline
前半部分の意味が分からないのですが・・
フィールド設定の中に変数を入れており、変数の生成にcmdコマンドを使っている様に見えます。
フィールド:Command
値:には「文字」として
$Rsult=cmd /C dir /b "c:\" ;
$return=$Rsult -join "%0A" ;
を入れる?
この辺の仕組みを解説願えませんか?(例の動かし方が全く分からないです)
$Rsult=cmd /C dir /b "c:\" ;
$return=$Rsult -join "%0A" ;
コレは、PowerShellのコードです。
$Rsult とか、$return は、PowerShellの変数です。
Offline
cmdとかStart-ProcessがPSのコマンドというのは分かるのですが、
これらの記述をFMPの中でどのようにするかの流れが良く理解できていません。
フィールド設定ではPSのコマンド類は計算式としては書けないように思ってしまいますし・・
自分の感覚としては
1.Commandフィールドに実行したいコマンドを設定
2.スクリプト起動し、Eventに送るメッセージ作成
3.実行
4.結果をResultに格納
で、手動でシェル起動しコード実行するようなことは考えていませんでした。
サンプル例で分からなかったところは、どうしてPSコマンドで取得した変数をFMPのスクリプトで
取得できるのか?といったあたりです。(FireCommandスクリプトの入り口で$Returnを見ているので)
fmp:のURLプロトコルでPSがFMのスクリプトを実行しています。
実際はPSの「変数を取得」ではなく「変数値」をですね。
'fmp://$/{ファイル名}?script=FireCommand&$Return='+$return
ここで渡ってるのは$returnという変数ではなく、その値です。(連結時に値が展開されて、FM側ではFilreCommandというスクリプト実行時に$Returnという変数に入る)
なので、最近のバージョンではFMのファイル側でfmurlscriptの拡張アクセス権が必要では。
それと、複数バージョンがインストールされてる場合はfmp19:などを使って実行中のバージョンを指定するとか...
> fmp:のURLプロトコルでPSがFMのスクリプトを実行
がまさにわからないところで、これはFMPのスクリプトとは別途PS上でPSコマンドを実行するという事でよろしいですか?
1.PSで所望操作実行→結果を内部保持
2.FMPのスクリプトをPSから実行
という流れ?
私が元々期待していた
「FMPからPSを実行して結果をFMPに戻す」
というものとは違うという事で間違いないですかね?
(有料でこのような動作を提供するものが有ることは存じ上げております)
powershell -Command "$Rsult=cmd /C dir /b \"C:\\\" ;$return=$Rsult -join \"%0A\" ;Start-Process ('fmp://$/{ファイル名}?script=FireCommand&$Return='+$return);"
例のスクリプトを実行すると、上記コマンドが、作成され FileMaker のスクリプト 「Eventを実行」で実行されます。
処理後、上記コマンド内の fmp://$/... でFileMakerへ値を戻します。
※ {ファイル名} の部分は、自分のファイル名に書き換える。
Offline
>「FMPからPSを実行して結果をFMPに戻す」というものとは違う
「FMPからPSを実行」と「結果をFMPに戻す」が別々に分かれてる(結果を戻す時点ではFMのスクリプトは一旦終了している必要がある)ので、厳密には違います。
何をしたいかによりますけど、PSでなくjavascriptをWebビューア上で実行して結果を取得できるように最近のバージョンで機能強化されてます。
>PSでなくjavascriptをWebビューア上で実行して結果を取得できるように最近のバージョンで機能強化
はい、この辺りも理解しております。FMP歴は無駄に長いのですが(かれこれ30年)Winとの連携はほぼやってこなかったので
現在の業務の要求に応じるためにいろいろ勉強している最中での疑問でした。
PSかCMD、そうでなければWebビューワーでJSのどちらかでやろうと考えておりました。(多分JSでやります)
ありがとうございました。
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 521.64 KiB (Peak: 526.18 KiB) ]