みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
以前の質問した内容ですが、まだ解決していないため、再度質問させていただきます。
(filemaker12使用)
製品テーブルと入出庫明細テーブルを製品コードでリレーションしています。
検索条件として、
1.製品コード
2.開始日付(グローバルフィールド)
3.終了日付(グローバルフィールド)
を入力して、明細表示をポータルで実施しています。
ポータルのフィルタリング機能を使用して、指定日付範囲のデータをポータルに表示しようとしていますが、うまく範囲指定ができません。
入出庫明細の日付を比較対象としてしていますが、比較元を”グローバルフィールド”、”グローバル変数”、”変数”、”GetAsDate()”等で試してみたのですが、
どれもうまくいきません。
終了日付はリレーション項目にすれば解決したのですが、
開始日付は、データ日付順に先頭から終了日付まで合計したいのでフィルタリングで実施する必要あります。
明細データの表示のみに日付範囲(開始/終了)利用をしたいと思っています。
以前に質問のご回答で
******************************************************************
次に、変数での条件設定ですが、USの FM forum にも何度か話題になっていました。(昔の記事ですので忘れていました)
ポータルフィルターの条件式が評価されるタイミングが非常に微妙で、内部の値そのものが変更された時、条件式そのものが変更された時などの様です。内部の値は、そのレコード内のフィールド値の変更ならば直ちにフィルター式の評価が行われるようですが、グローバルフィールドやグローバル変数については変更されてもフィルター式の再評価を引き起こさないようです。
これに対処するためには、グローバルフィールドを使わずにフィールドの値を使う、グローバルフィールドを使うときはキャッシュを保存して再評価させる、グローバル変数を使わざるを得ない場合は、評価の式そのものをテキストで書いて変数に格納し、Evaluate() で評価する、という方法で逃げられるようですが、かなり扱いが面倒になりますので、別の方法を取られたほうがいいかもしれません。
******************************************************************
をいただいていますが、具体的な対応方法は不明です。
何か対応方法をご教示ください。
キャッシュを保存して再評価させる は試されましたか。
私の検証しているファイルでは、その動作を行わせると、グローバルフィールドでも、グローバル変数でも、フィルターは動作しているようです。グローバルフィールドにトリガーを仕掛けるか、グローバル変数の設定ステップの直後に行わせると良いかと思います。
Offline
まだ試していません。
1.グローバル変数の設定ステップの直後
⇒「キャッシュをディスクに書き込む」を実施
2.グローバルフィールドにトリガーを仕掛けるか
⇒OnObjectExit等で 「キャッシュをディスクに書き込む」を実施
と認識していますが、認識に誤りないでしょうか?
それでいいですが。
回答もらっておきながら、それを試して見ないで、別のところに質問を投げる、というのはいかがなものかと思いますが。
Offline
失礼しました。
いったん解決としてしまったために、新たな質問として投げてしましました。
「キャッシュをディスク」の件も勉強不足で方法がわからなかったため試しておりませんでした。
申し訳けございません。
試してみた結果報告します。
どちらの方法でも、初回の1回目は開始項目の範囲指定有効になり、
明細としては開始日以降の明細表示されるのですが、
その画面で開始日を変更した場合は有効になりません。
ポータル画面が再検索されて再描画されません。もとの内容のままです。
終了日付変更時は、リレーションで実施しているためか、問題なく動作します。
再入力後にはフィルタリングが有効になっていないような模様です。
何かよい方法はありますでしょうか?
Shinさんがおっしゃっていることとたぶん同じことだと思いますが
手でやるなら レコード-ウィンドウ内容の再表示ですが、
スクリプトなら
ウインドウ内容の再表示 [ キャッシュ結合結果を書き込む; キャッシュ外部データを書き込む ]
を日付のフィールド内容が確定するタイミングでトリガに仕込めぱできるでしょう。
Offline
新しいスレッドを立てる事はどうでも良いのですが、同じ質問を異なる掲示板やフォーラムへ投げられていますよね。全部読まれた上での事でしょうか。
私も後から気付いたのですが、キャッシュの話は、掲示板で答えが書き込まれていましたよ。(つまり、私の書き込みより古い書き込みです)
Offline
ヘルプがFM13でも今だに変ですけど、
[キャッシュ結合結果を書き込む] を選択して、関連レコードのクエリーの結果を削除して関連レコードを更新します。
このキャッシュは、ディスクは関係ありません。処理は「書き込み」でなく「結果を削除」です。Flush cached join results
「キャッシュされてるクエリー結果を破棄することによって最新の情報に更新する」処理です。
FM13のヘルプの例が、ますます誤解させるようなものになってる...
[合計] フィールドを更新して税金を含め、すべてのレコードが更新された後に警告音を鳴らします。
Loop中でレコードを移動してるのだから、移動するたびに「更新」されてるはずですが。最後のレコードの更新だけに使うのも変だし、ODBCの例?
Pages: 1
[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 563.57 KiB (Peak: 579.01 KiB) ]