みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
お世話になります。
Filemaker Serverのスケジュール機能にて
CSVファイルのインポートを自動で実行するようにする為、、
Filemakerの以下サイトのサンプルを見てスクリプトを作成したのですが、
CSVファイルを認識しない状況です。
http://filemaker-jp.custhelp.com/app/an … a_id/8892/
●環境
Windows Server 2012 R2 Std
Filemaker Server.14 Webdirect10人同時接続
Filemaker Pro.14
仮想環境で構築し、ネットワーク接続でアクセスし、
サーバ上のFilemakerで以下内容のスクリプトを試しています。
現在試しているスクリプトの内容は以下です。
------------------------------------------------------------------------
[変数を設定]
名前: $filepath
値: "filewin:/" & Get(ドキュメントパス) & "test.csv"
繰り返し: 1
[レコートのインポート]
ダイアログなし → ON
データソースを指定 → ファイルパス一覧: $filepath
インポート順の指定 → インポートのフィールドが表示されず
------------------------------------------------------------------------
インポートするCSVファイルは、計算フィールドの
Get(ドキュメントパス)で返されたディレクトリに格納したのですが
スクリプトを実行すると、
ファイル「test.csv」が見つからなかったため、処理を完了できません。
と表示されます。そこでOKボタンをクリックすると、
「ファイルを開く」ダイアログが開き、そこにはtest.csvが存在している状態です。
Get(テンポラリパス)で返されるディレクトリに格納しても同様でした。
filewin:/の部分も//に変えてみたりしたのですが変化がありませんでした。
上記から何かわかる事はありますでしょうか。
Offline
ホストされたファイルを開いて FileMaker Pro で取得するドキュメントパスと
FileMaker Server のスケジュールスクリプトおよび[サーバー上のスクリプト実行]で実行される場合のドキュメントパスは異なります。
https://www.filemaker.com/help/14/fmp/j … 32.94.html
確認されては如何でしょう?
Offline
Mozさん返信ありがとうございます。
お教え頂いたURLに記述されているパスにファイルを格納してみましたが、
同様、ファイル「test.csv」が見つからなかったため、処理を完了できません。
と表示されました。また、そこでOKボタンをクリックすると、
「ファイルを開く」ダイアログが開き、そこにはtest.csvが存在していました。
/C:/Users/John Smith/Documents
上記ディレクトリのtest.csvを削除してスクリプトを実行すると上記の「ファイルを開く」ダイアログにtest.csvが存在していない
再度格納して実行したところ、test.csvが存在していた。
/C:/Program Files/FileMaker/FileMaker Server/Data/Documents/
上記ディレクトリにtest.csvを格納していなかった状態でも、「ファイルを開く」ダイアログにtest.csvが存在していた。
上記結果から最初の方のパスを読みに行っているのだと思います。
色々試してみましたが、以下の状態でスクリプトを直接実行したところ、
「フィールドデータのインポート順」ダイアログが表示され、
インポート側のフィールドが見えるようになりました。
------------------------------------------------------------------------
[変数を設定]
値: "filewin:/"を"filewin:"にした
[レコートのインポート]
ダイアログなし → ONをOFFにした
インポート順の指定 → インポート側のフィールドが表示されず(?)
------------------------------------------------------------------------
また、FileMaker Serverのスケジュールを実行したところ、状態はOKになりましたがDB側では何も起きていないようでした。
WebDdirectではインポートの”ダイアログなしで実行”はサポートされていないのは分かっていましたが、
クライアントがWebブラウザからアクセスして実行した場合の制限と思っていました。
ですが上記の結果だと、FileMaker ServerのスケジュールでもWebdirectを利用しているという時点で、
ダイアログなしで実行はサポートされないということなのでしょうか。
Webdirectを利用されている方で、自動で定期的なFMへのインポートをされている方はいらっしゃいますでしょうか。
いらっしゃいましたら方法をご教授いただけますでしょうか。
それとも手動インストールしか方法は無いというのが結論なのでしょうか。
Offline
ドキュメントパス直下にファイルを置くのであれば、
Get ( ドキュメントパス ) & "xxx.csv"
を変数に設定してインポートのファイル指定で変数を指定すれば動きますよ。
”filewin:" を使いたいならば
filewin:/C:/Program Files/FileMaker/FileMaker Server/Data/Documents/xxx.csv
でも問題はないでしょう。
いずれも、FileMaker Server 14 のスケジュールスクリプトおよび[サーバー上のスクリプト実行]で確認済みです。
別の機能との併用で利用できなくなる機能があるような仕様はありません。
WebDirect は 5同時接続で利用しています。
上記結果から最初の方のパスを読みに行っているのだと思います。
FileMaker Server のスケジュールスクリプトが最初の方のパスを読みに行くことはありません。
単純にそのPCのドキュメントフォルダを開いているだけでしょう。
WebDirect 併用での機能不全や FileMaker Pro の実行結果を元にした推察など憶測で突っ走り気味な印象を受けます。
焦る気持ちは分かりますがひとつずつ落ち着いて設定しましょう。
Offline
Mozさん、回答ありがとうございます。また、ご指摘の件申し訳ありません。今後、焦らずに進めます。
以下の4つのスクリプトをFileMaker Serverのスケジュールから試しましたが全てスクリプトエラーになりました。
現在、DBには20レコードあり、インポートしようとしているCSVは600件程あり、
勿論、C:/Program Files/FileMaker/FileMaker Server/Data/Documentsにはtest.csvが格納されています。
ここからスクリプトエラーになる原因が何か考えられますでしょうか。
1)
変数を設定:[$filepath
値: Get(ドキュメントパス) & "test.csv"]
レコードのインポートダイアログなし;「$filepath」;
一致するレコードを更新; シフトJIS]
2)
変数を設定:[$filepath
値: "filewin:/C:/Program Files/FileMaker/FileMaker Server/Data/Documents/test.csv"]
レコードのインポートダイアログなし;「$filepath」;
一致するレコードを更新; シフトJIS]
3)
レコードのインポート[ダイアログなし;「Get(ドキュメントパス) & "test.csv"」;
一致するレコードを更新;シフトJIS]
4)
レコードのインポート[ダイアログなし;「filewin:/C:/Program Files/FileMaker/FileMaker Server/Data/Documents/test.csv」;
一致するレコードを更新;シフトJIS]
Offline
スクリプトエラーが出ているのは FileMaker Server のログですか?
エラー内容は「ファイルが見つかりません」から変わりませんか?
できたらエラーコードと共にそのまま書いて頂けるとアドバイスが出やすいのではと思います。
3)は通らないですね。計算式は使えません。
ここまで書いておいて今更ですが Windows はあまり詳しくないので詳細突っ込まれると勘弁なのですが、
ファイルへのアクセス権は正しく設定されていますか?
↑ここはどなたか補足お願いします(汗)
Offline
Mozさん回答ありがとうございます。
3以外のエラーは以下になります。
1)Filemakerで実行した際のエラー
[一致するレコードを更新]オプションに対し、少なくとも1組の照
合リール度が指定されなければなりません。
2)スクリプト実行後のFileMaker Serverのログビューア
スケジュール「スクリプト名」が完了しました;最後のスクリプトエラー(409)。
DB名:スクリプト名:Import Recordsでスケジュール「スクリプト名」スクリプトエラー(2020)
スケジュールの状態の所は、FileMakerスクリプトエラーとなっています。
アクセス権ですか、全てインストールして使い始めたばかりの環境でまだ何も設定変更等しておりません。
(Administratorでは実行しています。)
その辺が問題になるのでしょうか。
Offline
1)Filemakerで実行した際のエラー
[一致するレコードを更新]オプションに対し、少なくとも1組の照
合リール度が指定されなければなりません。
パス以前の問題です。
このエラーを修正していないなら FileMaker Server でもダメでしょう。
[一致するレコードを更新]は照合フィールドを指定しなければ動きません。
409 はインポート順が無効の場合のエラーなので
1) のエラーがそのままスケジュールスクリプトでも発生していると考えてよいでしょう。
稼働中のファイルでは支障があるなら別の FileMaker ファイルを作成してもいいので
[新規レコードとして追加]オプションで動くかどうか試しましょう。
Offline
インポートの設定を行うには、
まず、
クライアントPCのドキュメントにファイル「test.csv」を保存してください。
(C:/Users/{ユーザー名}/Documents/test.csv)
FileMaker スクリプト:
変数を設定 [$filepath; 値:"filewin:" & Get(ドキュメントパス) & "test.csv"]
レコードのインポート [
データソースを指定
ファイルパス一覧(検索順)
$filepath
現在は、上記のように「データソースを指定/ファイルパス一覧」に「$filepath」が設定されていると思います。
ココに「filewin:/C:/Users/{ユーザー名}/Documents/test.csv」を追加して、
$filepath
filewin:/C:/Users/{ユーザー名}/Documents/test.csv
この様に2行にしてください。
これで、「インポート順の指定」の設定が可能になります。
※データソースを指定 は、2行ままでも、問題ありません。
■サーバーテスト
サーバー上「C:/Program Files/FileMaker/FileMaker Server/Data/Documents/test.csv」に「test.csv」がある事を確認し、
FileMaker Serverのスケジュールでスクリプトを実行してみてください。
Offline
Moz様、qb_dp様 ありがとうございます。
qb_dp様が記載されていた、
$filepath
filewin:/C:/Users/{ユーザー名}/Documents/test.csv
と下の行を追加することで、最初の投稿の際に記載した、
「レコードのインポート」での以下の部分は解消され、
インポート順の指定が見えるようになりました。
インポート順の指定 → インポートのフィールドが表示されず
しかし設定後、qb_dp様がサーバテストの項目で記載されている、
C:/Program Files/FileMaker/FileMaker Server/Data/Documents/の下にtest.csvは存在しませんでした。
現在はクライアントでなく、サーバの C:/Users/{ユーザー名}/Documents/にtest.csvを格納して試しています。
上記はスクリプトを指定した際、自動的に格納されるものなのでしょうか。
それともここに手動で格納するものなのでしょうか。
とりあえず手動で格納してFileMaker Serverのスケジュールから実行してみたところ、
スクリプトは実行され、状態はOKになったものの、インポート自体はされていませんでした。
FileMaker Serverでは以下のログが出力されていました。
「CSVインポート(スケジュール名)」が完了しました;最後のスクリプトエラー(100)
ファイルが見つかりません。というエラーになっていますが、
ファイルを認識していないのはディレクトリの権限の問題等によるものなのでしょうか。
現在ディレクトリ等はデフォルトの状態で試しているのですが、
変更すべき箇所がありましたらご教授いただけますでしょうか。
宜しくお願い致します。
Offline
C:/Program Files/FileMaker/FileMaker Server/Data/Documents/の下にtest.csvは存在しませんでした。
と言うより、
C:/Program Files/FileMaker/FileMaker Server/Data/Documents/の下にtest.csvを保存する必要があります。
FileMaker Server の スケジューラーのスクリプトプロセスは、
サーバの C:/Users/{ユーザー名}/Documents/には、アクセスできません。
Offline
ありがとうございます。
フォルダの権限を変更する事で、無事スケジュールでのインポート処理が可能となりました。
ですが、スクリプト内のインポート処理の後のLoop処理が走っていない状態です。
今、Filemaker Serverのスケジュールに登録しているスクリプトの内容は以下です。
----------------------------------------------------
全レコードを表示
対象外のみを表示
<インポート処理>
レコード/検索条件/ページへ移動[最初の]
Loop
if [テーブル名::予定=""] #予定がブランクのものについては”予”を追加
テキストを装入[選択;
テーブル名::予定[予]]
End if
if [テーブル名::作成日=""] #作成日がブランクのものについては作成日を追加(WebDirectでは日付フィールドオプションの作成日の追加が機能しない為)
計算結果を装入 [選択;
テーブル名::作成日;Get(日付)]
End if
レコード/検索条件/ページへ移動[次の;
最後まできたら終了]
End Loop
全レコードを表示
レコード/検索条件/ページへ移動 [最初の]
----------------------------------------------------
今回のスクリプトとは別に、WEBブラウザ上で使用する為用に手動で実行する用のスクリプトがあるのですが、
そちらはWebdirectの仕様により、ファイルの指定等ができない為、
インポート処理の部分のみが上記と違うスクリプトになっています。 → レコードのインポート[] としているだけ
そちらのスクリプトは上記Loop処理部分もDBに反映されます。
また、今回試しているスケジュール上のスクリプトも、FileMaker上手動実行した場合は反映されます。
FileMaker Serverのスケジュールからだと反映されないのは何故でしょうか。
何度も申し訳ありませんがよろしくお願い致します。
Offline
「FileMaker Serverのスケジュール 」や、「サーバー上のスクリプト実行」は、FileMaker Server のスクリプトエンジンが処理を実行するので、
FileMaker Pro 側で実行しても正確な検証は行えません。
ログテーブルを作成し、FileMakerスクリプトの気になる部分のログを取る事をおすすめします。
Logファイルを作成し、
スクリプトを追加。
スクリプト例:
スクリプト名:Add_Log($TimeStamp,$Title,$Log)
変数を設定 [$er; 値:Evaluate ( "Let ( [" & Get ( スクリプト引数 ) & "] ; 0 )" )]
If [ not IsEmpty ( $TimeStamp )]
新規レコード/検索条件
フィールド設定 [Logs::TimeStamp; $TimeStamp]
フィールド設定 [Logs::Title; $Title]
フィールド設定 [Logs::Log; $Log]
End If
フィールドへ移動 []
デバックしたいスクリプト中の気になる箇所や、結果を残したいところに[「Add_log($TimeStamp,$Log)」を追加し、
必要な情報を残しておくとデバッグが容易になります。
ログを取りたいところに以下を追加。
スクリプト実行 [「Add_log($TimeStamp,$Log)」 , ファイル: 「Logs」; 引数: "$TimeStamp=" & Quote ( Get ( タイムスタンプ ) ) & ";$Log=" & Quote ( ".....")]
残しておく情報:「Get ( 対象レコード数 )」とか「Get ( レイアウト名 )」とか「フィールドの内容」とか...。
Offline
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 570.3 KiB (Peak: 591.2 KiB) ]