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

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

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

You are not logged in.

Announcement

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


#1 2021-05-02 15:26:34

Oda123
Member

スクリプトのIFの挙動がおかしい

スクリプトでIF文を使い4つの条件分岐をしているのですが、
例えば条件2に入った後、最初のステップに戻る場合があります。
(デバックモードで確認しました。)
Else if文で書き直してみましたが同じような挙動をする場合があり、変わりませんでした。
単純に「始めの処理→条件にあった時の処理→終わりの処理」としたいのですが、
どうしたら良いでしょうか?

ランダムにカードの色と文を変えるアプリで
オブジェクトタイプのフィールド(フィールド名&オブジェクト名:card1~4)で、
「入力値の自動化:計算式:$$card1」として、
条件付き書式で「値が”赤”に等しいとき:塗りつぶし」のように場合分けをして、
スクリプトトリガで押したときにスクリプトが動くようにしています。

フィールドClrは繰り返しフィールドで「赤、青、黄、緑」としています。

スクリプトは以下です
Set Variable [$cardRnd; Value:Int ( Random * 4)+1]
Set Variable [$colorRnd; Value:Int ( Random * 4)+1]
If [$cardRnd = 1]
    Set Variable [$$cardColor1; Value:GetRepetition ( helloworld::Clr ; $colorRnd )]
    Set Variable [$$crdTxt1; Value:GetRepetition ( helloworld::Clr ; $colorRnd )]
    Insert Calculated Result [Selecthelloworld::Card1[]; $$Cardcolor1]
    Refresh Object [Object Name: : "card1"]
End If
If [$cardRnd = 2]
    Set Variable [$$cardColor2; Value:GetRepetition ( helloworld::Clr ; $colorRnd )]
    Set Variable [$$crdTxt2; Value:GetRepetition ( helloworld::Clr ; $colorRnd )]
    Insert Calculated Result [Selecthelloworld::Card2[]; $$Cardcolor2]
    Refresh Object [Object Name: : "card2"]
End If
If [$cardRnd = 3]
    Set Variable [$$cardColor3; Value:GetRepetition ( helloworld::Clr ; $colorRnd )]
    Set Variable [$$crdTxt3; Value:GetRepetition ( helloworld::Clr ; $colorRnd )]
    Insert Calculated Result [Selecthelloworld::Card3[]; $$Cardcolor3]
    Refresh Object [Object Name: : "card3"]
End If
If [$cardRnd = 4]
    Set Variable [$$cardColor4; Value:GetRepetition ( helloworld::Clr ; $colorRnd )]
    Set Variable [$$crdTxt4; Value:GetRepetition ( helloworld::Clr ; $colorRnd )]
    Insert Calculated Result [Selecthelloworld::Card4[]; $$Cardcolor4]
    Refresh Object [Object Name: : "card4"]
End If
Commit Records/Requests []
Refresh Window []

Offline

#2 2021-05-02 20:04:58

himadanee
Guest

Re: スクリプトのIFの挙動がおかしい

「スクリプトトリガで押したときにスクリプトが動くようにしています」
これが間違いです。「押したとき」というトリガはありません。

最初に戻ってるんではなく、終わったあともう一度実行されてるのでは。

#3 2021-05-02 21:58:44

Oda123
Member

Re: スクリプトのIFの挙動がおかしい

説明しづらかったので動画を撮ってみました
https://youtu.be/jRIq9EqIXWE

動画のように、ステップが飛んでほしくないところで飛んでしまいます。

スクリプトトリガはOnObjectEnterで設定しています。

Offline

#4 2021-05-02 22:26:09

himadanee
Guest

Re: スクリプトのIFの挙動がおかしい

ObjectEnterは「押した」でなく「入った」なので、「計算結果を挿入」で実行されてしまいます。

#5 2021-05-07 13:28:09

himadanee
Guest

Re: スクリプトのIFの挙動がおかしい

特別な理由がない限り、「計算結果を挿入」より「フィールド設定」を使う方がいいでしょう。

#6 2021-05-07 13:42:39

Shin
Member

Re: スクリプトのIFの挙動がおかしい

計算結果を挿入でしたら、そのフィールドに入ることになるので、トリガーが起動します。
また、End If
If [$cardRnd = 2]
ではなく、
else If [$cardRnd = 2]
にしたほうが、効率が良くなるのでは。

Offline

#7 2021-05-08 00:27:52

Shin
Member

Re: スクリプトのIFの挙動がおかしい

ちょっと可読性は落ちますが、$$cardColor と $$crdTxt を繰り返し変数に置き換えて、If の中身は、
フィールドを名前で設定[
    Let (
        $cardRnd = Int ( Random * 4)+1 ;
        “Selecthelloworld” & $cardRnd & “[]”
    ) ;
    Let (
    [
        $colorRnd = Int ( Random * 4)+1 ;
        $$cardColor[$cardRnd] = helloworld::Clr[$colorRnd] ;
        $$crdTxt[$cardRnd] = helloworld::Clr[$colorRnd]
    ] ;
        $$Cardcolor[$cardRnd]
    )
]
で置き換える事が出来るかも。(未検証ですが)

Last edited by Shin (2021-05-08 13:22:24)

Offline

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: 513.83 KiB (Peak: 518.73 KiB) ]