みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
お世話になっております。
実行環境:Filemaker server 14,Win server 2012 r2 st
開発環境:Filemaker pro 14 adv,Win 10
フィールドA:List ( 別テーブル : フィールドB )
3~5行のデータがリストになります。
エクスポートフィールド数は、約30で
改行を維持したいフィールドはそのうち3つ程度。
これをListの改行を維持したまま、タイトル行をつけて出力したいです。
ファイルメーカーでは仕様で、そのまま出力はできないようですが、
過去ログを見ると、「フィールド内容のエクスポート」なら
そのまま出せるということで出しました。
が、1レコードしか出力できずタイトル行も付けられませんでした。
以前はサーバー機にタスクスケジューラを組み、エクセルVBAで
改行を入れるマクロを発動させていましたが、
エクセルが使用不可になったため、ファイルメーカーだけで完結させたいです。
Filemaker server ではEvent送信ができないため、
これも避けたいのです。
ご教示いただけませんでしょうか?
よろしくお願いいたします。
参考にした過去ログ------------
出力したい形式で必要なフィールドを連結した計算フィールドを作る。例えば"\""&A&"\",\""&B&...
それをグローバルテキストフィールドに全部連結する。空にして全置換List(グローバル;連結)
別のテーブルにGetValue(グローバル;Get(レコード番号))というフィールドを作って、ValueCount(グローバル)数のレコードを作る
それをタブ区切りでエクスポート
--------------------------------
空にして全置換List(グローバル;連結) と、
どういったリレーションを使うのかが分からず。
Offline
FIleMakerだけでは、難しい(無理!?)でしょう。
「フィールド内容のエクスポート」は、FileMaker Serverでは使えません。
FileMaker Serverのスケジュールでスクリプトを実行する場合は、スクリプト実行後に任意の外部プログラムを実行することができるので、レコードのエクスポート後、何かしらのプログラムで文字列の整形が可能でしょう。
WindowsならPowerShellが標準搭載で強力です。
よりカンタンな方法なら
BaseElements Plugin の BE_WriteTextToFile ( path ; text {; append} ) が使えそうですよ。
あと、「ScriptMakerPS」とか「ProcessMakerTL」も使えます。
「ScriptMakerPS」の場合は、以下のようにすると文字コードを指定して出力が出来ます。
フィールド設定 [SMPS::Result; SMPS_Exe( "Set-Content -Encoding UTF8 \"D:\FILE.txt\" \"" & SMPS::Parameter & "\"")]
ScriptMakerPS | FileMaker Plugin for Windows :
https://sites.google.com/site/scriptmakerps/
ProcessMakerTL :
https://sites.google.com/site/processmakertl/
Offline
qb_dp様
ありがとうございます。
外部プラグインは使ったことがありませんが
ScriptMakerPSにて頑張ってみようと思います。
■行いたいこと
ファイルサーバに置かれた指定ファイル内の文字「@@」を改行コードに変換。
Windows Shift_JISなので、CR+LF(だと思います。。)
上記をクライアントの任意なボタンと
Serverにて実行できるということでしょうか?
使うユーザーが、10人であれば
10人分のPCに、
・Microsoft .NET Framework 4
・Microsoft Visual C++ 2015 Update 3
・ScriptMakerMS (bit数に合ったもの)
が必要との認識で間違いないでしょうか?
無知なもので質問ばかりで申し訳ございません。
何卒よろしくお願いいたします。
Offline
FileMaker Serverのスケジュールでスクリプトを実行する場合は、プラグイン無しでも実行出来ます。
スクリプトシーケンスタスクの作成 : http://www.filemaker.com/help/14/fms/ja … 15.10.html
クライアントから任意のタイミングで実行したい場合は、プラグインが必要です。
サーバー側で処理を行うので、プラグイン(ScriptMakerPS)は、FileMaker Serverに設定し、クライアントからは、「サーバー上のスクリプト実行」で処理を開始します。
PwerShellでファイル内容の置換は、以下のように書きます。
$targetFilePath="C:\Program Files\FileMaker\FileMaker Server\Data\Documents\file.csv";
$file_contents = $(Get-Content -Encoding UTF8 $targetFilePath) -replace "@@","`r`n"
$file_contents | Set-Content -Encoding UTF8 $targetFilePath
Offline
qb_dp様
ありがとうございます。
ご連絡が遅れ申し訳ございません。
FileMaker Serverのスケジュールで処理する場合、
スクリプトシーケンスタスクの作成だけで可能とのこと、情報ありがとうございます。
Serverでスケジュールで動かすという
1つは解決いたしました。
クライアントから任意で動かす場合、
サーバーにプラグインを設置し、ロード完了が確認できた後
「サーバー上のスクリプト実行」で、行ったところ動きませんでした。
この時クライアントのプラグインは消しており、
スクリプトの編集では、<関数が見つかりません>となっております。
クライアントから任意のタイミングで実行したい場合は、
各々のPCにプラグインが必要とのことでしょうか?
(ScriptMakerPS For FileMaker Pro をPCの数だけ購入となりますか?)
各々のPCで任意に動かすのであれば
「サーバー上のスクリプト実行」である必要はありますか?
プラグイン初心者なもので、いまいち掴みきれておりません。
申し訳ございませんがよろしくお願いいたします。
Offline
ScriptMakerPSでの実行例です。
変数を設定 [$DocumentsPath; 値:Get ( ドキュメントパス )]
レコードのエクスポート [ダイアログなし; 「file.csv」; Unicode (UTF-8)]|(file:$DocumentsPath/file.csv)
変数を設定 [$DocumentsPath_win; 値:Substitute ( Replace ( $DocumentsPath ; 1 ; 1 ; "" ) ; "/" ; "\\" )]
変数を設定 [$Script; 値:Let(
PS=
"$targetFilePath=\"{DocumentsPath}file.csv\";
$file_contents = $(Get-Content -Encoding UTF8 $targetFilePath) -replace \"@@\",\"`r`n\";
$file_contents | Set-Content -Encoding UTF8 $targetFilePath;"
;
Substitute ( PS ; "{DocumentsPath}" ; $DocumentsPath_win )
)
変数を設定 [$er; 値:SMPS_Exe( $Script )]
クライアント(FileMaker Pro)から「サーバー上のスクリプト実行」で、FileMaker Serverで処理する場合は、FileMaker Server にだけ プラグイン:ScriptMakerPS があれば、大丈夫です。
Offline
qb_dp様
ご丁寧にありがとうございます。
やはり、
変数を設定 [$er; 値:SMPS_Exe( $Script )] この部分で関数が見つかりません。となります。
開発時にはクライアントにプラグインを入れておく必要がありますか?
また、ScriptMakerPSのサンプルファイルですと、
フィールド設定で、処理が実行されていた?のですが
変数を設定でも実行されるのでしょうか?
■ローカルで動いた形
レイアウト切替[下記Powershellフィールドがあるレイアウト]
フィールド設定[Powershell]
"$targetFilePath=" & "\"\\\SERVER\hogehoge\\" & Get ( スクリプト引数 ) & "\file.csv\"" & ";" & "¶" &
"$file_contents = $(Get-Content -Encoding UTF8 $targetFilePath) -replace " & Quote ( "@@" ) & "," & Quote ( "`r`n" ) & "¶" &
"$file_contents | Set-Content -Encoding UTF8 $targetFilePath"
フィールド設定[Powershell]
SMPS_Exe( Powershell )
Get ( スクリプト引数 )の中身はGet(アカウント名)です。
上記を「サーバー上のスクリプト実行」に変更すると動きません。
Get ( スクリプト引数 )もしくは、Get(アカウント名)が不可能なのでしょうか??
各ユーザーが、アカウント名がついたフォルダにエクスポートしており
CSVの変換のみ、「サーバー上のスクリプト実行」で行いたいです。
エラー値、戻り値は特に必要ありません。
引き続きご教示お願いできますでしょうか。
よろしくお願いいたします。
Offline
FileMaker Server プロセスを動かしているアカウントに「\\SERVER\hogehoge\アカウント名」ディレクトリへのアクセス権が無いのでは?
$error[0];
でPowerShellのエラーが取得出来ます。
以下で実行してみて下さい。
"$error[0]=$null;" &
"$targetFilePath=" & "\"\\\SERVER\hogehoge\\" & Get ( スクリプト引数 ) & "\file.csv\"" & ";" & "¶" &
"$file_contents = $(Get-Content -Encoding UTF8 $targetFilePath) -replace " & Quote ( "@@" ) & "," & Quote ( "`r`n" ) & "¶" &
"$file_contents | Set-Content -Encoding UTF8 $targetFilePath" & "¶" &
"$error[0];"
>開発時にはクライアントにプラグインを入れておく必要がありますか?
開発時は、クライアントにプラグインが必要です。
サーバー上の共有フォルダに対して処理を行いたいようなので、プラグインなしでも実行可能ですよ。
戻り値がいらなくて、処理を待たなくて良い場合は、Event を送信 で代用出来ます。
フィールド設定[Powershell]
"$targetFilePath=" & "\"\\\SERVER\hogehoge\\" & Get ( スクリプト引数 ) & "\file.csv\"" & ";" &
"$file_contents = $(Get-Content -Encoding UTF8 $targetFilePath) -replace " & Quote ( "@@" ) & "," & Quote ( "`r`n" ) & ";" &
"$file_contents | Set-Content -Encoding UTF8 $targetFilePath;"
Event を送信 [「aevt」; 「odoc」; "powershell -windowstyle hidden -Command " & Powershell ]
※Event を送信で行う場合のPowerShellの記述は、改行なし、スクリプトの区切りは、; (セミコロン)。
Offline
qb_dp様
お世話になっております。
エラーの戻り値は、
クライアント、ホストともに何も帰ってきませんでした。
3時間ほどまた試行錯誤したあと、
サーバーにて、ScriptMakerPS の認証キーが設置されていないことに気付きました。。。
プラグインを入れていない、別クライアントから
「サーバー上のスクリプト実行」で希望の操作が実現できました。
何度もご指導いただき本当にありがとうございました。
無事解決できそうです。
Offline
[ Generated in 0.009 seconds, 7 queries executed - Memory usage: 549.45 KiB (Peak: 570.36 KiB) ]