みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になっております。質問おねがいします。
使用環境
Filemaker 19
FilemakerServer 19
FMS上にファイルAとファイルBがあり、AからBへスクリプトでレコードを作成しデータを移すにはどうしたら良いでしょうか?
AとBはファイル構成が同じなので、レイアウト名も一緒です。
ファイルAのスタッフというテーブルの 名前 と アカウント を ファイルBの同じくスタッフというテーブルに新規レコードを作り 名前 と アカウントをペーストする
といったことがしたいです。
Bファイルを開いて処理をするのはローカルではなくサーバーで行いたいのでスクリプトをサーバー上のスクリプト実行で作りました。
作ってみたスクリプトは以下です。
---------------------------------------
スクリプト名【Bへスタッフ作成】
変数を設定 [$$名前; 値: スタッフ::名前]
変数を設定 [$$アカウント; 値: スタッフ::アカウント]
サーバー上のスクリプト実行[ サーバー用 を実行 終了するまで待つ:オン ]
---------------------------------------
スクリプト名【サーバー用】
ファイルを開く[非表示の状態で開く:オフ;「B」] //これはちゃんと開かれていました
レイアウト切り替え[「スタッフマスタ」]
新規レコード/検索条件
フィールド設定[スタッフ::名前;$$名前]
フィールド設定[スタッフ::アカウント;$$アカウント]
ファイルを閉じる「現在のファイル」
---------------------------------------
としてファイルAからスクリプト Bへスタッフ作成 を実行しても特になにもなりませんでした。
どういった方法が適切かご教授いただきたいです。
宜しくお願いいたします。
「ファイルを開く」はサーバスクリプトでは使えません。「開かれていた」のは勘違いで、サーバスクリプトの実行前から(非表示で)開かれていたのでは。
ファイルを開いてもスクリプトの対象は元のファイルです。開いたファイルではありません。
https://help.claris.com/ja/pro-help/con … -file.html
なのでレコード作成するのはBファイルのスクリプトでないとだめでしょう。
変数は引き継がれないので、引数で渡す必要があります。
最も簡単に行うには、ファイルAで該当のレコードを抽出して、ファイルBへインポートする、という手順でしょう。
または、ファイルAでデータを1テキストにまとめて、スクリプト引数をしてファイルBのスクリプトへ渡し、それを設定する、という手順です。単なる改行区切りテキストやタイトル付きのテキスト、JSONなどを使うと楽でしょう。
それぞれのファイルにスクリプトが必要です。
ただ、
> FMS上にファイルAとファイルBがあり、AからBへスクリプトでレコードを作成しデータを移すにはどうしたら良いでしょうか?
> AとBはファイル構成が同じなので、レイアウト名も一緒です。
まったく同じ構造のファイルが存在する、しかも、そのファイル間でデータが移動する、というのは、データベースの構造として理論的におかしいです。
スタッフ名というフィールドがあるようですので、職員名簿で退職者などを別ファイルへ移動させているのでしょうが、理論的に正しいのは、退職のフラグを立ててアクセスを振り分ける、という構造です。ファイルの構成から再検討されることをお勧めします。
Offline
himadaneeさん Shinさん
なるほど、内部的にファーバーがやってくれるものだと思っていましたが出来ないのですね。
インポートが簡単そうなので、インポートの方式でやってみます。
お二方ともご回答ありがとうございました。
サーバーサイドスクリプトでしたね。ファイル間のインポートはサポートされていません。方法としては、テンポラリーフォルダーへテキストとしてエクスポートして、インポートする、でしょうか。
ですが、データの移動を行わないように作り変えることを、強くお勧めします。
Last edited by Shin (2021-06-09 18:55:17)
Offline
Shinさん
ご助言感謝します。ファイルABともにスタッフ作成というスクリプトを作成し、Shinさんが仰っていた1テキスト(項目ごとに改行)にまとめ、引数で行を割り当てる方法でうまくいきました。
同じ構成のファイルが2つあるのは、同じ形態の店舗が2店舗あり各々の店舗毎に使っているためとなります。
一つのファイルを店舗で分けるのも考えましたが、今後営業を重ねてや店舗が増えた際などでレコード数増加によりファイル自体が重くなることを懸念し分けております。
「店舗が違って店舗ごとに別のサーバなので別のファイル」ならわかりますけど...会社全体の集計とかしないんですかね。
従業員数が、グローバルレベルの数十万人なのでしょうね。
100店舗になれば、100ファイル×Xを運用するのですか?
何が何でも店舗ごとの従業員テーブルが欲しいなら、大元の1テーブルに全従業員を格納して、そのIDだけを店舗ごとに持たせたテーブルをつくるといいでしょう。(普通は、そんなテーブル使い道がないですが)
Last edited by Shin (2021-06-10 09:56:57)
Offline
合っているか間違っているかは別として投稿者は意図があってしていることに対し
皮肉たっぷりで返信するのは如何なものでしょうね
himadaneeさん
現状、別で集計している感じです。あまり効率的とは言えないのでしょうが・・・。
Shinさん
零細な会社で店舗数も2店しかありませんが、真っ新なファイルよりデータ沢山あるファイルの方が表示するとき若干動作が重く感じたことがあったので
当初はファイル間のやり取りは無く、店舗毎のセキュリティグループ作るのも面倒だったため、ファイルコピーして増やしてました。
非効率さはあるかもしれませんが、とりあえず使えているのでこのままいこうかと(汗
通りすがりさん
親切心でご回答やアドバイスされているかと思いますので、私も勉強になり助かっています。ありがとうございます。
従業員ファイルだけが複製で作られているのでしたらまだいいのですが、その他の運用ファイルも同様になっている可能性がありますね。そのファイルを将来的に大きく改変することになった場合、作業手順が数倍かかっていき、さらに、一方だけにバグを仕込んでしまう可能性が増えていきます。まして、今は小さな会社でも、どんどん成長して支店を増やして行った場合にも、同じ運用でファイルを増やす拡張していってしまうかもしれませんね。通りすがりの者さんは、そこまで理解されているかどうか、それも意図しているかどうかもわからなくても見て見ぬ振りをしておけばいい、とお考えのようですね。
過去に、毎年新しいファイルを作って運用していた会社がありました。新しいファイルほど改良が入っていくのですが、古いファイルを動かなくなった(古い大きなバグがあったのですが)、それを普通に動くように改修してくれ、という仕事が来たことがあります。古いものは動いていないのでデータを取り出して作り直し、1ファイルへまとめるという作業で済んだのですが、生きているファイルでは、そうはいきませんね。
Last edited by Shin (2021-06-11 16:28:29)
Offline
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 546.38 KiB (Peak: 567.28 KiB) ]