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

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

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

You are not logged in.

Announcement

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


#1 2018-04-23 11:58:11

Swordfish
Member

ファイルをまたいだスクリプト

お世話になります。お力添えいただければ幸いです。

環境:FMS 15/Windows 2008 Server ;FMP15-16混在/Windows 10 x15台程度
ーーー
現在、個人情報を管理しているファイルAと進捗を管理しているファイルBがあり、その片方からスクリプトを走らせて、以下のような手順でファイル間をまたいで一つのスクリプトで完了させたいと考えていますが、うまく動きが作れず苦慮しています。
AとBは個人IDでリレーションを取っており、AからBへリレーションを通じてレコードを作成許可しています。


ファイルAのスクリプト
・個人IDをコピー
・Aに配置している、Bのポータル「個人ID」フィールドに移動
・貼り付け(ここでBのレコードが一つ生成されて欲しい)
・関連レコードへ移動で、ファイルBに移動
・ファイルBでAでコピーした個人IDで検索実行
・Bに作成したレコードが一つ検索された状態で表示
<完了>

そもそもこのような形が実現できるのかがわからないレベルですが、一つ一つの作業を追うことができれば作成できるのではないかと考え、投稿させていただきました。
よろしくお願いいたします。

Last edited by Swordfish (2018-04-23 12:17:44)

Offline

#2 2018-04-23 13:24:26

チポ
Member

Re: ファイルをまたいだスクリプト

ポータル行が選択された状態で
関連レコードへ移動
するとそのポータル行のレコードが選択されています。

ポータル行のフィールドをボタンにしても同じです。


なお、
ファイルをまたいでスクリプトを実行するには、
それぞれのファイルでスクリプトを作り、
スクリプトステップ
  スクリプト実行
で他方のファイルのスクリプトを指定して実行させます。

Offline

#3 2018-04-23 13:53:46

Moz
Member

Re: ファイルをまたいだスクリプト

ファイルを分けている理由はなんでしょう?

既にポータルにファイルBのレコードを表示していますし、
ファイルBのテーブルBのレイアウトをファイルAに作ることもできます。
その場合は両方のファイルにスクリプトを作る必要もありません。

・貼り付け(ここでBのレコードが一つ生成されて欲しい)
・Bに作成したレコードが一つ検索された状態で表示

これは常にポータルに新しい行(レコード)を追加して
スクリプトの中でテーブルBのレイアウトで作成したレコードだけ表示したいという意味ですか?

チポさんが書いてあるように動きますので、コピー&ペーストは不要です。
また、そのような目的の場合は変数を利用する方が適します。
(コピー&ペーストでの値移動は変数もグローバル格納も無かった石器時代の負の遺産です)

[関連レコードへ移動]は別のファイルのレイアウトを選択することもできますから
ファイルBにスクリプトを作らなくても実現は可能です。

Offline

#4 2018-04-23 14:42:33

Swordfish
Member

Re: ファイルをまたいだスクリプト

チポさん、Mozさん ありがとうございます!

チポ wrote:

ポータル行が選択された状態で
関連レコードへ移動
するとそのポータル行のレコードが選択されています。

ポータル行のフィールドをボタンにしても同じです。

なんとか新規フィールドは作成できましたが、以下のスクリプトで、ファイルBに飛んでくれません。

1:フィールドへ移動[ファイルB::個人ID]
2:フィールド設定[ファイルB::個人ID;ファイルA::個人ID]
3:関連レコードへ移動[テーブル:ファイルB]

Moz wrote:

ファイルを分けている理由はなんでしょう?
既にポータルにファイルBのレコードを表示していますし、
ファイルBのテーブルBのレイアウトをファイルAに作ることもできます。
その場合は両方のファイルにスクリプトを作る必要もありません。

Mozさんのおっしゃる通り、ファイルA側で様々な作業を完了させてしまう形は理想形なのですが、
ファイルBが現状業務の機能を保有しているため、なかなか全体最適化できず、今回のようなご質問に至っている次第です。

Moz wrote:

これは常にポータルに新しい行(レコード)を追加して
スクリプトの中でテーブルBのレイアウトで作成したレコードだけ表示したいという意味ですか?

概ねご理解の通りです。現状当該個人の業務が発生した場合に、個人IDをコピーして、ウィンドウメニューをマウスクリックでファイルBに手動で移動し、新規レコードを作成して、IDをペーストしています。

Moz wrote:

チポさんが書いてあるように動きますので、コピー&ペーストは不要です。
また、そのような目的の場合は変数を利用する方が適します。
(コピー&ペーストでの値移動は変数もグローバル格納も無かった石器時代の負の遺産です)

正しく理解できていないかもしれないですが、上記の2のステップを入れないと新規レコードが作成されない状況です。

Moz wrote:

[関連レコードへ移動]は別のファイルのレイアウトを選択することもできますから
ファイルBにスクリプトを作らなくても実現は可能です。

最初私も、このスクリプトステップを設定しながら同じように動くと期待していたのですが、どうにもここで動きが終了してしまっている状況です。

関連レコードへ移動でファイルをまたぐ際にどのように設定に気を付けるべきかが何か抜けているのでしょうか?

Offline

#5 2018-04-23 15:18:57

チポ
Member

Re: ファイルをまたいだスクリプト

> 1:フィールドへ移動[ファイルB::個人ID]
> 2:フィールド設定[ファイルB::個人ID;ファイルA::個人ID]

これでは、
ファイルBにその個人IDのレコードがないことが条件になりますよ。

ポータルの最後の行に移動してから上記を実行しないと。


> 3:関連レコードへ移動[テーブル:ファイルB]
これだけでは関連テーブルのウインドウが選択される訳ではありません。
  ウインドウ選択
とか、
そのウインドウでスクリプトを動かすとかすれば最前面にでてきます。

Offline

#6 2018-04-23 15:19:19

Moz
Member

Re: ファイルをまたいだスクリプト

#4 を踏まえて......かつスクリプトの手順(ポータルで関連レコードを作成する)に拘る場合

[コピー][ペースト]を利用するのはナンセンスなので利用しません。
----- ファイルA のスクリプト
[変数を設定]変数名は「$個人ID」で値は「個人ID」フィールドの値
[オブジェクトへ移動]でポータルに移動をします(名前が付いていなかったら付けます)
[ポータル内の行へ移動]で最後の行を指定します。
[フィールド設定]でテーブルBの「個人ID」フィールドに変数「$個人ID」の値を設定します。
[関連レコードへ移動]でファイルBのテーブルBのレイアウトを指定します。
[スクリプト実行]でファイルBのスクリプトを呼びます。
-----  ファイルB のスクリプト
[ウインドウの選択]で[現在のウインドウ]
テーブルBに主キーフィールドを作っているならば
[一致するレコードを検索]で主キーのフィールド
作っていなければ
[全レコードを表示][レコードを対象外に][対象外のみ表示]
これで新規に作成されたテーブルBのレコードのみが表示されます。

ポータル内から関連レコード移動 => 実行時のポータル行が現在のレコード(絞り込まれない)
ポータル外から関連レコード移動 => 関連レコードの1レコード目が現在のレコード

手順に拘らないならば、
引数に個人IDを指定してファイルBのスクリプトを実行します。

新規関連レコード=新規レコードなので
テーブルBに新規レコードを作成して、個人IDに引数の値を設定すればおしまいです。
[全レコードを表示][対象外のみ表示]
[新規レコード/検索条件]
[フィールド設定]「個人ID」に引数( Get ( スクリプト引数 ) )

Last edited by Moz (2018-04-23 15:22:17)

Offline

#7 2018-04-23 15:28:55

Swordfish
Member

Re: ファイルをまたいだスクリプト

チポさん、Mozさん  迅速すぎるフィードバック本当にありがとうございます。

チポさんのおっしゃる通り、この動作は「ファイルBに関連レコードが無い」事が前提条件になることを記載していませんでした。大変申し訳ありません。
そのため、該当がある場合は既設の関連レコードへ移動するボタンで移動して作業を開始するので問題はなかったのですが、Mozさんの仰る形を一度作って両方をこの新作で網羅できるようにしてみようと思います。

ありがとうございました。完了次第フラグを解決に変更させていただきます。

Offline

#8 2018-04-23 15:41:58

Shin
Member

Re: ファイルをまたいだスクリプト

異動先で抽出を省く動きを取り入れて、もっと簡単に構築する方法を。1秒間に1レコードを超えて作成しないことを前庭にしています。
https://www.dropbox.com/s/gt19qqqp4iv36 … 0.zip?dl=0

Offline

#9 2018-04-23 15:59:13

Swordfish
Member

Re: ファイルをまたいだスクリプト

Shinさん ありがとうございます。完全に希望通りの動きをしており、驚愕しています。
知らないステップがあり、なぜタイムスタンプ?なぜキャッシュ結合結果を書き込む?などまだ理解が届いていませんが、動きは明らかにこれで問題なさそうです。

皆さんにご提示いただいた内容を全て反芻して、再度ご報告いたします。

Offline

#10 2018-04-23 16:24:55

Shin
Member

Re: ファイルをまたいだスクリプト

1行のポータルで、新規となるレコードのみを表示させるフィルターをかけておきます。ポータルは2個表示させ、重複表示が無いようにフィルターを掛けます。
動きは、
変数にユニークな値(サンプルではタイムスタンプ)を設定します。この時に、それ以前のレコードの影響を消すために、ウィンドウを再表示します。
1行ポータルで新規レコードのフィールドにその値を設定し、レコードを作成し、確定させます。
もう一度1行ポータルへ戻り、関連レコードへ移動、を行います。ポータルフィルターが有功になるので、新しく作ったレコードのみがアクティブなレコードとして表示されます。ですから、相手側のスクリプトは不要です。

タイムスタンプの代わりに、UTCミリ秒やUUIDを使った方が良いかもしれません。キャッシュ書き込みは、サーバー運用を行なった時にはおそらく必須になるでしょう。スタンドアロンでは、念のため程度です。

Last edited by Shin (2018-04-23 17:04:58)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 599.26 KiB (Peak: 616.16 KiB) ]