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

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

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

You are not logged in.

Announcement

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


#1 2015-11-19 09:30:54

初心者FMプログラマ
Guest

教えてください。

いつも、参考にさせていただいています。
早速ですが、質問です。
私は現在、ある会社でファイルメーカーを使用した基幹プログラムの
作成に従事しています。
前担当者が不幸にも急逝してしまい私が急きょ担当することに
なりました。
そこで、全システムの解析と解読をすることになり
調べていたら、下記のような構文が出てきました。

--------------------------------------------------------------------------
Let([
dt0=Get(日付);
dt1=ToDoカレンダー::開始日;
prm=Get(スクリプト引数)
];
Case(
Abs(prm)=1 and not(IsEmpty(dt1)); Date(Month(dt1)+prm;1;Year(dt1));
prm=0 or IsEmpty(dt1); Date(Month(dt0);1;Year(dt0))
)
)
----------------------------------------------------------------------------
この構文は、スクリプトステップ『フィールド設定』の『計算結果』の中に書かれていて
日付タイプのフィールドに設定を行っています。
この構文を実行すると日付フィールドには『○○○○年○○月』と表示されます。
前担当者が仕様書の類を何も残していないので全く何をしているのか
わかりません。一応VBの経験があるのですが
『Left関数でこんな組み方できるんだっけ?』という状態です。
どなたか解読できる方がいましたら、ご教授ください。
当方の環境は、
OS       :Win7
FMバージョン:FM11Pro
対象ソフトは、スケジュール管理ソフトでカレンダー表示されている月部分が
対象のフィールドです。
よろしくお願いします。

#2 2015-11-19 09:48:11

旅人
Member

Re: 教えてください。

Left関数ではなくLet関数ですよ。詳しくは論理関数のヘルプで。

Offline

#3 2015-11-19 15:29:44

初心者FMプログラマ
Guest

Re: 教えてください。

返信ありがとうございます。

旅人 wrote:

Left関数ではなくLet関数ですよ。詳しくは論理関数のヘルプで。

おお!!LeftではなくLetでしたか。最初に見たときにLeftと思い込んでしまって
それ以降、思考が止まっていました。
Let関数とは、指定した式を変数として設定しその変数を用いて計算し
その結果を返す。
という関数ですよね。
それを踏まえて構文を読み解くと
前半分分の『[]』ないで変数を指定。これでいうと『dt0・dt1・prm』が
それにあたるわけですね。
そこに、Get関数などで値を設定して『[]』以降のCaseで月を生成してる
感じでしょうか?
Absでprmの絶対値を取った結果とdt1の内容によってCaseの結果を
変えている。
これであってますかね?

#4 2015-11-19 15:43:19

旅人
Member

Re: 教えてください。

そんな感じですけどDate関数の日が1ですから、月を生成ではなく年〇月1日を出すのではないのかな。
結果の日付フィールドは日を表示しないよう設定されている?

Offline

#5 2015-11-19 15:44:20

チポ
Member

Re: 教えてください。

考え方はおおむねその通りですが、
返る値は日付ですよ。


prm=Get(スクリプト引数)

このスクリプトを起動する、
他のスクリプトか、
ボタン
でスクリプトパラメータが設定されているはずです。

  Get(スクリプト引数)
はその値を得ています。

その先を突き止めないと全体の考え方が分からないでしょう。

Offline

#6 2015-11-19 17:39:38

初心者FMプログラマ
Guest

Re: 教えてください。

多数の返信ありがとうございました。
あの後も、解読を続けました。

旅人 wrote:

そんな感じですけどDate関数の日が1ですから、月を生成ではなく年〇月1日を出すのではないのかな。
結果の日付フィールドは日を表示しないよう設定されている?

旅人様、ありがとうございました。
この処理が、設定されているフィールドはカレンダー表示されている一番上の項目に対してで
実行すると『○○○○年○○月のスケジュール』と表示されます。
フィールドのインスペクタを見ると『データの書式設定』で日が『のスケジュール』を表示するように設定されていますね。
どうやらこれを作成するためのスクリプトのようです。

チポ wrote:

prm=Get(スクリプト引数)
このスクリプトを起動する、
他のスクリプトか、
ボタン
でスクリプトパラメータが設定されているはずです。

チポ様、ありがとうございました。
このスクリプトが設定されているのは、スケジュールの『前月・当月・次月』ボタンに設定されていて
どうやら、月を1か月ごとに前後に送るボタンに設定されています。
これにより、フィールドの値が変わるとカレンダーの表示も変わるようになっているようです。

とりあえず、この構文については解読ができたようです。
ありがとうございました。
まだ、わからない構文がありますのでその時はまたよろしくお願いします。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 516.99 KiB (Peak: 521.53 KiB) ]