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

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

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

You are not logged in.

Announcement

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


#1 2022-11-16 10:29:49

はしご
Guest

自動計算値のタイミングがわかりません。

メールを受信出来るプラグインを使用し、メールを受信(レコードが追加)されたタイミングで正規表現で抜き出したテキストを
計算フィールドではなく、テキストフィールドに自動で取得したいという質問をした際に、こちらでの掲示板で
Case ( IsEmpty ( B ) ; A )を教えて頂きました。
参考にさせていただきまして実際試したのは、
Case ( not IsEmpty ( B ) ; A )にしまして、
Bのフィールドに値が入ったら、Aに計算結果を戻す
というものです。
Bフィールドもメールで受信されるものになります。
実行しました所、自動で取得したいフィールドが3つあり、一番最後のフィールドだけは、自動で取得出来るのですが、
最初に設置した、2つのフィールドの取得が出来ないのです。
3つ目のフィールドを削除すると、2つ目のフィールドのみ自動取得出来ます。
計算フィールドの非保存にすると全て取得出来ます。
計算値の自動取得のトリガーといいますか、ルールーの様なものがわかりません。
お分かりでした教えてください。宜しくお願い致します。

#2 2022-11-16 10:37:14

himadanee
Guest

Re: 自動計算値のタイミングがわかりません。

Case ( not IsEmpty ( B ) ; A )にしまして、
Bのフィールドに値が入ったら、Aに計算結果を戻す

ちょっと違いますよ。その式は、
Bのフィールドに値が入っていたら、A(のフィールドの値)を計算結果として戻す
です。どのフィールドに戻るかは、計算式を設定する場所によります。


計算フィールドの計算順番は、基本的にはフィールドを定義した順だと思います。
計算式で他のフィールドを参照している場合は、そのフィールドの値が変わった時に再計算されます。

計算値自動入力で計算が循環していると、全部空になったりしたような記憶が。

#3 2022-11-16 11:00:18

はしご
Guest

Re: 自動計算値のタイミングがわかりません。

himadaneeさんありがとうございます。
すみません。まちがってました。
Case ( not IsEmpty ( B ) ; A )にしまして、
Bのフィールドに値が入ったら、そのフィールドにAの計算結果を戻す
でした。失礼いたしました。
自動計算が複数ある場合には、自動計算では取得できないということなのでしょうか。
やはり、この場合一度非保存の計算式で取得し、全置換でフィールドに格納するしかないのでしょうか。



himadanee wrote:

Case ( not IsEmpty ( B ) ; A )にしまして、
Bのフィールドに値が入ったら、Aに計算結果を戻す

ちょっと違いますよ。その式は、
Bのフィールドに値が入っていたら、A(のフィールドの値)を計算結果として戻す
です。どのフィールドに戻るかは、計算式を設定する場所によります。


計算フィールドの計算順番は、基本的にはフィールドを定義した順だと思います。
計算式で他のフィールドを参照している場合は、そのフィールドの値が変わった時に再計算されます。

計算値自動入力で計算が循環していると、全部空になったりしたような記憶が。

#4 2022-11-16 12:53:49

himadanee
Guest

Re: 自動計算値のタイミングがわかりません。

>Bのフィールドに値が入ったら、そのフィールドにAの計算結果を戻す
そのフィールドとは?Bじゃないですよね?これ以前に何もないのでBとしか解釈できませんが
空欄かAと同じ値にしかならないので、ちょっと意味が解りません。

具体的な計算式がないので「自動計算が複数ある場合には、自動計算では取得できない」かどうか判断できません。同じ式を3つのフィールドに使ったわけではないですよね?

Case ( not IsEmpty ( B ) ; A )
この式は、フィールドはAとBの2つしか使ってませんので、その2つが変更されたとき(その前に、レコードが作成されたときも変更とみなされる)にしか計算されません。

「プラグインを使用し」ですから、そのプラグインの動作がどういうものかも関係します。
レコードのインポート時には計算するかどうかフィールドごとに指定可能ですから、計算しないこともあり得ます。

#5 2022-11-16 13:18:08

はしご
Guest

Re: 自動計算値のタイミングがわかりません。

himadaneeさん
有難うございます。

Case ( not IsEmpty ( name_戻り値 ) ; iill_rxGetMatchGroups( Mail::name_target ))
上記の計算を対象のフィールドに自動計算値でいれていました。

メールを受信してレコードが増えると、本文のテキストから自動計算値で「name_戻り値」が入ります。
対象のフィールドは、さらにname_戻り値にはいったら、 iill_rxGetMatchGroups( Mail::name_target )の
計算結果を出したいのですが。
これと同じフィールドが
Case ( not IsEmpty ( mail_戻り値 ) ; iill_rxGetMatchGroups( Mail::mail_target ))
Case ( not IsEmpty ( address_戻り値 ) ; iill_rxGetMatchGroups( Mail::address_target ))
と3つあります。
それぞれ_戻り値の値は自動計算値で入りますが、このフィールドの値だけが、
一番下のフィールドだけにしか値が入りません。

3つの場合
Case ( not IsEmpty ( name_戻り値 ) ; iill_rxGetMatchGroups( Mail::name_target )) ←入らない
Case ( not IsEmpty ( mail_戻り値 ) ; iill_rxGetMatchGroups( Mail::mail_target ))   ←入らない
Case ( not IsEmpty ( address_戻り値 ) ; iill_rxGetMatchGroups( Mail::address_target ))  ←入る
2つの場合
Case ( not IsEmpty ( name_戻り値 ) ; iill_rxGetMatchGroups( Mail::name_target )) ←入らない
Case ( not IsEmpty ( mail_戻り値 ) ; iill_rxGetMatchGroups( Mail::mail_target ))   ←入る
という具合に一番最後の計算値のみ値がでます。
すみませんが何か分かれば、お願いします。



himadanee wrote:

>Bのフィールドに値が入ったら、そのフィールドにAの計算結果を戻す
そのフィールドとは?Bじゃないですよね?これ以前に何もないのでBとしか解釈できませんが
空欄かAと同じ値にしかならないので、ちょっと意味が解りません。

具体的な計算式がないので「自動計算が複数ある場合には、自動計算では取得できない」かどうか判断できません。同じ式を3つのフィールドに使ったわけではないですよね?

Case ( not IsEmpty ( B ) ; A )
この式は、フィールドはAとBの2つしか使ってませんので、その2つが変更されたとき(その前に、レコードが作成されたときも変更とみなされる)にしか計算されません。

「プラグインを使用し」ですから、そのプラグインの動作がどういうものかも関係します。
レコードのインポート時には計算するかどうかフィールドごとに指定可能ですから、計算しないこともあり得ます。

#6 2022-11-16 16:42:05

himadanee
Guest

Re: 自動計算値のタイミングがわかりません。

Case ( not IsEmpty ( name_戻り値 ) ; iill_rxGetMatchGroups( Mail::name_target ))
上記の計算を対象のフィールドに自動計算値でいれていました。

最初に書いてる式と全然違うじゃないですか...

Case ( not IsEmpty ( B ) ; A )にしまして、
Bのフィールドに値が入ったら、Aに計算結果を戻す

Bがフィールドなので当然Aもフィールド名の仮称かと思ってましたが...

これはプラグインの関数なので、プラグインの説明書を見ないと、どういう動作をするかは何とも言えません。

設定しているテーブルと関数で参照しているテーブルも別物のようですが、リレーションには問題ないんでしょうね。(1つは取得できるというんで)

ぐぐってみると、ここに説明があります。
https://manual-mailmakerpop.joy-h.com/s … tchgroups/
「iill_rxRegexMatch( Regex ; source ) を実行後、マッチした文字列の指定グループの値を返します。」と書いてありますが、それはどこでやってますか?
使ってる正規表現は?
Mail::~の各フィールドに入っている値は?

#7 2022-11-16 17:23:28

はしご
Guest

Re: 自動計算値のタイミングがわかりません。

himadaneeさん 有難うございます。

>設定しているテーブルと関数で参照しているテーブルも別物のようですが、リレーションには問題ないんでしょうね。(1つは取得できるというんで)
同テーブル内になってましたですのでMail: はいらないですね
もともとあったスクリプトの計算式をそのままフィールドに使用してので、すみませんでした。

>Mail::~の各フィールドに入っている値は?
name
mail
address
です。

>どこでやってますか?
テーブル Mail です

>使ってる正規表現は?
それぞれ
\[ name\ ]\s?(?<name>.*?)\s
\[ mail\ ]\s?(?<mail>.*?)\s
\[ address\ ]\s?(?<address>.*?)\s
です。



himadanee wrote:

Case ( not IsEmpty ( name_戻り値 ) ; iill_rxGetMatchGroups( Mail::name_target ))
上記の計算を対象のフィールドに自動計算値でいれていました。

最初に書いてる式と全然違うじゃないですか...

Case ( not IsEmpty ( B ) ; A )にしまして、
Bのフィールドに値が入ったら、Aに計算結果を戻す

Bがフィールドなので当然Aもフィールド名の仮称かと思ってましたが...

これはプラグインの関数なので、プラグインの説明書を見ないと、どういう動作をするかは何とも言えません。

設定しているテーブルと関数で参照しているテーブルも別物のようですが、リレーションには問題ないんでしょうね。(1つは取得できるというんで)

ぐぐってみると、ここに説明があります。
https://manual-mailmakerpop.joy-h.com/s … tchgroups/
「iill_rxRegexMatch( Regex ; source ) を実行後、マッチした文字列の指定グループの値を返します。」と書いてありますが、それはどこでやってますか?
使ってる正規表現は?
Mail::~の各フィールドに入っている値は?

#8 2022-11-17 09:26:55

himadanee
Guest

Re: 自動計算値のタイミングがわかりません。

せっかく書いてもらいましたが、このプラグインは有料ソフトなので、そっちのサポートで質問した方がよさそうです。
https://manual-mailmakerpop.joy-h.com/s … tchgroups/
の「例」が間違ってるように見えますね。(グループ名がつけられてない)

「どこ」というのはスクリプトか別のフィールドかあるいはそれ以外か、という話だったんですが
一つ言えることは、「「iill_rxRegexMatch( Regex ; source ) を実行後、マッチした文字列の指定グループの値を返します。」」なので、iill_rxGetMatchGroupsを実行する前に必ずiill_rxRegexMatch( Regex ; source ) が必要ということです。
フィールド計算式にiill_rxGetMatchGroupsを使うなら、Matchもそこに入れた方が確実なのでは、ということ(Matchの結果がいつまで保存されてるかは不明)

#9 2022-11-17 09:47:53

はしご
Guest

Re: 自動計算値のタイミングがわかりません。

himadaneeさん
いろいろ教えて頂き有難うございます。
質問してみます。


himadanee wrote:

せっかく書いてもらいましたが、このプラグインは有料ソフトなので、そっちのサポートで質問した方がよさそうです。
https://manual-mailmakerpop.joy-h.com/s … tchgroups/
の「例」が間違ってるように見えますね。(グループ名がつけられてない)

「どこ」というのはスクリプトか別のフィールドかあるいはそれ以外か、という話だったんですが
一つ言えることは、「「iill_rxRegexMatch( Regex ; source ) を実行後、マッチした文字列の指定グループの値を返します。」」なので、iill_rxGetMatchGroupsを実行する前に必ずiill_rxRegexMatch( Regex ; source ) が必要ということです。
フィールド計算式にiill_rxGetMatchGroupsを使うなら、Matchもそこに入れた方が確実なのでは、ということ(Matchの結果がいつまで保存されてるかは不明)

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 595.24 KiB (Peak: 612.15 KiB) ]