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以上が必要です




0 件のコメント:

コメントを投稿

最適化してますか?

 まるで入院していた患者が退院して元気に復活するような機能。 クラウドを使用するユーザーさんがほとんどなのですが、このゴールデンウィーク中は 最適化のメンテしときます。 データがピチピチしちゃいますよぅ。