• ベストアンサー

FMPro7で繰り返しフィールドの繰り返し数を変数で設定できますか?

スクリプトの「フィールド移動」や「計算結果の挿入」などではフィールド指定ダイアログに繰り返し数の入力があります。「フィールド移動」や「計算結果の挿入」をする直前に参照したい繰り返し数を計算で求め、グローバルフィールドに保存しているような場合はどのように参照したらいいのでしょう。 「計算結果の挿入」でフィールド指定はしないで、GetRepetition ( 繰り返しフィールド ; 保存されたグローバルフィールド ) = "○"を設定するなどしてみたのですが、うまく出来ません。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • a2c_2005
  • ベストアンサー率49% (29/59)
回答No.3

>会議室をポータルにする場合、会議室テーブルの定義はどんな感じでしょうか? 日付+会議室番号+Noでリレーキーをもちます。 リレーキー_1 という計算フィールドには  日付 & 会議室番号 & "1" という計算式をいれ、これを50個(& "1"& "1"の部分を2.3.4.5....50としていく)作ります。 それをキーとして予約テーブルと50個リレーションをはります。 リレーションの先、予約テーブルはこのようになります。 例えば2005/3/5の9:00~10:00まで第一会議室の予約があるとすると、予約テーブルには 20053511¶ ┐ 20053512¶ │ 20053513¶ ├一個のフィールドです 20053514¶ │ 20053515¶ │ 20053516  ┘ というリレーキーのフィールド(内容はスクリプトで自動入力します)と予約社名(例:○×商事様)のフィールドを持たせます。 これで予約台帳テーブルで表レイアウトの横一行に50個のポータルを並べて(ポータル行は1です)ポータルの中に予約社名フィールドを入れれば、どの会議室のどの時間がだれで埋まってるかがわかるようになります。 ちょっとこれ以上は説明が難しいですね。。。 参考にしてください

yuuki_555
質問者

お礼

週末にチャレンジしてみました。とても参考になりました。私が行ったテーブル定義ですと、タイムテーブルを時間をNo.で表現したテーブルに複数のレコードに分ける方法でインポートすると、範囲指定した全ての会議室の時間枠を自動作成出来ます。このマトリクスもかなり検索しやすいように思われました。スクリプトでとりあえず会議室10部屋、時間枠50区切りで500個のIF文を配置しましたが、スピードは遅くはなかったです。ネットワーク経由になると遅くなってしまうのかもしれませんが…。とにかくリレーションがACCESSとあまりににも違うことを実感しました。ありがとうございました。

その他の回答 (2)

  • a2c_2005
  • ベストアンサー率49% (29/59)
回答No.2

お~! それはまた、、、我々デベロッパークラスの使い方をされていますね(^^; それを繰り返しでやるのは難しいです。 基本は予約テーブルと予約台帳テーブルをリレーションで結んでやるのがいいかと思います。 予約台帳テーブルは(おそらく)今は日付で1レコードもっていて、1レコードに各会議室の繰り返しがあると思うんですが、ちょっと発送を転換して予約台帳テーブルを日付+会議室を1レコードにして(すなわち1日5レコードづつ出来るってことです)必要な日付の会議室1~5のレコードを検索して表レイアウトで表示します。 でもって繰り返しではなくポータルで表示するときれいにいくんですが。。。 ちょっと文章では説明しきれないですね(--;; すみません。 ただ、先ほどもかいたようにベンダーで開発するような内容ですから、一度FM関連のベンダーさんに開発依頼されるのも良いかともいますよ。 参考にしてください

参考URL:
http://fsa.filemaker.co.jp/
yuuki_555
質問者

補足

スクリプトは If [予約::作業会議室 = “第一”] If [予約::予定開始時刻NO <= 1 and予約::予定終了時刻NO <= 2] If [GetRepetition (タイムテーブル::第一 ; 1 ) ≠ ””] カスタムダイアログを表示[”★予約エラー★” ; “すでにこの時間帯には予約が入っています。”] レイアウト切り替え[元のレイアウト] 全スクリプト終了 End If フィールド設定[タイムテーブル::第一[1] ; 予約::予約者名] End If 以下、繰り返し数を増やしながら50まで繰り返し End If …というようにして見ました。 量的にもかなりですが、おばかな無駄な作業でしょうか…。 会議室をポータルにする場合、会議室テーブルの定義はどんな感じでしょうか? 日付+会議室の表レイアウトですと、現在作成している視覚的にも予約状況が判断できるすべての予約フィールドが配置されたフォームになるのでしょうか? ご指導下さい。

  • a2c_2005
  • ベストアンサー率49% (29/59)
回答No.1

そうですね~繰り返しのフィールドの任意の行に飛ばすには、繰り返し行番号を入れるグローバルフィールドを一つ用意します(例:g_繰り返し行)。フィールドタイプは数字にしてください。 任意の繰り返しフィールドの行で、スクリプトを実行します。 フィールド設定「g_繰り返し行;Get ( アクティブ繰り返し位置番号 )」 このスクリプトステップで、g_繰り返し行 に現在選択されている繰り返し行の番号が入ります。 さてここからなのですが・・・ 繰り返しフィールドの任意の行に飛ばすことは、一発ではできません。 ではどうするのか? レイアウトモードでタブ順設定がありますよね、それで繰り返しフィールド内を縦に順に移動するように設定します。 次にスクリプトで 次のフィールドへ移動 というステップがありますから、それをLoopで回し(回した回数をカウントするグローバルフィールドも作ります)、カウント数と先ほどの g_繰り返し行 の内容が一致したらExit Loop If でLoopから抜けるようにして、任意のフィールド設定を行えばいいかと思います。 しかしFM7ではテーブル間でリレーションが可能ですから、繰り返しをポータルに置き換えたほうがスマートかもしれません。 参考にしてください。

yuuki_555
質問者

補足

今回なぜ繰り返しフィールドの任意の繰り返し番号が欲しかったかというと、予約テーブルと予約台帳テーブルがあり、予約テーブルは(1)氏名(2)日付(3)開始時間(4)開始時間NO(5)終了時間(6)終了時間NO、予約台帳テーブルは会議室1~5の朝9:00~夜19:00までの途中少し休みを入れますが、10分単位で時間軸を設定し繰り返しフィールド50で定義しています。各会議室の繰り返し数1~50が予約テーブルの開始時間NOと終了時間NOと対応するようにしました。LOOPで開始時間NOまで進み終了時間NOまで予約者氏名を繰り返しフィールドに保存させようとしているのですが「フィールド設定」「計算結果を挿入」では繰り返し数が計算結果では指定できないので困っています。繰り返しフィールドではなく、会議室1の予約は50個のフィールドを持った方が自由に触りやすいでしょうか。宣しくお願いします。