初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2018-01-26 11:44:43

taka8129
Member

「データのインポート」時、選択フォルダを固定したい

環境
Win7
FileMaker Pro13

お世話になります。

当方ではファイルメーカーで台帳を作成しており、
データが変更になる場合、手入力で内容を変更⇒印刷して提出することで運用しています。

これまでは紙で提出していたものを、別のアプリケーションで電子運用化することになったのですが、
ファイルメーカーの台帳はそのまま使用し続ける為、別アプリケーションで入力を行い、台帳でも入力を行うことで二度手間が発生します。

そこで、別アプリケーションからテキストデータを出力し、所定のフォルダに保存して、
ファイルメーカーの台帳にテキストデータをインポートすることで入力の手間を省こうと考えています。

そこで「データのインポート」をスクリプトを使用し、3パターンのインポート仕様を作成しました。
データの種類ごとにインポート仕様が異なる為、3つのオブジェクトボタンを作成しそれぞれスクリプトを割り当てました。

別のアプリケーションからテキストデータを出力するとき、仕様ごとにフォルダを分けて3つのフォルダ内にそれぞれ振り分けられるようになっています。


ここから本題ですが、
ファイルメーカーにインポートする際、フォルダの指定ができないことに気づき、困っています。
「データのインポート」スクリプト実行時、ファイルパスの指定を行わない場合、自分でフォルダを選択する必要がありますが、
どうやら「最後に使用したフォルダ」が表示される仕様のため、違う種類のテキストデータを選択してしまう可能性があります。

そこで、「データのインポート」スクリプト実行時、「ファイルを開く」ダイアログが表示されると思いますが、この際に「開かれるフォルダを固定」したいのです。
3種類のインポート仕様がありますので、オブジェクトボタンごとに違うフォルダが開かれるようにしたいと考えています。

実現方法について、何卒ご教示頂きたく、よろしくお願い申し上げます。

Last edited by taka8129 (2018-01-26 12:50:38)

Offline

#2 2018-01-26 17:46:51

Shin
Member

Re: 「データのインポート」時、選択フォルダを固定したい

別のアプリケーションから吐き出されるテキストの仕様を、インポートに都合よく作っておくと、非常に楽ができます。(例えば、ファイル名と、テキストの中にIDなどの識別子を入れておく、など)
インポートする時に指定できるのは、フォルダーまたはファイルになります。ダイアログで指定するには、外部の仕組が必要でしょう。
フォルダーまでのパスを変数に設定しておいてフォルダーをインポートすると、ファイル名、ファイルパス、ファイル内容を取得できますので、そのデータを使って FM の内容を更新する事はできると思います。
または、ファイルパスを変数に設定して、ファイルをインポートし直すことも可能です。

現在、私の事務所で運用しているシステムでは、基幹のシステムから、必要な情報をテキストで書き出し、FM でフォルダーごとインポート、そのファイルパスを使って、1ファイル毎に各該当レコードへインポートして、同期をかけています。

Offline

#3 2018-01-26 19:00:45

qb_dp
Member

Re: 「データのインポート」時、選択フォルダを固定したい

スクリプト:「レコードのインポート」で、フォルダを指定して開く機能はありません。

PowerShell の SendKeys で強引に指定フォルダを表示するサンプルです。

スクリプト:「レコードのインポート」の前に
スクリプト:「Event を送信」でPowerShellを実行します。

※{Windows形式のフォルダパス} の部分を開きたいパスに書き換えてください。

FileMaker のスクリプト
Event を送信 [「aevt」; 「odoc」; 対象アプリケーションを手前に表示[OFF]
計算

"powershell -WindowStyle Hidden -Command " & 
Quote ( "
add-type -AssemblyName System.Windows.Forms;
$wShell=new-object -comobject wscript.shell;
$bool=$wShell.AppActivate('ファイルを開く') ;
start-sleep -Milliseconds 500;
if($bool)
{
$wShell.SendKeys('%N') ;
[System.Windows.Forms.SendKeys]::SendWait('{Windows形式のフォルダパス}');
[System.Windows.Forms.SendKeys]::SendWait('{ENTER}');
[System.Windows.Forms.SendKeys]::SendWait('%O');
}
")

レコードのインポート [ダイアログあり:オン]

Offline

#4 2018-01-29 09:16:08

taka8129
Member

Re: 「データのインポート」時、選択フォルダを固定したい

Shin様

始めまして。
お世話になります。

Shin様が記載下さった内容は、フォルダの中味を全てファイルメーカー側のレコードと同期させて一括でインポートする方法ですね?

データの更新自体は、手作業でテキストデータを選択し、更新を実施することを想定しています。
その為、オブジェクトボタンを押下した際、決まったフォルダが表示されるようにできればそれで十分なのです。
ダイアログでフォルダを指定するには、外部ソフトが必要ということになるようですね。

Offline

#5 2018-01-29 09:19:51

taka8129
Member

Re: 「データのインポート」時、選択フォルダを固定したい

qb_dp様

初めまして。
お世話になります。
   
PowerShellは使用したことが無いので、そこから勉強する必要がありますが、
大変有難いことにスクリプトまで貼っていただいたので、何とか実現できないかやってみます。

また、ご報告させていただきます。

Offline

#6 2018-01-29 09:25:39

Shin
Member

Re: 「データのインポート」時、選択フォルダを固定したい

インポートする内容は、ファイルパスとファイル名だけを想定しています。
FM で階層に見せて、その中で選択させて、ファイルを特定すれば、そのファイルへアクセスできます。

Offline

#7 2018-01-29 09:59:12

taka8129
Member

Re: 「データのインポート」時、選択フォルダを固定したい

Shin様

お世話になります。

「ファイルを特定する」作業を行わない場合、「フォルダのみ指定し開く」という作業はできないという解釈でよろしいでしょうか?
勉強不足で申し訳ございません。

Offline

#8 2018-01-29 10:23:07

taka8129
Member

Re: 「データのインポート」時、選択フォルダを固定したい

qb_dp様

お世話になります。

全レコードを表示
レコードを対象外に
対象外のみを表示
Eventを送信[「aevt」; 「odoc」;"powershell -WindowStyle Hidden~(以下略)
レコードのインポート
現在のスクリプト終了

というようにスクリプトを並べました。

そして「Eventを送信」をダブルクリックして実行し、

計算⇒指定⇒計算欄に提供頂いたスクリプトをコピーし、

※{Windows形式のフォルダパス} の部分を開きたいパスに書き換えてください

とのご案内通り、「V:\****\****\****」というようにフォルダパスに書き換えました。

最後に対象アプリケーションを手前に表示のチェックを外し、

スクリプトの更新・保存をして実際に実行してみたのですが、
デフォルトと同じく最後に表示したフォルダが表示される仕様のままです。

試しにCドライブに入っているフォルダのパスに変えてみてもダメでした。

根本的なところで申し訳ございませんが、ファイルメーカーで作業する前に、
PowerShell側でスクリプトの保存?登録?作業が必要になるのでしょうか?

Offline

#9 2018-01-29 15:13:09

Shin
Member

Re: 「データのインポート」時、選択フォルダを固定したい

OS のダイアログを開くのではなく、FM 側でそのフォルダー内のファイルをポータルなどで一覧させ、ファイルを特定してもらう、という運用を考えています。
処理が済んだファイルを削除してもいいのでしたら、パスをインポートして、それらのファイル情報を同期させる仕組もつくることができますよ。

Offline

#10 2018-01-29 15:46:43

taka8129
Member

Re: 「データのインポート」時、選択フォルダを固定したい

Shin様

OS のダイアログを開くのではなく、FM 側でそのフォルダー内のファイルをポータルなどで一覧させ、ファイルを特定してもらう、という運用を考えています。
処理が済んだファイルを削除してもいいのでしたら、パスをインポートして、それらのファイル情報を同期させる仕組もつくることができますよ。

FM側でフォルダ内のファイル一覧が可能なのですか!?
とにかくFMの「データをインポートする」スクリプト実行時、ボタンが3つありますので、
ボタンAはフォルダA、ボタンBはフォルダB、ボタンCはフォルダCというように、参照するフォルダを固定できれば、何でも構いません。間違えてしまうと当該レコードのテキストを元に戻せなくなりますので。
もしよろしければご教示願えますでしょうか。

※処理済みのファイル削除はしません。

Offline

#11 2018-01-29 18:46:20

Shin
Member

Re: 「データのインポート」時、選択フォルダを固定したい

デスクトップに A, B, C というファイルがあると想定して、その指定したフォルダーの中のファイル名とファイルパスを取り出し、新たに追加されたファイルをポータルに表示するサンプルです。
これを加工すれば、ご希望のことが出来るでしょう。
https://www.dropbox.com/s/hn8ul4a84yn6v … 7.zip?dl=0
デスクトップパスの部分を変更すれば、他のフォルダーの処理ができます。

Last edited by Shin (2018-01-30 10:04:42)

Offline

#12 2018-01-30 10:57:35

taka8129
Member

Re: 「データのインポート」時、選択フォルダを固定したい

Shin様

お世話になっております。

サンプルデータをありがとうございます。

何とか動作できるかどうか確認しているのですが、
どうしても分からない点があるのでご教示下さい。


デスクトップパスをフォルダパスに変えようとすると、「Get関数の無効な引数です」とエラーポップアップが出てきて、「C:」の部分が範囲選択状態になります。
$path = Get ( C:\***\*** )というような形ですが、これではだめなのでしょうか。


①で設定ができないので、「***が見つかりませんでした」とエラーポップアップが出るので、その後とりあえず手動でフォルダを選択したところ、
指定されたフォルダには、指定されたタイプのファイルが見つかりませんでした。とエラーポップアップが出てきます。
当方では.csvファイルでのやり取りを行うのですが、サンプルファイル内でファイルタイプをどこで指定しているのか見つけることができませんでした。
このエラーメッセージの解消はどのようにすればよろしいでしょうか。

以上二点、お手すきの際で構いませんので、宜しくお願い申し上げます。

Offline

#13 2018-01-30 13:50:39

Shin
Member

Re: 「データのインポート」時、選択フォルダを固定したい

Get (デスクトップパス) http://www.filemaker.com/help/16/fmp/ja … th.html%23
がパスを返していますので、中だけを変えてはダメですよ。
とりあえず、デスクトップにフォルダーを作って実験してみられてはいかがですか。
ファイルタイプは、インポート時に指定してあります。サフィックスが txr と csv のファイルを取り込めたと思います。

それらが理解できれば、ファイルパスを指定してみられると良いでしょう。MacOS で検証しているので確認できませんが、$path = "/C:/user/hogehoge/" とすれば通るのではないかと思います。

Offline

#14 2018-01-30 13:59:35

qb_dp
Member

Re: 「データのインポート」時、選択フォルダを固定したい

文字列のエスケイプの関連で動作しなかったのかもしれません。
手軽に試せるので良かったらためしてみて下さい。

スクリプト:「レコードのインポート」の前に
スクリプト:「Event を送信」でPowerShellを実行します。

※{Windows形式のフォルダパス} の部分を開きたいパスに書き換えてください。

FileMaker のスクリプト
Event を送信 [「aevt」; 「odoc」; 対象アプリケーションを手前に表示[OFF]
計算

"powershell -WindowStyle Hidden -Command " & 
"\"
add-type -AssemblyName System.Windows.Forms;
$wShell=new-object -comobject wscript.shell;
$bool=$wShell.AppActivate('ファイルを開く') ;
start-sleep -Milliseconds 500;
if($bool)
{
$wShell.SendKeys('%N') ;
[System.Windows.Forms.SendKeys]::SendWait(\\\"{Windows形式のフォルダパス}\\\");
[System.Windows.Forms.SendKeys]::SendWait('{ENTER}');
[System.Windows.Forms.SendKeys]::SendWait('%O');
}
\""

レコードのインポート [ダイアログあり:オン]

Offline

#15 2018-01-30 14:26:15

taka8129
Member

Re: 「データのインポート」時、選択フォルダを固定したい

Shin様

お世話になっております。


試しにデスクトップにA,B,Cのフォルダを作り、それぞれ.csv形式のファイルを1つずつ入れてみました。

提供いただいたデフォルトの状態で、ポップアップ「A」を押下したところ、
「指定されたフォルダには、指定されたファイルタイプのファイルが見つかりませんでした。」とのエラーが出ました。

そこで、「A」フォルダを適当な名前に変えて再度実行したところ、
「ファイルAが見つからなかったため、処理を完了できません。」とのエラーが出ました。

デスクトップの「A」フォルダは正常に参照できているようです。
インポートの際、末尾txrとcsvのファイルを取り込めるとのことでしたが、フォルダ内に入っている.csvファイルを認識していないように見えます。

どの様に対処すればよいか、ご教示いただければと思います。


フォルダパスの形式については、/C:/hoge/hoge/というような形式であれば通りました。

qb-dp様

調べたところ、PowerShellが有効化されていなかったのが原因のようです。
セキュリティの観点上、PowerShellの使用は最終手段としたいと思います。その際にもう一度試させていただきます。

Offline

#16 2018-01-30 15:59:47

旅人
Member

Re: 「データのインポート」時、選択フォルダを固定したい

テキストのフォルダインポートの場合.csvは多分ダメですよ。 .txtならいいはず。

Offline

#17 2018-01-30 16:46:33

taka8129
Member

Re: 「データのインポート」時、選択フォルダを固定したい

旅人様

ご助言ありがとうございます。

試しに,csvファイルを.txt形式に変えてみたら、提供いただいたサンプルスクリプトは正常に動作致しました。

しかしながら、当方では.csvでの運用を行うため、txtに変えることはできません。

そもそも.csvファイルでの運用ができないということは、折角提供いただいた手法も使えないということになってしまいますね…

Offline

#18 2018-01-30 16:58:16

Shin
Member

Re: 「データのインポート」時、選択フォルダを固定したい

こちらでの検証では、csv は、フォルダーインポートも、ファイルインポートでも取り込めます。OS の差かな。

追加情報
> テキストファイルは、拡張子が .txt か、またはファイルタイプが TEXT のテキストのみのファイルである必要があります。
との記述がありました。MacOS ではファイルタイプが TEXT の csv を取り込めるようです。

Last edited by Shin (2018-01-30 21:59:54)

Offline

#19 2018-01-31 10:12:03

taka8129
Member

Re: 「データのインポート」時、選択フォルダを固定したい

お世話になります。

こちらの仕様と作業手順について、整理させてください。

<<実施作業>>既存レコードの更新(データのインポート)

①「A仕様」「B仕様」と名前の付いたフォルダがあり、そのフォルダ内に更に「0101」「0102」と番号のついたフォルダが入っています。

②更新したいレコードを、検索をかけて探し出します。ここでいうレコードとは、「詳細」レイアウトがリレーションシップでつなげられており、1レコードあたり100以上のフィールドがあります。

③更新したいレコードに、仕様別の更新用ボタンがあり、それを押すとスクリプトが動作します。

④更新する.csv形式データを選択し、完了を押下することで全てのフィールドに更新データが反映されます。これで完了です。

というものです。

問題点は、仕様別の更新ボタンを押下した際、開くフォルダを仕様別に固定することができない、という一点のみです。
その他の仕様については改善の必要は感じていません。(更新件数は月数十件程度のため、自動化する必要はない)

以上が、現状です。

対応方法は
①外部ソフトウェアで強制的にフォルダを固定する
②F/M側にフォルダごとデータをインポート後、更新したいレコードに反映する

ご提供いただいたサンプルファイルで、txt形式にすることで動作は確認できたのですが、不明点がまだあります。
たいへんお手数をおかけしていますので、最後の質問とさせていただきます。簡単にで構いませんので、ヒントを下さい。

①ポータルにデータ一覧をインポートした後、「更新したいレコード」と「更新したいテキストデータ」をどうやって同期させて反映する?
リレーションシップを使う?しかし更新したいオブジェクトは1レコードあたり100以上ある。

②提供いただいたサンプルファイルでは、「ファイルの中身(フィールドに反映したいテキストデータ)」がインポートできていないが、どの機能を使って編集するのか?
データベース管理「入力値の自動化」オプション?

以上、よろしくお願い申し上げます。

Offline

#20 2018-01-31 11:34:18

Shin
Member

Re: 「データのインポート」時、選択フォルダを固定したい

ネックはファイルの型式のようですが、スフィックスが txt であればいいので、内部型式は csv でも tab でも、スペース区切りでも何でもいいです。ですから、連携するファイルを、csv で xxx.txt で保存できればそれで十分です。ファイル名(サフィックス)を変更するのが許されるのでしたら、取り込み直前に cmd などを利用して変更をかけてもいいでしょう。

サンプルファイルは、当初は取り込むファイルを特定するまでの動きです。実際のデータの取り込みについて、例えば、新規に保存されているファイルを一括して取り込んでしまうのか、ファイルの一覧から1ファイルを特定して取り込むかで動きが変わります。どちらにしても、取り込んだファイルパスを使って、1ファイルずつインポートしていく動きを作るのがいいと思います。
1ファイルを特定してインポートする動きを加えたサンプルに更新しています。

全く違う動きとして、フォルダーごとインポートしてしまう時に、ファイルの内容も取り込むことができます。そのデータを区切ってファイルを設定していく、という方法もあります。データフォーマットが多岐に渡るとか、頻繁に変更される場合には、こちらの方がいいかもしれません。そのフォーマットをマスター化しておけば、管理は楽です。

Last edited by Shin (2018-01-31 11:36:01)

Offline

#21 2018-01-31 11:43:49

qb_dp
Member

Re: 「データのインポート」時、選択フォルダを固定したい

オブジェクトフィールドを作成しておき、
FileMakerからEvent を送信 で Windows Explorer で目的のフォルダを開いて、
ファイルをオブジェクトフィールドにドラッグしてもらい、テンポラリーファルダにエクスポートしたものを「レコードのインポート」で読み込む。とか。

または、
WEBビューアに目的のフォルダを表示して
ファイルをオブジェクトフィールドにドラッグしてもらい、テンポラリーファルダにエクスポートしたものを「レコードのインポート」で読み込む。とか。


以下が動作すれば、カンタンですが...。

調べたところ、PowerShellが有効化されていなかったのが原因のようです。

セキュリティーがかかっているのは、*.ps1ファイルを実行する場合で、
FileMakerからEvent を送信 でPowerShellを実行する場合は、特に何もしなくてよかったような...。
PowerShell の SendKeys で強引に指定フォルダを表示するサンプル
https://fm-aid.com/bbs2/viewtopic.php?pid=45402#p45402

Last edited by qb_dp (2018-01-31 11:48:46)

Offline

#22 2018-01-31 11:59:14

qb_dp
Member

Re: 「データのインポート」時、選択フォルダを固定したい

以下のプラグインを使うとフォルダを指定してダイアログを開き、選択したファイルのフルパスが得られます。
BE_SelectFile ( "ダイアログメッセージ" ; 開きたいフォルダのパス )
BE_SelectFile – BaseElements Plugin Help Centre : https://baseelementsplugin.zendesk.com/ … SelectFile

Offline

#23 2018-01-31 12:47:31

taka8129
Member

Re: 「データのインポート」時、選択フォルダを固定したい

Shin様

お忙しいところご説明有難うございます。
大変お手数をおかけして申し訳ございません。お待ちしております。
引き続き勉強させていただきます。

qb-dp様

改めて貼っていただいたサンプルで実施してみたところ、確かに一瞬PowerShellが動作しています。ps1ファイルでなければ大丈夫みたいですね。

しかしながら、フォルダパスを指定しても、指定したフォルダに切り替わらず困っています。

※{Windows形式のフォルダパス} の部分を開きたいパスに書き換えてください。
の部分を以下のように変えてみましたが、

{/C:/user/hogehoge/}
{C:/user/hogehoge}
{C:\user\hogehoge}
{\C:\user\hogehoge\}

どれで試しても、フォルダが切り替わりません。
対処法など心当たりございましたら、ご教示下さい。

Last edited by taka8129 (2018-01-31 12:58:10)

Offline

#24 2018-01-31 13:08:29

qb_dp
Member

Re: 「データのインポート」時、選択フォルダを固定したい

C:\user\hogehoge
で大丈夫かと...。
{ } は、要りません。

Offline

#25 2018-01-31 13:53:49

taka8129
Member

Re: 「データのインポート」時、選択フォルダを固定したい

qb_dp様

"powershell -WindowStyle Hidden -Command " &
"\"
add-type -AssemblyName System.Windows.Forms;
$wShell=new-object -comobject wscript.shell;
$bool=$wShell.AppActivate('ファイルを開く') ;
start-sleep -Milliseconds 500;
if($bool)
{
$wShell.SendKeys('%N') ;
[System.Windows.Forms.SendKeys]::SendWait(\\\"C:\user\hogehoge\\\");
[System.Windows.Forms.SendKeys]::SendWait('{ENTER}');
[System.Windows.Forms.SendKeys]::SendWait('%O');
}
\""

としたところ、確かにフォルダが自動的に切り替わるのを確認しました。
しかし、フォルダパスで指定したフォルダに切り替わらず、関係ないところに切り替わってしまいます。
何度か連続してスクリプトを動作させると、飛ぶ場所が毎回変わります。但し飛ぶ場所は複数の中からランダムで、というような挙動になっています。

どの様に解決できますでしょうか。ご存知でしたら、よろしくお願い申し上げます。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] claudebot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 615.3 KiB (Peak: 652.21 KiB) ]