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

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

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

You are not logged in.

Announcement

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


#1 2020-04-30 10:47:57

どうもり
Guest

入力値の制限:計算式で制限に入力すべき計算式について

こんにちは、お世話になっております。

フィールドオプションの入力値の制限タブ、計算式で制限についてなのですが、
どのような計算式を用意すれば良いのか皆目検討もつきません。
公式のテキストを読んでいるのですが、計算式と一致する場合とだけ書かれており、
どんな計算式を用意すれば良いのか分かりません。
具体的には下記のような制限をかけたいと思っています。


●テーブル内容
フラグフィールド 数値
発送時刻 時刻

●制限内容
制限は「発送時刻」フィールドに対してかけています。下記の2つが要件です。
・フラグフィールドが1の時、発送時刻に入力を要求
・フラグフィールドが1以外の時、発送時刻は空白

●試したもの
1) if( ( フラグフィールド = 1 ) and ( 発送時刻 ≠ "" ) ; 1 ; 0 )
計算結果が論理値固定になっていたため(何故?)、
正しいデータの時は1、不正なデータの時は0を返すようにしています。

2) if( フラグフィールド ≠ 1 ; "" )
フラグフィールドが1以外の時、返り値""が「発送時刻」フィールドと
一致していればOKという感じかなと思ってこのような計算式を書いています。

試したものはどちらもちゃんと動かなかったのですが、
この入力値を計算式で制限したいときの計算式はどう書けば良いのでしょうか。
普通公式のテキストにこういうサンプルは載っていると思うのですが、見落としなのでしょうか?

よろしくお願いします。。

#2 2020-04-30 11:15:33

Chikutaku
Guest

Re: 入力値の制限:計算式で制限に入力すべき計算式について

少し内容がまだ把握できてません...

ただ思ったのはこういう制限方法はあまり得策では無い気がしますが、
一旦私はこういった制限にしてみました。

Case ( 
 フラグフィールド = 1 ; "" ;
 フラグフィールド ≠ 1 ; 1
 )

https://dl.airtable.com/.attachments/4e … 1e8.fmp12/
サンプルです。
良ければお使いください。

#3 2020-04-30 11:20:09

Chikutaku
Guest

Re: 入力値の制限:計算式で制限に入力すべき計算式について

サンプルのURLがダメでした。
これでは無理ですかね。
発送時刻.fmp12

#4 2020-04-30 11:41:23

Shin
Member

Re: 入力値の制限:計算式で制限に入力すべき計算式について

flag は、0 または 0以外 で使ったほうが扱いが楽ですよ。

fflag =1 xor isempty ( self )
でいいのでは。

Offline

#5 2020-04-30 16:29:03

himadanee
Guest

Re: 入力値の制限:計算式で制限に入力すべき計算式について

文章をそのまま計算式にすれば
Case ( フラグフィールド=1 ; not IsEmpty (発送時刻) ; IsEmpty (発送時刻) )

#6 2020-05-01 02:54:20

どすこい
Guest

Re: 入力値の制限:計算式で制限に入力すべき計算式について

●全体の返信
みなさんありがとうございます。
今回のメインの間違いは""を使った点なのかなと理解しました。
isEmptyで以前のコードもだいたい正しく動きました。
(一部正しく動かないコードがありましたが、そちらは下記。)

●個別の返信

Chikutaku wrote:
Case ( 
 フラグフィールド = 1 ; "" ;
 フラグフィールド ≠ 1 ; 1
 )

https://dl.airtable.com/.attachments/4e … 1e8.fmp12/
サンプルです。
良ければお使いください。

サンプル本当にありがとうございます。大変助かりました。

Shin wrote:

flag は、0 または 0以外 で使ったほうが扱いが楽ですよ。
fflag =1 xor isempty ( self )

ありがとうございます。
一旦今回の条件文について理解できたらその点の修正を加えたいと思います。
ifやcaseを使わずとも良いというのが新知識でした。できないものだと思ってました。
またisEmpty()についても知りませんでした。ありがとうございます。

himadanee wrote:

Case ( フラグフィールド=1 ; not IsEmpty (発送時刻) ; IsEmpty (発送時刻) )

isEmpty()を教えていただきありがとうございます。しっくりきました。


●うまく作動しないデータについて
みなさんから教えていただいた方法を下記の通り実装しました。

https://drive.google.com/file/d/1z-jqxU … sp=sharing

うまく動いているのですが、
フラグフィールドのみを修正して不正なデータを作った際に、
エラーを吐かないケースがあり困っています。

①フラグ=1かつ発送時刻に入力ありで一旦確定 → フラグを0に変更した場合に有効なデータとみなされてしまう
②フラグ=0かつ発送時刻に入力なしで一旦確定 → フラグを1に変更した場合に有効なデータとみなされてしまう

①はいただいたサンプルコード全てがそうなってしまい、
②はchikutakuさん以外の方のコードがそうなってしまいます。

これは回避できないのでしょうか。
お忙しい中恐縮です。よろしくお願いします。。

#7 2020-05-01 07:05:40

himadanee
Guest

Re: 入力値の制限:計算式で制限に入力すべき計算式について

制限の画面で一番上のラジオボタンを「常時」にしないと、設定されているフィールドの値が変更された時しかチェックされません。

#8 2020-05-01 09:05:28

チポ
Member

Re: 入力値の制限:計算式で制限に入力すべき計算式について

発送時刻の入力値の自動化・既存値置き換えで、
  フラグフィールドが1以外の時、発送時刻は空白
を加えればいいのでは。

こうすれば、フラグが1以外を入力したときに、
発送時刻は空白になります。

Offline

#9 2020-05-01 09:51:11

どう
Guest

Re: 入力値の制限:計算式で制限に入力すべき計算式について

himadanee wrote:

制限の画面で一番上のラジオボタンを「常時」にしないと、設定されているフィールドの値が変更された時しかチェックされません。

ありがとうございます。
「常時」にしているのです。。それなのにチェックされないため何故なんだろうと思っています。
何か基本的なところで間違いをしてるのかもしれません。

チポ wrote:

発送時刻の入力値の自動化・既存値置き換えで、
  フラグフィールドが1以外の時、発送時刻は空白
を加えればいいのでは。

なるほど、自動化と制限の組み合わせですね。どうしようもない時はそちらを試してみたいと思います。



ただ後学のために常時チェックの方法を知っておきたいです。かなり基本的なところだと思うのですが、
「常時」にしてもチェックがされないとしたらちょっと困る場面が出てきそうなので......。
すみませんが原因のわかる方がいらっしゃいましたらご回答よろしくお願いします。。

#10 2020-05-01 10:14:07

チポ
Member

Re: 入力値の制限:計算式で制限に入力すべき計算式について

入力値の制限は、レコードが確定したときに評価されます。

ですから、制限に掛かる値を入力しても、
他のフィールドを選択、入力しているあいだは評価されません。

フィールド以外をクリックとか、他のレコードに移ろうとしたときに評価されます。

ではないのかな・・?

Offline

#11 2020-05-01 11:20:35

どう
Guest

Re: 入力値の制限:計算式で制限に入力すべき計算式について

チポ wrote:

入力値の制限は、レコードが確定したときに評価されます。

ですから、制限に掛かる値を入力しても、
他のフィールドを選択、入力しているあいだは評価されません。

フィールド以外をクリックとか、他のレコードに移ろうとしたときに評価されます。

ではないのかな・・?

ご返信ありがとうございます。
自分もその認識で、フィールド以外をクリックした際にレコードが確定され評価されると考えていました。

ただ、こちらのリンク

https://drive.google.com/file/d/1z-jqxU … sp=sharing

で作成したFMファイルではそういう挙動をしてくれておらず、何故なんだ。。と頭を抱えています。
レイアウトの作り方とか変なところで悪さしているのかもしれません。

まあ原則として、

①入力値の制限はレコードの確定時
②「常時」にチェックを入れておけば他の値が更新された場合でもチェックが入る
③入力値制限の計算式には評価式を直に入力できる

というところを確認させていただけましたので、今回はこれでもう解決ということで良いかなとも思っています。
もし上のファイルを確認いただいて、ここ変だよとわかった方がいらっしゃればコメント頂けるとありがたいです。
特になくとも、後日解決タグをつけておきます。。

色々と手取り足取りありがとうございました。大変助かりました。

#12 2020-05-01 11:50:57

チポ
Member

Re: 入力値の制限:計算式で制限に入力すべき計算式について

ファイルは見ていません。

スクリプトを使っているのでは?
そのスクリプトを、トリガ OnObjectExit で実行させれば、
フィールドをでたときに何でもできますよ。

私は入力値の制限は使わずにもっぱらこれです。

Offline

#13 2020-05-01 12:07:51

Shin
Member

Re: 入力値の制限:計算式で制限に入力すべき計算式について

フラグフィールドと、時刻フィールドのどちらにも上の制限を設定すれば、入力時のチェックだけでいいです。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 549.67 KiB (Peak: 570.58 KiB) ]