ラベル カスタムダイアログ の投稿を表示しています。 すべての投稿を表示
ラベル カスタムダイアログ の投稿を表示しています。 すべての投稿を表示

2016年1月24日日曜日

FileMaker   Get ( 最終メッセージ選択 )のデフォルト値のEscボタン反応に疑問

警告メッセージのボタンに対応する番号を返すスクリプトですが、
まだ直ってないので2年ぶりにUPするねー


どんな事かというと、
たとえば、新規レコード追加などでカスタムダイアログを出すようなとき
デフォルトでは"OK"が1、"キャンセル"が2になるのですが、
Enterを押すと当然OKが優先されます。
しかし、ダイアログを出した状態でEscボタンを押すと、キャンセルどころか、
1の”OK”を選んで新規レコードが追加されてしまうという現象。


(大したこと無いようで、開発者がこれを忘れてしまうと、けっこう
トラブります なぜかというとユーザーは他ソフトでもEscボタンに慣れてるから・・・)






ここでEscボタンを押すとレコードが新規で追加されてしまいます。
中身はというと、


こんなスクリプトで、ダイアログは



という感じで"OK"が優先されてるわけです。これはいいよね
優先を変えたければ、入替えればいいんです。

問題は、どうしてEscボタンをデフォルト値に反応させたか、なんですよ。

で、嫌なんですけど上の"OK"と"キャンセル"の位置を入替えて、データの確定は2のOKの方にチェックをふります。
スクリプトは

Get ( 最終メッセージ選択 ) = 2

にします。


これで
ダイアログを出してEnterを押すと、キャンセルが優先されます。
ダイアログを出した状態でEscボタンを押してもキャンセルされます。

(というか、Enter押してOKなら最初からダイアログなんて必要ないわけで、一旦注意を促す上で必要なんだけど、ダイアログ嫌いな僕でも、こういう場合は、キャンセルを優先させた方が安全かと思います)


ただ、他との兼ね合いで、"OK"と"キャンセル"の位置を変えるというのは
違和感、大ありなんですよねー



(新規レコードごときでは使わないかと思いますが、オリジナルでナビボタンなど作るとき、安易に新規レコードを増やしてもらいたくない場合や、頻繁に使うボタンの横に新規レコードボタンがある場合など、反応させてもキャンセル優先にしたい場合など)



2014年6月9日月曜日

第16回 自分で作ろう!弁護士向けソフト スクリプトとダイアログ

前回のスクリプトの動作合わせです。

① if if 構文




前回にも書いた通り、答えはさほど重要視してません。
構文が長くなろうと、多少違っていても自分で作ったもののほうが価値があります。
自分で思った通り書いてみて動いて始めて満足感が得られます

データが直接壊れず、
間接的な影響を受けず、
他の動作に影響を与えない

①でも動けばOK。理屈を知って行くために、あえて書いてます。
ただ、長くて書くのが大変だと思います。end ifで終わった後に、更にifから始まっています。

まず、スタートが

if [not IsEmpty(エントリー::事件名)]


Is Emptyはよく使いますので覚えておきましょう

notを入れる事によって「あれば」に変わります。
もし、事件名にデータが入っていれば・・・という意味です。

警告音を入れると「上書きしてもいいんですか?」という思いは伝わります


カスタムダイアログを表示
ここでダイアログを出しています。


if [Get(最終メッセージ選択)=1]
これは、カスタムダイアログのOKかキャンセルを選ぶ時、デフォルトでOKが1になっています。
OKを押したら次の構文に進むという意味です。


で、前回設定したフィールド設定を記載して、データを転記させる構文を入れています。

End if          (if [Get(最終メッセージ・・・・の end ifという意味)
End if        (if [not IsEmpty・・・・のend if)



で、更に

if [ IsEmpty(エントリー::事件名)]

もし、事件名にデータが入っていなければ・・・という意味です。

入っていなければフィールド設定を発動させます。

理屈を知る上ではこういったスクリプトから慣れていきます。

次・・・





② Elseを入れる



②は、①にElseで繋げたものです。

さっきとは逆で、もし事件名にデータが無ければ・・・を先頭にしています。

If [IsEmpty(エントリー::事件名)]の式も、Elseを入れる事によってひとつで済みます。

後の進み方はほぼ同じです。






③サブスクリプトを使う


これは、私がよくやる手法ですが、せっかく前回スクリプトを作っているので、
そのスクリプトを呼び出して構文を短く圧縮しています。(めんどくさがり)


スクリプト実行[「事件名転記スクリプト」] として呼び出しています。
サブスクリプトで、手間を省いた式にしています。

If [Get(最終メッセージ選択)=2]

2にしていますが、後ほど説明します。

サブスクリプトは、既にスクリプトとして登録されているものを呼び出して処理をする手法ですが、データが多い場合や、集計が含まれる場合、相当複雑な場合、また、サブスクリプトだらけにしてしまうと処理スピードが遅くなることもあります。
この程度のものなら、まったく問題はありません。





④Loopを使う
 



④は、ある方が作ったスクリプト。Loopを使って同じように動きます。(上級者ですね)
サブスクリプトも一行しか入れていません。

ひとつのサブスクリプトをLoopによって処理する方法です。

Loop~End Loopまでは上から順に回っている状態ですが、間にExit Loop If を入れる事によって、ループを止め、サブスクリプトを実行させています。

指定された計算式の結果が真(ゼロ以外の値)である場合に、ループを終了するという意味。


まず、
Exit Loop If [ IsEmpty(エントリー::事件名)]

で事件名にデータが無ければ、0から1になり、ループを止め、サブスクリプトを実行


次に(Elseは要りません)上をすり抜けたので0のままですが

カスタムダイアログを表示させ


再びExit Loop If で1を選択
Exit Loop If[ Get(最終メッセージ選択)=1]


で、ダイアログのOKを実行、いわゆるサブスクリプトを実行させ

現在のスクリプトを終了させています。

フィールド設定など複数の構文が入った時などは非常に楽だと思います。
ただ、Loopの使い方は慣れてからにしないと、止まらない事もあるので注意です。




⑤ orを使う



⑤も別の方が作ったスクリプト。
Sさんとは、たぶんあのSさんかと・・・活躍されているプロの方ですね。



#事件名にデータがあれば・・・

If [not IsEmpty(エントリー::事件名)]
カスタムダイアログ表示[・・・・・・・]
End if

#ここで止まったかのように思えるのですが、スクリプトは終了はしていません。


#無ければ・・・

If [ IsEmpty(エントリー::事件名)or Get(最終メッセージ選択)=1]

サブスクリプトの実行

End if



もうひとつSさんの高度なスクリプトがあるのですが、私がサブスクリプトでまとめたので、分かりずらいものにしてしまいました。

たぶん、③くらいが出来れば問題なく動きます。


まだまだ、沢山の方法があるでしょうが、きりがないので
まずは理屈を理解しましょう。




もうひとつは、ダイアログなのですが、




デフォルトではOKボタンが優先されます。(アクティブ化、もしくはスポットが当たる)
間違ってEnterキーを押すと上書きされてしまいます。

ダイアログは何の為に出しましたか?という事になってしまいます。

また、私も長年気が付かなかったのですが、Escキーを押すと、このままではデータが入力、上書きされてしまいます。

スクリプトを中断する時にEscで止めるという理屈に合わない動作なんですね。
(たぶん、よろしくないですね・・・)

そこで、



キャンセルボタンにスポット(優先、もしくはアクティブ化)を当てれば、間違ってEnterキーを押しても、Escを押してもキャンセルされます。
「上書きしますか?」という事は、上書きされると困るかも・・・という意味なので、キャンセルを優先させましょう。





デフォルト(初期値)では
OKとキャンセルが上の絵の逆なのですが、このように位置を変え、OKが1であったものを
OKを2の場所に設定します。(チェックを入れる)

ですから③の

If [Get(最終メッセージ選択)=2]

という意味は、OKボタンを2に変えましたという意味です。

これで、誤作動が防げます。






ダウンロード

(FileMakerPro12以上が必要です




2014年6月8日日曜日

第15回 自分で作ろう!弁護士向けソフト スクリプトとダイアログ

もっと後でと思ったのですが・・・。

先日、他所でとてもピッタリ合う良い例題がありましたので、
ダイアログ(別窓)とスクリプトについて書こうと思います。

(ソフト開発の進捗がゆっくりですが、コツコツいきましょう)




前回、データを転記させるスクリプトを書きました。
それは単にデータを転記させたものであって、誤って操作中にボタンを押してしまうと、データが既にある場合でも、別のデータに上書きされてしまいます。



今回は、万が一ボタンに触れた時、そこに警告を出して、「OK]か「キャンセル」で選択をさせ、データの安全をはかろうということです。

ダイアログは、スクリプトの実行確認や警告、ヘルプ、データの入力など幅広く使えます。




フィールド設定[エントリー::事件名;設定Mt小分類::小分類名]
フィールド設定[エントリー::民刑区分;設定Mt小分類::大分類名]
フィールド設定[エントリー::裁判所;設定Mt小分類::裁判所]

フィールド設定[エントリー::符号;設定Mt小分類::符号]


このスクリプトの中に
「カスタムダイアログを表示」を選択し何処かに入れます。

if文を使った条件式は使います。

関数リファレンス



条件は

事件名のフィールドが空の場合、そのままデータを入れる。
事件名のフィールドに既に情報が入ってる場合、カスタムダイアログを出し「上書きしますか?」の警告、選択させる
上書きの場合はデータを入れ、キャンセルの場合は、そのままスクリプトを終了




これを作る方は、プログラマやSEではありませんので、スクリプトの技を考えず、思った通り、自由に作ってみましょう。


自分独自のスクリプトを書く満足感がないと、この先に進んでいかないと思います。

答えはさほど重要視してません。
構文が長くなろうと、多少違っていても自分で作ったもののほうが価値があるでしょう。


データが直接壊れず、
間接的な影響を受けず、
他の動作に影響を与えない

ものになれば、第一段階はクリアです。

カスタムダイアログや条件式、関数などは今後沢山出てきます。(スクリプトだらけです)

是非、前回のダウンロードをして独自のものを作ってみて下さい。




動作合わせは次回にしましょう。




Associatron (アソシアトロン)連想記憶

  なぜか、僕のブログの研究所側ではなく、FileMaker側にヒットするので アソシアトロン Associatron研究 リンクを貼っておきます。 研究と実験詳細 https://cside-associatron.blogspot.com/ 公開実験(JavaScriptのみ...