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

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

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

You are not logged in.

Announcement

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


#1 2015-02-13 09:34:28

taka
Guest

ポータル内の表示の切り替え

いつもお世話になっています。
Win7 FM13使用です。

詳細T
ID
氏名

機器T
ID
氏名
機器

IDフィールドでリレーションしています。

詳細Tのレイアウトに機器Tのポータルを 最初の行1 行数1 で作成した時、垂直スクロールバーではなくボタンで表示させるレコードを変更したいのですができますでしょうか?

宜しくお願いします。

#2 2015-02-13 11:11:54

Moz
Member

Re: ポータル内の表示の切り替え

こんな感じ?
http://xfs.jp/NUXqB
(追記:初期状態のフィルタ忘れてますね...雰囲気ファイルということで......)

他のレコードに移動しても前回表示していたレコードの行番号を記憶するのかとか
新規作成した時や削除した時の動きも考えると素直にスクロールバーでいいと思いますが(汗)
複数ユーザになるとややこしくなってくるような。。。

Last edited by Moz (2015-02-13 11:35:22)

Offline

#3 2015-02-13 11:42:30

taka
Guest

Re: ポータル内の表示の切り替え

Moz様
ありがとうございます。

いただいたサンプルのような感じです。

レコード移動した時に1番最新のレコードに表示が戻ったりはむりですよね?

#4 2015-02-13 12:18:31

Moz
Member

Re: ポータル内の表示の切り替え

できますよ。
最新というのはポータルの最後の行ってことですか?

Offline

#5 2015-02-13 13:04:19

taka
Guest

Re: ポータル内の表示の切り替え

Moz様

そうです。

私も書き忘れてしまっていますが、機器テーブルに装着日があります。
リレーションで装着日で降順ソートしています。

#6 2015-02-13 13:13:59

Moz
Member

Re: ポータル内の表示の切り替え

ソート順があっても動きますがソート順に影響する変更があると順番は変わります。

仕組みを理解してメンテナンスする自信があればいいですが、
素直に複数行のポータルの方が楽なような気がしますよ。

Offline

#7 2015-02-13 13:30:40

taka
Guest

Re: ポータル内の表示の切り替え

Moz様
ありがとうございます。

レイアウトの関係で複数行のポータルにはしたくないんです。
そうするとスクロールバーの方がいいか・・・

とりあえずサンプルを参考にさせて頂いて無理そうなら素直に撤退します。

#8 2015-02-13 13:37:48

チポ
Member

Re: ポータル内の表示の切り替え

Mozさんのサンプル見ていませんので、かぶっていたらごめんなさい。


関連レコードでポータル表示順にシリアル番号を振って、
それをポータルフィルタの条件にすればいいのでは。


レコード移動にはスクリプトトリガ
  OnRecordLoad
で実行すればいいでしょう。

Offline

#9 2015-02-13 15:07:44

taka
Guest

Re: ポータル内の表示の切り替え

チポ様
ありがとうございます。

チポ wrote:

関連レコードでポータル表示順にシリアル番号を振って、
それをポータルフィルタの条件にすればいいのでは。

これは具体的にどのようにやればいいのでしょうか?

チポ wrote:

レコード移動にはスクリプトトリガ
  OnRecordLoad
で実行すればいいでしょう。

このようなスクリプトトリガがあったのですね。
ありがとうございます。

#10 2015-02-13 15:19:28

Moz
Member

Re: ポータル内の表示の切り替え

サンプルはチポさんと考え方が似ていると思います。

とりあえず追加と削除ができるようにしたもの。
http://xfs.jp/V3QwQ
※比較用に何も設定していないポータルも配置してみました。

Offline

#11 2015-02-13 15:58:46

taka
Guest

Re: ポータル内の表示の切り替え

Moz様
ありがとうございます。

複数のポータルが1レイアウト上にあり、それぞれ個別で動かしたい時はサンプルのものをポータル1つ1つに割り当てればいいのでしょうか?

#12 2015-02-13 16:04:15

Moz
Member

Re: ポータル内の表示の切り替え

後出しで出てくる情報にキワどいものが多いですね。

まずはどうなっているのかやってみると分かると思いますよ。

Offline

#13 2015-02-13 17:13:00

taka
Guest

Re: ポータル内の表示の切り替え

Moz様
後出しでの情報提供申し訳ありません。

とりあえずやってみます。

ありがとうございます。

#14 2015-02-13 17:18:27

チポ
Member

Re: ポータル内の表示の切り替え

シリアル番号は

機器テーブルで自己リレーション
  詳細とのリレーションキー = 詳細とのリレーションキー
  and
  レコードID >=レコードID (シリアル番号等ユニークな値なら何でも)

として、
シリアルフィールド・計算フィールドの計算式、
  Count ( 自己リレーション::適当なフィールド )


詳細テーブルでポータルフィルタの設定
  $$変数 = 機器テーブル::シリアル

スクリプト
  変数を設定[$$変数 = Count ( 機器テーブル::適当なフィールド )]

これを、
  OnRecordLoad
で実行します。


ポータル表示の変更は、スクリプトで
  $$変数 = $$変数 - 1
とすると、次のレコードを表示します。

前へは + 1 です。

前後の最後まで行ったときの処理が必要ですね。


また、
変数を設定の後にレコード確定が必要だと思います。
検証していないので確かめてください、ごめんなさい。。


リスト表示だと変な動きになるかな?

Offline

#15 2015-02-16 10:19:56

taka
Guest

Re: ポータル内の表示の切り替え

チポ様
詳しくありがとうございます。

チポ wrote:

シリアル番号は

機器テーブルで自己リレーション
  詳細とのリレーションキー = 詳細とのリレーションキー
  and
  レコードID >=レコードID (シリアル番号等ユニークな値なら何でも)

このレコードIDでいうユニークとはすべてのレコードにおいてのユニークという解釈でいいのでしょうか?
詳細TとのリレーションはIDで行っていて、機器テーブルではIDはユニークになっておりません。
装着日FはIDごとにはユニークになっている(同じIDで同じ日のレコードはない)のですが、全体でみるとユニークにはなっていません。
この場合m装着日Fは不適切でしょうか?

宜しくお願いします。

#16 2015-02-16 10:25:26

チポ
Member

Re: ポータル内の表示の切り替え

ポータルでの表示順を決定できる値なら何でもいいです。
ですから、IDごとにユニークでいいです。


装着日FはIDごとにはユニークになっている(同じIDで同じ日のレコードはない)のですが、
全体でみるとユニークにはなっていません

この装着日フィールドでいいでしょう。

Offline

#17 2015-02-16 13:55:35

taka
Guest

Re: ポータル内の表示の切り替え

チポ様
ありがとうございます。

詳細T  機器T  機器T2(自己リレーション)
ID  =  ID  =  ID
     装着日 >= 装着日

機器T
シリアルF(計算) Count ( 機器T2::適当なフィールド )

スクリプト(レイアウトにOnRecordLoadで設定)
  変数を設定[$$変数 = Count ( 機器T::適当なフィールド )]

ポータルのフィルタリングを
$$変数 = 機器テーブル::シリアル

としました。

表示の変更用のボタンに当てはめるスクリプトなんですが、
変数設定($$変数 $$変数+1)
として当てはめればいいのでしょうか?

宜しくお願いします。

#18 2015-02-16 14:16:11

taka
Guest

Re: ポータル内の表示の切り替え

連投すみません。

表示用のボタンを二つ作成し、スクリプト引数に「+1」 「-1」をそれぞれ当てはめました。

スクリプトの式を
$$変数  $$変数+Get(スクリプト引数)
レコード確定

としたところうまく稼働しませんでした。

検証として

詳細TにテストFを作成

スクリプトを

$$変数  $$変数+Get(スクリプト引数)
フィールド設定 ターゲットフィールド:テストF 計算結果:$$変数
レコード確定

としたところ
ボタンを押すとテストFの値が変動すること
値が変動した後、ポータルをクリックするとレコードが変更されること
フィールド設定をなくすとポータルをクリックしてもレコードが変更されないこと
値はシリアル以上(機器T3レコードに対し$$変数が5などの時)になってもシリアル3のレコードが常に表示されていること
を確認しました。

できればボタンをクリックするだけで表示が変わるようにしたいのですがどのようにしたらいいのでしょうか?

宜しくお願いします。

#19 2015-02-16 15:47:31

チポ
Member

Re: ポータル内の表示の切り替え

スクリプトステップ
  レコード確定
または
  ウインドウ内容の再表示
を加えてみてください。


また、

変数設定($$変数 $$変数+1)

単にこれだけだと、レコード数を超えても加算されちゃいます。

変数が上限なら加算しないようにしないとダメですね。
下限も同様です。

Offline

#20 2015-02-16 16:10:00

taka
Guest

Re: ポータル内の表示の切り替え

チポ様
ありがとうございます。

チポ wrote:

スクリプトステップ
  レコード確定
または
  ウインドウ内容の再表示
を加えてみてください。

加えてみましたが、フィールド設定を入れないとうまくいきませんでした。

チポ wrote:

変数設定($$変数 $$変数+1)
単にこれだけだと、レコード数を超えても加算されちゃいます。

変数が上限なら加算しないようにしないとダメですね。
下限も同様です。

そのようにするためにスクリプトを組むとしたらどうすればいいのでしょうか?

変更用Fを作成し

$$変数  $$変数+Get(スクリプト引数)
フィールド設定 ターゲットフィールド:変更用F 計算結果:$$変数
レコード確定 or ウインドウ内容の再表示

の後に

IF[変更用F≠シリアルF]
カスタムダイアログ表示[最新のレコードです]
Else IF[変更用F=0]
カスタムダイアログ表示[これより古いレコードはありません]

みたいにすればいいのでしょうか?

#21 2015-02-16 17:48:29

チポ
Member

Re: ポータル内の表示の切り替え

今、検証できる環境に無いのですが、、

フィールドを作ったのなら、変数に変えてそのフィールドにしたらいかがでしょう。

今までの変数の部分を全てそのフィールドに変えれば即時性は間違いないです。


上限・下限の処理は、スクリプトを別々にした方が簡単ですから、
取りあえず、上限は


  If[そのフィールド >= Count ( 機器T::適当なフィールド )]
    カスタムダイアログ表示[最新のレコードです]
  Else
    フィールド設定[そのフィールド ; そのフィールド + 1 ]
  End If


下限の場合は
  If[そのフィールド <= 1]
ですね。

スクリプト引数を使うのなら、
最初に、引数の正負で分岐する必要が有ります。

Offline

#22 2015-02-17 08:56:08

taka
Guest

Re: ポータル内の表示の切り替え

チポ様
ありがとうございます。

無事に作成することが出来ました。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.010 seconds, 11 queries executed - Memory usage: 569.52 KiB (Peak: 590.42 KiB) ]