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

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

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

You are not logged in.

Announcement

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


#1 2015-01-17 16:35:33

ggsatou
Guest

一対多リレーションで一側の変更を多側に即反映する方法

こちらのサイトをいつも見させて参考にさせて頂いています。

今、上司の指示でウインドウズのFMバージョン13で見積書を作っています。
見積書テーブルと明細行テーブルは一対多の関係にあるのですが
見積書テーブルの「見積日」を、明細行テーブルにも持たせたいと考えています。
ただ、見積日は見積書を作成した日付固定ではなくて後から変更する場合もあります。
そのときは明細行テーブルにある見積日も合わせて変更するひつようがあるのですが
どのような処理方法が一般的でしょうか?
ルックアップでやって後々に不具合は出ないものでしょうか?

ちなみに明細行にも見積日のフィールドを持たせる理由ですが
別に作っている商品テーブルから見て「○月○日~○月○日の期間にこの商品は○個見積をした」
というのがわかるように、日付をリレーションキーにするためです。

#2 2015-01-17 16:57:18

旅人
Member

Re: 一対多リレーションで一側の変更を多側に即反映する方法

集計が必要なら結果が非保存となると厳しいのでルックアップでしょうね。
ただ、見積書の日付を変更したときは再ルックアップしないといけないので
これを忘れないようにスクリプトトリガも設定した方がいいかも。

Offline

#3 2015-01-17 17:38:44

ggsatou
Guest

Re: 一対多リレーションで一側の変更を多側に即反映する方法

旅人さんありがとうございます。

見積日を変数に保存→関連レコードに移動→フィールド設定をloopで回す
ではダメなのかな?と思って
再ルックアップスクリプトを使ってみました。

このスクリプトはまったく予想した動作ではなくヘルプを見てもよくわからなかったのですが
私の例でいうと、
(見積書テーブルと見積明細テーブルが見積IDでリレーションされている場合)
見積日を変更した後に「見積ID」を指定してこのスクリプトを動かすと、
この見積テーブルの明細行のうち、見積書テーブルから値をルックアップしているフィールドがすべて最ルックアップされる
という動作なのでしょうか?

たとえばですが、明細テーブルの
「フィールドA」を見積テーブルのフィールドXから、
「フィールドA」を見積テーブルのフィールドYからルックアップしているなら
どちらか片方ではなく両方のフィールドが最ルックアップされるということでしょうか・・・?

予想外の動作で戸惑っていますが
もしそうなら動作に気をつければかなり便利そうなスクリプトステップですね~

#4 2015-01-17 18:06:09

旅人
Member

Re: 一対多リレーションで一側の変更を多側に即反映する方法

照合キーでの参照なので、照合フィールドが同じならルックアップ設定しているすべてのフィールドが
再ルックアップされます。しかも対象レコードすべてになるので関連レコード移動は必要です。
他のフィールドは再ルックアップしたくないのなら、関連レコード移動したあとLoopではなく日付フィ
ールドを変数で全置換でしょう。

Offline

#5 2015-01-17 20:19:20

ggsatou
Guest

Re: 一対多リレーションで一側の変更を多側に即反映する方法

ありがとうございます。

現時点では再ルックアップで問題ないのですが
今後のメンテナンスや拡張も考えるとやや危険かなと思いますので全置換でやってみます。

#6 2015-01-18 08:23:59

バロムワン
Guest

Re: 一対多リレーションで一側の変更を多側に即反映する方法

むしかえすつもりはございませんが

再ルックアップが危険と思うのはなぜなんでしょう。
そもそも明細の日付がルックアップなのに、再ルックアップが危険というのは・・・・

トリガを仕掛けるフィールドを入力する画面の見積テーブルの日付にして
(フィールドのトリガ OnObjectModify)

------トリガスクリプト------
フィールド内容の再ルックアップ[明細テーブル::見積id]
レコード/検索条件確定[]
ウィンドウ内容の再表示[](スタンドアロンなら「キャッシュ結合結果を書き込む」にチェック、
ネットワークならパフォーマンスが低下するのでチェックしない)


にすれば、明細ポータル内は既に見積idの関連レコードですから、問題なく書き換わると思います。


<よくあるルックアップのトラブル>
再ルックアップが問題なのではなく、新規レコード、最初のルックアップ時に見積テーブル::見積idにOnObjectExit「確定」トリガが抜けるほうが、急いでいる時などポータル内1行目のルックアップされる筈のデータが抜ける可能性があり、そっちのほうが危険かもしれません。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 8 queries executed - Memory usage: 513.21 KiB (Peak: 517.75 KiB) ]