みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつも参考にさせていただいています。
カスタムダイアログ表示について教えて下さい。
現在、AとBというファイルがあり、
ファイルAに
テキストフィールドa
日付フィールドa'
ファイルBに
テキストフィールドb
日付フィールドb'
重複判定フィールドb''
があります。
AとBをリレーションでつなぎ、Aにおいて、a'を指定し、aにデータ入力すると、Bにおける該当のb'を含むレコードのbに反映され、かつbとb'を条件として重複がないか(自己リレーションで)b''で判定する、ということを実行しています。Bには1年分の日付が入っており、そこにAでのデータを重複がないように書き込むイメージでしょうか。
やりたいことは、Aでa'入力時(あるいは入力後?)に、もしBのb''に「重複」があればカスタムダイアログを表示させたいのです。
具体的に
1 「カスタムダイアログを表示」を含むスクリプトの書き方 (Bのb''に「重複」があれば、という条件でのみ表示させたいのです)
2 上記のスクリプトのトリガ設定方法 (a'入力後そのフィールドを離れるときだからOnObjectExitかなと思っていますが・・) です。
なお、重複があってもそのまま入力せざるを得ない状況があり、ダイアログ表示は入力者に重複があることを知らせることだけが目的です。
まどろこっしい説明で申し訳ありませんが、アドバイスをいただけたらと思います。
Offline
> における該当のb'を含むレコードのbに反映
とは、 b b' に a a' の内容がコピーされる、という意味でしょうか。
重複判定をどの時点で行うかによってかわりますが、A から B にデータを移す時に行うのでしたら、リレーションを通してレコードが存在するかどうかを、例えば、Count ( リレーション::b' ) をみればいいです。
ただ、重複管理は、ファイルA の中だけで、a' で自己リレーションを張れば行うことができます。
その後、ファイルA のレコードはどうなりますか。
もし、そのまま保存されているのでしたら、A B に同じデータのレコードが2重に存在することになり、どちらかが無駄です。
または、削除されるのでしたら、ファイルB の中だけで処理すればいいです。
ファイルB がカレンダー表示をしたい目的のものでしたら、そちらには日付だけを持たせておき、内容はファイルA から参照させればいいので、テキストフィールドは持たせる必要がなくなります。重複管理は、ファイルA の中だけで行います。
Last edited by Shin (2023-08-17 09:57:52)
Offline
A-Bのリレーションキーが分かりません。
説明からは、
AとBのリレーションは1対多
になると思いますが、
そうすると、
> Aにおいて、a'を指定し、aにデータ入力すると、
> Bにおける該当のb'を含むレコードのbに反映され
これはどういうことでしょう。
Bで新規レコード作って、
ということでしょうか?
Offline
お返事ありがとうございます。
説明不足で済みません。
Bは一年間の予定表のようなもので、b'には一年分の日付が、bにはその日の予定が入っています。
Aはこの予定について、変更が生じる度に、その変更の日付をa'に、新たな予定をaに入力しています。
そしてAとBのファイルをa'とb'のフィールドでリレーションしています。
前回は説明を簡略化するために省略していましたが、Bにはb'''という計算フィールドがあり、ここにlookup関数でaのデータをひっぱってきています。さらにもう一つ計算フィールドb''''を作って、b'''にデータがあればそれを表示し、なければbを表示するようにしています。Aファイルの変更予定があればそれを表示し、なければBファイルにあった元々の予定を表示するイメージです。最終的にはこれを1週間の予定としてカレンダー表示しています。
また、重複については、元の予定と新しい予定で同じものを入れたくない場合があるので、ひとまずはBファイルで管理しています。
いまのところ上記で説明した部分まではなんとか構築できましたが、最初の説明で申したように、Bファイルを開かず、Aファイルにてaおよびa'に変更を入力した時点で、Bのb'で重複があれば(重複があったばあいは「重複」と返すようにしています)カスタムダイアログを表示したいのです。aとa'の入力が終わった段階で、【a'の日付をコピーし、ファイルBの同じ日付のレコードを検索し、もしb''に「重複」と返されていればダイアログを表示する】のようなイメージでスクリプトを書けばいいのかと想像していますが、その書き方が分からないのです。
Offline
どうも分かりません、、
Bで日付がユニークだと、
書かれた自己リレーションが意味を成しませんよね。
複数レコード有るとすると、
Aから見てBの関連レコードが複数あることになります。
それもおかしな話ですよね。
Offline
テーブル名フィールド名を無理に抽象化しているから意味が分かりにくくなってるんですよね。
Bは普通の予定表、Aはそれの変更履歴、ということでは?
Bには直接入力せず、Aに仮に入力する、同じ日の予定がBに既に入力されていれば「重複」ということのような感じに見えます。
>Aはこの予定について、変更が生じる度に、その変更の日付をa'に、新たな予定をaに入力しています。
ここがちょっとわからない。「変更の日付」は予定の日付なのか、予定を変更した日付なのか?
「予定の変更」という場合、日付を変える場合と予定の内容を変える場合があると思いますが、、、両方変えてしまったら元の予定とは全く関係なくなるので単に新規の入力ということになりますし。
himadaneeさんのおっしゃるとおり、無理に抽象化していると思います・・・
確かにBは予定表で、Aは変更履歴です。
ただ、ここでの「重複」はBに既に入力されていれば、ということではなく、同じ予定が他の日付の予定が「重複」していればということなんです。
1月1日の予定が「出張」だとして、例えば2月1日の予定をファイルAから「休暇」から「出張」にしたら、それを「重複」として認識したいのです。
また、「変更の日付」は予定の日付です。
言葉足らずで済みません。
ファイルAには、予定の日付を入力し、変更の予定を入力しています。
上の例では、2月1日とa'に入力し、aに「出張」と入力します。
するとファイルBの2月1日を含むレコードのb'’に「出張」とlookupされたデータが入力されて、b'''には「出張」と表示されます。
ファイルBには1年分の日付がb'にあらかじめ入力されているレコードが365個あり、そこにファイルAでの新規レコードのaが(b'をリレーションとして)bに上書きされるイメージです。
わかりにくくて済みません・・・
Bは普通の予定表、Aはそれの変更履歴、ということでは?
Bには直接入力せず、Aに仮に入力する、同じ日の予定がBに既に入力されていれば「重複」ということのような感じに見えます。>Aはこの予定について、変更が生じる度に、その変更の日付をa'に、新たな予定をaに入力しています。
ここがちょっとわからない。「変更の日付」は予定の日付なのか、予定を変更した日付なのか?
「予定の変更」という場合、日付を変える場合と予定の内容を変える場合があると思いますが、、、両方変えてしまったら元の予定とは全く関係なくなるので単に新規の入力ということになりますし。
Offline
カスタムダイアログを表示ってことはスクリプトなわけですから、
>「休暇」から「出張」にしたら
出張をBで検索すればいいだけでは?
しかし#2で指摘されてますけど、Bの予定は不要でAを参照するだけでいい感じですけど...Aの最終変更が現在設定されてる予定ってことになりますので
自己リレーション
と書かれたのが間違いですね。
リレーションは
A::a = B::b
として、
このリレーションの関連レコードの有無で、
変更履歴の予定と、予定表の予定が同じか
を見るんですよね。
「重複」
を常時表示でいいのなら、
スクリプト不要で、計算フィールドで表示できますよ。
Last edited by チポ (2023-08-21 10:51:38)
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 587.97 KiB (Peak: 604.51 KiB) ]