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

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

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

You are not logged in.

Announcement

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


#1 2020-06-18 17:50:07

tarou
Guest

関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

お世話になっております。
以下のような3つのレコード(便宜上レイアウトを兼用)があります。

DB1
A(承認する用レイアウト):表示用のレコード(レイアウト)、承認済みフラグを持つ
DB2
B(件別レイアウト):AレコードにIDが受け渡され、Aでは受け渡されたBの関連のみが表示される
┗C(見積書レイアウト):Bレコードの下にぶら下がる形でリレーションしている関連レコード、仮に上長、財務、社長の承認否認フラグを持つ
DB1とDB2は件IDでリレーションを組み、AレコードはBからの依頼ボタンで新規追加されます。

見積書を確認する際はCのレイアウトをポップアップで出しています。
ここで、Aレイアウト上にあるCのレコードが持つフラグがどれか一つでも111になったらAの承認済みフラグを1にする、という処理を行いたいです。
今はCレイアウトにスクリプトを仕込み、layoutExit時に111なら件IDを変数に取得、Aにレイアウト移動し、IDで検索、移動しフラグを立てる処理をしていますがスマートに感じません。

A対し、ポータル上のレコードを走査して111のレコードがあればフラグを立てる、というスクリプトを組めないでしょうか。
フィールド設定【承認フラグ】[case( C::上長 = 1 and C::上長 = 1 and C::上長 = 1 ; 1 ; "" )]的な方法だと、ポータルの一件目でしか判定されず、2件目以降で承認が下りている場合の方法が分かりません。

ご教示願えないでしょうか。

#2 2020-06-18 23:51:44

Shin
Member

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

ポータルの中の承認のレコードは、1レコードだけですか。

Offline

#3 2020-06-19 08:16:13

Moz
Member

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

承認フラグが3つすべて1にならないと承認されたと見なさないなら、
3つの承認フラグが1のとき1になるフラグフィールドを追加しては如何でしょう?

GetAsBoolean ( A and B and C )→A,B,Cはそれぞれフラグフィールド
のような感じです。

Max ( テーブル名::フラグフィールド ) が1になれば
ポータルの中のいずれかが3つの承認フラグが1になったということです。

Last edited by Moz (2020-06-19 08:17:03)

Offline

#4 2020-06-19 09:56:42

tarou
Guest

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

お返事ありがとうございます。

>Shinさん
いえ、ポータルに表示するレコードは見積のパターンとなり、1つの案件に対して何パターンかぶら下がる形になります。
その見積書の中で上長[1:OK、2:NG]、財務[〃]、社長[〃]のようにフラグが複数ある形です。

>Mozさん
すみません、上では省きましたが、承認状態はnull:未判定、1:承認、2:否認、3:不要(上長判断のみで通す場合)といったパターンのフラグなので、1とは限りません。
listとgetvalueの様な物を使用して111or133or113or131の行があればOK、みたいな処理が出来ればと思っているのですが、中々難しい物でしょうか。

#5 2020-06-19 12:38:08

Moz
Member

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

他に省かれている要素(要件)があるならすべて書いて下さい。

3つすべてが1以外でも、文字列として連結して111、133、113、131を PatternCount と List でカウント、
Aが1、Bが1または3、Cが3または3ならば1となるフィールドを追加などの方法で同様に処理できます。

A,B,Cを個別に処理しようとするからややこしいのであって、
ABCが同じレコードのフィールドならばまとめて考えれば良いでしょう。

Last edited by Moz (2020-06-19 12:39:10)

Offline

#6 2020-06-19 14:55:27

tarou
Guest

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

>Mozさん
申し訳ありません。
その他にフラグとして省いているものはありません。null~3がフラグとして使用するものとなります。

#7 2020-06-19 15:05:39

Moz
Member

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

上でも書きましたが

GetAsBoolean ( フラグ1 = 1 and
( フラグ2 = 1 or フラグ2 = 3 ) and 
( フラグ3 = 1 or フラグ3 = 3 ) )

というフィールドでレコードが承認と見なされるか判定してそれをMax関数で取得すれば1ならば
いずれかが承認されたとなると思いますが如何でしょう?

1つのレコードがフラグ1が1、フラグ2が1または3、フラグ3が1または3ならば承認とするという認識で合っています?

Offline

#8 2020-06-19 15:11:05

Shin
Member

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

フラグのいずれかが null、または 2 のレコードを除外するようなポータルフィルターを設定すればいいのでは。

Offline

#9 2020-06-19 15:14:27

Moz
Member

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

Shinさんの方法の1行ポータルを欄外につくっておいてレコード有無を判定すればフィールドも追加しなくて良さそうですね。

Offline

#10 2020-06-19 17:12:49

tarou
Guest

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

ありがとうございます。

一覧としては全件表示して、否認されたものも記録として置いておきたいので除外はしないでおきます。
確かに承認された見積書ポータル表示も便利ですね、必要ならそれはそれで使わせていただきます。

>1つのレコードがフラグ1が1、フラグ2が1または3、フラグ3が1または3ならば承認とするという認識で合っています?
はい。つまり、Mozさんの方法としてはフラグを立てるフィールドを計算フィールドにし、内容を

Max ( GetAsBoolean ( フラグ1 = 1 and
( フラグ2 = 1 or フラグ2 = 3 ) and 
( フラグ3 = 1 or フラグ3 = 3 ) ) )

とすれば良いという事でしょうか。

#11 2020-06-19 17:29:23

Moz
Member

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

現在のフラグフィールドは変更せず、新たに計算フィールドを追加するということです。
計算式は適宜実際のフィールドに従って書き換えて下さい。

まずはやってみましょう。

Offline

#12 2020-06-19 22:47:22

Shin
Member

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

評価するための構造を別に作れば、という事ですが、おそらく一番シンプルでしょうね。全件表示したければ、今のポータルを表示させておけばいいです。
評価のパターンが非常に多くなるので、合致するものを探す、というのは、それだけ手間がかかります、という事は、時間もかかる、バグも増える、という意味です。

Last edited by Shin (2020-06-20 08:48:27)

Offline

#13 2020-06-22 09:12:55

tarou
Guest

Re: 関連レコードで、どれかのレコードでフラグが全てオンになった場合の処理

ありがとうございます、やってみます。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 8 queries executed - Memory usage: 529.81 KiB (Peak: 550.35 KiB) ]