- ベストアンサー
Automatorの失敗の原因とは?
- Mac購入からまだ日が浅く、Automatorの勉強も始めたばかりですが、特定の処理をAutomatorのカレンダーアラームに登録する際、問題なく処理を完了する場合と、途中で失敗する場合があります。
- 具体的には以下の順番で処理を行っています: 1.「シェルスクリプトを実行」で特定のファイルを検索 2.「Finder項目をコピー」でファイルを指定のフォルダにコピー 3.「変数の値を設定」でファイルのパスを扱うために設定 4.「AppleScriptを実行」 a. ファイルのパスからファイル名を抽出 b. FileMakerの特定のフィールドにファイル名をセット c. ファイルの解凍
- エラーが発生する原因はよく分かっていませんが、失敗した場合は「スクリプトを確認してください」というメッセージが表示されます。特にb.の部分で処理が停止しているようです。FileMakerのウィンドウも確認しており、エラーの原因がわかりません。詳しい情報があれば教えてください。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
おはようございます。 ほぼ出来たような感じですね。 >今は苦肉の策でAutomatorのAppleScriptから解凍したフォルダ名をFileMakerのテーブルに投げて、そのフォルダ名を元にFileMakerがcsvファイルを探してインポートをしています。 >Automatorから解凍フォルダの一覧をテキストファイルに書き出してはみたものの、それをFileMakerに取り込むことができなかったので、そのままフォルダ名を投げるやり方のままです。 csvファイルはインポートできているが、 インポートしたファイルが入っていたフォルダ名はFilemakerに登録できていないというのでしょうか? インポートするファイルを探すのが手こずっているのでしたら、決まった場所(決まったファイル名)にコピーしてインポートする方法もあります。Filemakerから見ていつも同じファイルをインポートすればよいので楽になるような気もします。 これとは別に 少し気になっていることですが、15時台にできたcsvファイルはその日うちに取り込まないと自動では取り込めなくなりますよね。 今後取り込むファイルも増えてきそうなので、取り込まれたファイルを記録しておいて、取り込まれていないファイル(複数あってもよい)を見つけてそれを読み込むことにしてはいかがでしょうか? やり方は、 Filemakerに読み込まれたフォルダ名が登録されているのでそれを利用する方法も有るし、 csvファイルで読み込まれたものをバックアップも兼ねて保存しておき、それをもとに保存していないファイルを判断して、あれば取り込むという方法などがあります。 後者の方法は意外と簡単です。 次の段階に考えるというのでも良いとは思います。
その他の回答 (8)
- ki073
- ベストアンサー率77% (491/634)
No.7の補足欄拝見しました。外出していて遅くなってすみません。 全体像がほぼ分かりました。 ●圧縮ファイルを解凍すると複数個のcsvファイルが保存されています ●DBに取り込むcsvファイルはそのうちの1個だけです の中で、そのうちの1個をどのように決めるのでしょうか、ファイル名で可能なら、それだけ残せば良いのですよね。 内容を見ないと決められなくれも、判断できる基準がはっきりしていれば難しくはありません。 (ここの情報をもう少しください) ファイルが特定できれば、Filemakerにインポートするだけです。
補足
おはようございます。 私の飲み込みが悪いばかりに、長々お付き合い下さって本当にありがとうございます&すみませんm(_ _)m 解凍したフォルダの中に複数個のcsvが入っていますが、DBに取り込むcsvは1つだけで、ファイル名が固定されています。 このファイル名は変わることなく、取り込まないその他のcsvも名前は固定です。 > ファイルが特定できれば、Filemakerにインポートするだけです。 今は苦肉の策でAutomatorのAppleScriptから解凍したフォルダ名をFileMakerのテーブルに投げて、そのフォルダ名を元にFileMakerがcsvファイルを探してインポートをしています。 他に良い案があればご教示宜しくお願い致します。 Automatorから解凍フォルダの一覧をテキストファイルに書き出してはみたものの、それをFileMakerに取り込むことができなかったので、そのままフォルダ名を投げるやり方のままです。 甘えてばかりで心苦しいのですが、引き続きご指導いただけますようお願い申し上げます。
- ki073
- ベストアンサー率77% (491/634)
No.6の補足欄了解しました。勘違いで良かってです。 もうすこし整理して考えましょうか。 フォルダ名の登録ではなく、csvファイルの内容を登録することが大事なような気がしているのですが、どうなんでしょか? csv形式になっていることしか分からないのですが、どのような管理をされるのですか? 例えば、全部のデータをデータベースに取っておくのか(この時にはいつのデータかの情報をもっていないといけないような) あるいは、最新のデータだけでよいのか。 内容をデータベースに登録しなくても、その都度ファイルから読み出せばよいのならファイル名だけ登録すれば良いので一番楽なような気もするのですが。
補足
ki073様 ありがとうございますm(_ _)m 出来が悪くて本当にすみません。 > フォルダ名の登録ではなく、csvファイルの内容を登録することが大事なような気がしているのですが、どうなんでしょか? はい、おっしゃる通りです。 文章が下手なので箇条書きにしてみます。 ●共有フォルダの中に目的の圧縮ファイルがあります ●共有フォルダの中には同じ年月日で時間違いの圧縮ファイルや、その他の形式の不要なファイルも混在しています ●目的の圧縮フォルダの名前はyymmdd15*.lzhで、年月日時分秒の部分が変動します ●目的の圧縮ファイルは、その日の15時台のものです ●将来的に15時台だけでなく、ほかの時間帯のものも取り込む可能性があります ●圧縮ファイルを解凍すると複数個のcsvファイルが保存されています ●DBに取り込むcsvファイルはそのうちの1個だけです ●解凍したフォルダ名をDBに登録する理由は、その日の15時台のcsvファイルを探すためだけに利用しています ●取り込むcsvの内容は全レコードをテーブルにインポートしています ●csvには受注日という項目があるので、いつのデータかは把握できます ●csvの内容は受注データなので、全レコードをインポートして集計表などを作っています ●インポート済みの圧縮ファイルやcsvファイルは重要視していません(一応、共有フォルダの方では圧縮フォルダを全て保存し、バックアップも取っています) 最初に状況などを端折ってしまったために、非常にややこしくなってしまい、申し訳ありません。 長々お付き合いいただいて本当に恐縮ですm(_ _)m 厚かましいお願いですが、ご負担にならない程度でもう少しの間ご指導いただけますようお願い致します。
- ki073
- ベストアンサー率77% (491/634)
No.4のお礼欄について、 ------# FileMakerの「Fname」というフィールドに フォルダ名をセット tell application "FileMaker Pro Advanced" activate set cell "Fname" of current record to Fname as string end tell のやっていることはフォルダ名をデータベースに登録しているのですよね?? そうでしたら、それでよいはずですが。 No.4の補足欄にある >このテキストファイルからフォルダ名をインポートしておけば、AppleScriptからフォルダ名をセットしに行くという処理が不要になるということですよね? この意味が分からなかったのですが、この部分で暴走しているのでしょうか?? それとも、csvファイルを読み込むところで暴走するのでしょうか? ファイルが出来ているのでしたら、Filemakerをマウスで操作して読み込んでみてはいかがでしょうか。
補足
申し訳ありません、暴走したのは私自身でスクリプトではないんです。 紛らわしいことを書いて本当にすみません(恥) AppleScriptからフォルダ名をセットする工程が不安定な動きの原因かもしれないので、Automatorからフォルダ名をテキストファイルに書き出して、それをFileMakerから探して、目的のcsvファイルのインポートするのがよい、と解釈して突っ走ってしまったのです。 そして、Automatorから解凍したフォルダ名をテキストファイルに書き出したのですが、FileMakerのテーブルにそのテキストファイルをインポートすることができませんでした。 テキストファイルに書き出した解凍フォルダ名の一覧をFileMakerのデータベースにインポートはできないのですね。 解凍したフォルダ名のデータベースへの登録は、目的のcsvファイルを検索するための条件でしかなく、ちゃんと管理していくようなデータでもないのです。 なんだか頭が混乱してしまって申し訳ありません。。。 AutomatorのAppleScriptからフォルダ名をデータベースに登録する部分はそのままで構わない、ということでよろしいですよね? 飲み込みが悪くて本当に恐縮です・・・m(_ _)m
- ki073
- ベストアンサー率77% (491/634)
ファイル名を出力するスクリプトを書いてみました。 拡張子が無い方が使いやすいかなと思ってbasenameで.lzhを取り除いています。何かきれいじゃないなあと思ってますが、取りあえず動くものを。 Today=`date +%y%m%d` FileName=`ls /Volumes/xxxx/${Today}15*` FileBaseName=`basename ${FileName} .lzh` echo ${FileBaseName} >filename.txt OSX 10.9のAutomatorの「シェルスクリプトを実行」はちょっと変な挙動がありますねえ。 初期状態ではダブルクォーテーションとシングルクォーテーションに「スマート引用符」機能があって勝手に書き変わりエラーが出てしまいます。最初は気がつかなくてエラー出まくりでした。右クリックで自動置換/スマート引用符を切っておけば良いのですが、いちいちやらないといけないようです。クォーテーションを入れる時には注意してください。 私自身のAutomatorの使い方ですが、 簡単なものはアクション使い、 複雑なものは「シェルスクリプトを実行」を使いますが、bashだけではなくrubyなどでも書けますので、どうしてもrubyに偏っています。 AppleScriptは癖が有るため、どうしても使わざるを得ないとき以外はrubyなどでということになっています。
- ki073
- ベストアンサー率77% (491/634)
だいぶ理解できてきました。 ちょっと気になるところですが、 No.1の補足欄の ------# FileMakerの「Fname」というフィールドに フォルダ名をセット tell application "FileMaker Pro Advanced" activate set cell "Fname" of current record to Fname as string end tell と >FileMakerの起動時にフォルダ名をセットするフィールドが空欄でなければ、新規レコードを追加するようにしてあります。 から、サーバーに新しいファイルができているのなら、フォルダ名(ファイル名?)を登録するようですが、 No.3でchieffishさんが書いている様に、インポート機能を使えば簡単にできます。 この場合はフォルダ名を書いたテキストファイルを作らないと駄目ですが、簡単に作れます。 もう一つ、ここでは書かれていないように思いますが、 解凍したcsvファイルに書かれた内容もFileMakerに取り込んでいるのですよね? その場合もインポート機能を使えば簡単にできます。(読み込むために加工する必要あっても難しくないと思います)
お礼
お世話になります。 午前中にAutomatorでフォルダ名をテキストファイルに書き出すことができて舞い上がっていましたが、そのテキストファイルの内容をFileMakerでは読み込むことができず撃沈でした。 なんか暴走してしまったみたいで。。。 すみません。。。 テキストファイルにフォルダ名を書き出す、という意味ではなかったということですよね? もう一度ご説明いただいてもよろしいでしょうか? 何度も本当に申し訳ありませんm(_ _)m 宜しくお願い致しますm(_ _)m
補足
ki073様 おはようございます。 相談を気にかけて下さって本当にありがとうございますm(_ _)m > から、サーバーに新しいファイルができているのなら、フォルダ名(ファイル名?)を登録するようですが、 No.3でchieffishさんが書いている様に、インポート機能を使えば簡単にできます。 この場合はフォルダ名を書いたテキストファイルを作らないと駄目ですが、簡単に作れます。 ⇒ はい、新しい解凍フォルダができると、そのフォルダ名をFileMakerに登録をして、そのフォルダ名を頼りにcsvファイルを取り込みに行っています。 以前、FileMakerの「ファイル」メニューから「レコードのインポート」→「フォルダ」で試したところ、「指定されたフォルダには、指定されたファイルタイプのファイルが見つかりませんでした」というエラーでした。 知識がないため、理解が悪くてお恥ずかしいのですが、 「この場合はフォルダ名を書いたテキストファイルを作らないと駄目ですが、簡単に作れます。」 こちらのお言葉でやっと理解できたように思います。 Automatorでフォルダ名を書いたテキストファイルが作れました! こんなこともできるなんて・・・! ki073様とchieffish様のアドバイスは、このテキストファイルからフォルダ名をインポートしておけば、AppleScriptからフォルダ名をセットしに行くという処理が不要になるということですよね? わーお!すごいです!!! 私には到底思い浮かばないです・・・。 このテキストファイルを作る部分を、シェルスクリプトで圧縮フォルダを探す処理から始まるワークフローに追加しても大丈夫ですか? まだAutomatorのことも勉強が足りないのですが、なるべく1つのワークフローにまとめた方がよいですか? それとも、小分けにしてメンテナンスしやすくした方がよいですか? それと、csvファイルはFileMakerの「レコードのインポート」でこちらは問題なくできていると思います。 今からテキストファイルの方法で一通りの流れを試してみます。 なかなか相談を「終了」できずに申し訳ありません。 もうゴールは見えていると思いますので、あとちょっとだけお付き合いいただけますようお願いいたしますm(_ _)m
- chieffish
- ベストアンサー率44% (1149/2554)
FM板の方でも質問されてた方ですよね。 AutoMatorのフォルダアクションが使えたら少し簡単かも知れない。 フォルダアクションは共有フォルダに新しいファイルが追加された場合 それをクライアントPCのフォルダにコピーしたりできる機能です。 入るファイルがテキストファイルなら、FMのフォルダテキスト一括イン ポートでFMのテーブルにファイル名も同時に取り込めますから、FM内 で不要なファイル(日付が違う?)のデータは削除すればいいですし。
補足
chieffish様 その節は大変お世話になりました。 こちらでも相談にのっていただきましてありがとうございます。 > フォルダアクションは共有フォルダに新しいファイルが追加された場合 それをクライアントPCのフォルダにコピーしたりできる機能です。 ⇒ 共有フォルダには1日に何度かファイルが追加されます。 必要とするファイルが限られているので、追加されたファイルの全てのコピーは要らないのですが、必要なファイルを選別するための条件は設定できないですよね。 > 入るファイルがテキストファイルなら、FMのフォルダテキスト一括イン ポートでFMのテーブルにファイル名も同時に取り込めますから、FM内 で不要なファイル(日付が違う?)のデータは削除すればいいですし。 ⇒ FileMakerに取り込みたいファイルは、共有フォルダでは圧縮ファイルになっています(lzh) そのlzhフォルダをMacにコピーしてから解凍して、解凍フォルダの中の必要なcsvファイルをFileMakerが取り込んでいます。 共有フォルダの中をフォルダインポートで試してみたのですが、テキストや画像ではなく、フォルダ単位だからかインポートできませんでした。 説明も下手で、ややこしくてすみませんm(_ _)m
- ki073
- ベストアンサー率77% (491/634)
スクリプトを見る限りエラーになりそうには思いませんが、 delayを入れるとするとactivateの後でしょうか。 私なりに理解した範囲では 毎日15時台にlzhで圧縮されたファイルがサーバーに作成され、それをデータベース化したい。 ということでしょうか? ちょっと質問ですが 1) サーバーに作成されたファイルはそのうち消されてしますのでしょうか。毎日データベースに登録する必要があるのでしょうか? 2) 解凍したファイルはどのように保存されているのでしょうか?Filemakerに内容を書き込み捨ててしまうのか、ファイルの状態で保存しておき必要なときに使うのでしょうか? こんな方法はいかがでしょうか どっちみちFilemakerに保存して使うのであれば、Filemakerを起動したときに起動スクリプトで登録し、カレンダーイベントとしては実行しない。というのでは??
補足
ki073様 ありがとうございます。 お礼が遅くなってすみません。 今日は何度か試してみましたが、エラーは起きませんでした。 教えていただいたdelayも試してみて、エラーは起きませんでした。ありがとうございます。 > 毎日15時台にlzhで圧縮されたファイルがサーバーに作成され、それをデータベース化したい。 ということでしょうか? はい、おっしゃる通りです。 1) サーバーに作成されたファイルはそのうち消されてしますのでしょうか。毎日データベースに登録する必要があるのでしょうか? 2) 解凍したファイルはどのように保存されているのでしょうか?Filemakerに内容を書き込み捨ててしまうのか、ファイルの状態で保存しておき必要なときに使うのでしょうか? ⇒ Windowsの共有ファイルに作成されるlzhファイルをMacにコピーして、そこからFileMakerに取り込みます。 共有ファイル内のlzhファイルは削除せず、残していきます。 Macにコピーしたlzhは削除して、解凍したフォルダは残していく予定です。 データベースへの登録は毎日行います。 ほぼ例外なく毎日登録するデータがあります。 > どっちみちFilemakerに保存して使うのであれば、Filemakerを起動したときに起動スクリプトで登録し、カレンダーイベントとしては実行しない。というのでは?? すみません。 後出しになってしまいますが、今の時点ではデータベースへの取り込みが1日1回の15時台だけなのですが、近い将来、1日2回になる可能性が高いのです。 それと、FileMakerから解凍したフォルダ名をどう判断してよいのかわからなかったので、AppleScriptから引き渡すことにしただけなんです。 FileMakerの起動スクリプトで登録をするということは、FileMakerからyymmdd15*のフォルダ名を検索して、該当ファイルからデータを取り込むんですよね? FileMakerから行った方が安定しそうですね。 ちょっと今から試してみます。 ありがとうございます。 また結果をご報告させていただきます。 ご迷惑でなければ、もう少しお付き合いいただけますようお願い致しますm(_ _)m
- ki073
- ベストアンサー率77% (491/634)
おはよございます。 b. FileMakerの特定のフィールドにその値をセット はAutomatorの記録機能を使ったものか、 tell application "System Events" ~ end の様にSystem Eventsを使ったものでしょうか? その場合で、もし不安定な場合はbの前に delay 1 を加えて時間待ちしたらうまくいくかも知れません。 ただし、上の場合だとスクリプト実行中はMacの操作をするとエラーの原因になってしまします。不便です。 AppleScriptでアプリケーションを操作する方法は大きく分けて2つあります。 1つは上に書いた方法で、どちらかと言うと最後の手段です。 もう一つは AppleScriptエディタの「用語説明を開く...」であアプリケション(Filemaker)を選んだときに表示されるコマンドを、こちらはバックグラウンドで動くことが多いので便利です。 質問欄の1と2は前回の質問で理解できたのですが、その後の3,4は コピーしたファイルの一覧をFilemakerに記録し、何か別のファイルを解凍するのでしょうか? 3以降をFileMakerを起動したときに、実行するのでは不都合があるのでしょうか? その方が安定する様に思います。
補足
ki073様、先日は大変お世話になりありがとうございました。 今回も相談にのっていただきまして感謝感謝です。 前回、ご指導いただいた後、コピーする対象がcsvファイルからlzhの圧縮ファイルに変更になったので、コピー後に解凍することになった次第です。 FileMakerの特定のフィールドに解凍したフォルダ名を入れる部分も含め、AppleScriptは以下のように記述しました。 ---------------------------------------------------- on run {input, parameters} ------# Automatorから受け取ったファイルパスから フォルダ名を抽出 set floderPath to input as string set fileName to text 51 thru -1 of folderPath ------# FileMakerの「Fname」というフィールドに フォルダ名をセット tell application "FileMaker Pro Advanced" activate set cell "Fname" of current record to Fname as string end tell ------# StuffIt Expanderで解凍 tell application "StuffIt Expander" expand input as alias end tell ------# lzhフォルダを削除 tell application "Finder" move input to trash end tell return input end run ----------------------------------------------------- 今回相談させていただいたAutomatorの一連の流れの前に、共有フォルダのマウントと、FileMakerの起動をしています。 FileMakerの起動時にフォルダ名をセットするフィールドが空欄でなければ、新規レコードを追加するようにしてあります。 > 質問欄の1と2は前回の質問で理解できたのですが、その後の3,4は コピーしたファイルの一覧をFilemakerに記録し、何か別のファイルを解凍するのでしょうか? FileMakerにフォルダ名を引き渡した後、FileMkaerからそのフォルダ内のcsvファイルを選択して、テーブルにデータを読み込んでいます。 FileMakerは解凍したフォルダ名が知りたいだけで、解凍自体はAppleScriptからStuffIt Expanderを使用しています。 > 3以降をFileMakerを起動したときに、実行するのでは不都合があるのでしょうか? 特に不都合はないと思います。 フォルダ名の引き渡しをしてから解凍と削除をした方がいいかな、というだけの順序です。 教えていただいた「delay 1」を今から試してみます。 長々と書いた割に説明が拙くて申し訳ありませんが、お時間がございましたら引き続きご教示いただけますようお願いいたします。
お礼
お世話になっております。 いつもありがとうございます。 > csvファイルはインポートできているが、 インポートしたファイルが入っていたフォルダ名はFilemakerに登録できていないというのでしょうか? 一応、フォルダ名もFileMakerに登録できています。 取り込んだ日時もフォルダ名と一緒にテーブルで保存しています。 > インポートするファイルを探すのが手こずっているのでしたら、決まった場所(決まったファイル名)にコピーしてインポートする方法もあります。Filemakerから見ていつも同じファイルをインポートすればよいので楽になるような気もします。 ああああああ、すみません!! 説明が下手なので誤解を生むような書き方になってしまったようです。申し訳ありませんm(_ _)m インポートするファイルを探すのは、別の質問でki073様に教えていただいたシェルスクリプトでばっちりです。 一連の処理をAutomatorのカレンダーアラームで実行した時に、何度かエラーが起きたので、その原因が、AppleScriptからフォルダ名をFileMakerに引き渡している部分なのかも?と思って、こちらで相談させていただいたんです。 その部分に変わる処理が、「テキストファイルにフォルダ名を書き出して、FileMakerにインポートする」という流れなのだと勘違いをしており、テキストファイルの内容をFileMakerに取り込むことができなかったので、しつこくこちらで相談を引き延ばしてしまった次第です。 現状で一応、フォルダ名も登録できていますし、AppleScriptの処理(記述)に問題はなさそうとのご助言もいただけましたので、このまま先に進もうと思います。 最初のころに出ていたエラーも今は再現しませんので、大丈夫だと思います。 とんだ思い込みからki073様まで巻き込んでご親切なご指導を賜りまして、申し訳ありませんでした。 ご面倒をお掛けしてしまい、お詫びの言葉も見つかりませんが、とても勉強になりました。 ありがとうございます。 今後の方針もご提案いただき、本当に感謝しております。 そういったところも追々、詰めていかなければと思います。 また、壁にぶち当たった時は相談させて下さい。 長々引っ張ってしまいましたが、これにて解決とさせていただきます。 本当にありがとうございましたm(_ _)m