みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
qb_dp様
良ければ詳しく教えて頂けますか?
絞り込み検索は3つで考えています。※()の中はフィールドの内容
・社名(A社、B社、C社)
・データ(A1、A2、A3、B1、B2、B3、C1、C2、C3)
・データ詳細(A1あ、A1い、A1う、A2あ、A2い、A2う、、、)
集計フィールドの「一覧」というのは FMP12にはないんですねぇ。。。
悔しいです。検証もできないや。トライアルVも時間が。。。
Offline
シャチ様
時間をかけて作って頂いて本当にありがとうございます。
ここのメンバーの方達にはいつも助けられています。
引き続きよろしくお願いします。。。
「集計フィールドの「一覧」新機能で、必要なレコードキーリストで、フィールド:キーリスト を作って、商品キー とリレーション」は、やってみましたか?
検索は、普通に行えば、良いです。
Offline
検索結果をポータルへ反映させる手法で、「ポータルフィルター」か「リレーションキー生成」か
の違いは、主に、そのポータル表示内容を後で再利用する見込みが有るか無いかです。
再利用とは、合計計算など計算式の引数にポータル表示内容を利用する事などです。
・再利用の見込みがなく一過性の仮表示で良い場合、動的性に優れ複雑な照合条件式でも
自在に組める「ポータルフィルター」が簡便です。
・再利用のFM関数はポータルレコード値で無く関連レコード値を採るため、再利用は
「リレーションキー生成」が必須です。
Offline
qb_dp様
必要なレコードキーリスト とはなんでしょうか?
「種別」のフィールドを集計・一覧を選び、種別一覧フィールドを作成出来ましたが、
リレーションシップを開くとそのフィールドがグレーになっていてリレーションの設定が出来ません。
また、検索は普通に というのは、検索モードに切り替えて、そこにA等と入れて検索実行するということでしょうか?
Hiro様
解説ありがとうございます。
そうすると、今回はとくに計算などはないので、
シャチ様が複雑な式になるとはおっしゃってましたが
ポータルフィルターでなんとかするのが良いのでしょうか。
先日 いつかお披露目すると書いた作品を
もっか説明書をファイルの検証をしながら作っているのですが
その完成がいつになるやらわからないので
とりあえず説明がき抜きでβ版としてアップします
その中にポータルフィルターを使った絞り込みと使わない絞り込みを織り込んでいます
何かなおヒントになればと思います。
http://yahoo.jp/box/XmDV0A
に圧縮ファイルがこいてあります。
Offline
おっと! すみません。検証せずに投稿したので.....。
集計フールドだとリレーション設定できませんね。
下記フィールドを作成して下さい。
フィールド:skey_list|タイプ:集計|「キーフィールド」の一覧
フィールド:gkey_list|タイプ:テキスト|グローバル
リレーション設定
[gkey_list] = [商品マスタ::キーフィールド]
スクリプトの例
#検索処理
変数を設定 [$MAX; 値:1000]
If [Get(対象レコード数)>$MAX]
フィールド設定 [Table::gkey_list; Left ( Table::skey_list ; Position ( Table::skey_list ; ¶ ; 1 ; $MAX ) )]
Else
フィールド設定 [Table::gkey_list; Table::skey_list]
End If
※レコードがあまりにも多いと動作が遅くなるので、上限設定を入れた方が良いでしょう。
Offline
qb_dp様
gkey_listに上記のスクリプトをかけました。
そうすると、種別の各レコードに入力されているものが全て出てきてしまいます。
選択して、ポータルにその選択したもののみを表示したいのですが、項目を選択することができません。
何か設定を間違えているのでしょうか。
また、上限設定というのは、【変数を設定 [$MAX; 値:1000]】この値に当たる部分のことでしょうか。
質問ばかりですみません。よろしくお願い致します。
検索してくださいね。
Offline
こんな感じで。
検索モードに切り替え []
フィールド設定 [商品マスタ::種別; グローバル::種別]
フィールド設定 [商品マスタ::メーカー; グローバル::メーカー]
検索実行 []
変数を設定 [$MAX; 値:1000]
If [Get(対象レコード数)>$MAX]
フィールド設定 [商品マスタ::gkey_list; Left ( 商品マスタ::skey_list ; Position ( 商品マスタ::skey_list ; ¶ ; 1 ; $MAX ) )]
Else
フィールド設定 [商品マスタ::gkey_list; 商品マスタ::skey_list]
End If
Last edited by qb_dp (2016-12-29 17:53:21)
Offline
qb_dp様
私の理解力が乏しいのが悪いのですが、ざっくり検索してくださいと言われてもどうすれば良いのか分かりません。。。
どこで何を検索すれば良いのでしょうか。
教えて頂いたスクリプトの最初に検索モードに切り替え、最後に検索実行を入れれば良いのでしょうか。
それともこのスクリプトをボタンに掛ければよいのでしょうか。
もう少し細かく教えて頂けると有り難いです。
> #34 qb_dpさん
比較してないので分りませんが、もし「一覧」集計フィールドが遅いのであれば、
グローバルフィールドに計算値「全置換」を掛けてリスト取得する方法もなかなか俊足です。
Let([
$lst=List($lst;レコードIDフィールド)
];
Case(Get(レコード番号)=Get(対象レコード数); $lst) //最後のレコードでそれまでの累積リストを一挙に書き出す
)
※これは、>#19 ループスクリプトのショートカット簡略版で、1ステップで済みます。^^;;
Last edited by Hiro (2016-12-29 18:11:04)
Offline
qb_dp様
入れ違いになってしまいました。ありがとうございます。
#37 のスクリプトですが、そのままかけると検索条件が有効ではない というよくあるエラーが出てしまいました。
今一度確認させて頂きたいのですが、どこからどこまでを何に設定すれば良いでしょうか。
例えば、これは検索窓のところでOnObjectModifyでかける、ポータルのフィルタのところはこう設定する、このスクリプトはボタンにする、、、など
スクリプトを見ても理屈が分からないので、どこにどのような設定を入れたら良いのかピンとこないんです。。。
おっと! すみません。検証せずに投稿したので.....。
集計フールドだとリレーション設定できませんね。
下記フィールドを作成して下さい。
済みません、集計フールドを別途一般フィールドへ持ち替えることを、云うのを忘れました。
スクリプト代入より、フィールドを計算フィールドにして、下式で自動代入・自動更新するのがより楽です。
集計フィールド //計算結果は非保存
Offline
かなり遅出しですが。
ポータルフィルター側の工夫で、全数リストは不要で、もっと簡単になりそうです。
https://www.dropbox.com/s/z69hasebsgyxe … 2.zip?dl=0
Last edited by Shin (2016-12-29 22:53:54)
Offline
サンプルつくりましたよ〜。
https://sites.google.com/site/scriptmak … -on-portal
>Hiroさん
集計フィールド -> グローバル が速いかな〜と思います。
上限をもうけたのは、住所データでやっていたので、件数が多いとリレーション ポータル表示自体が遅くなっていましたので...。
Offline
皆様ありがとうございます!
サンプルをたくさん頂いたので、色々試してみようと思います。
また分からないところなどが出てきたら質問させてください。
Shin様
今Shin様のサンプルで作成しているのですが、g_種別、g_メーカー にあたるところが?になってしまい出ません。
値一覧が上手く動作していないようです。
同じ条件になるようあわせて作成しているのですが、何か考えられることはありますでしょうか。
宜しくお願いします。
単なるグローバルテキストフィールドなんですが。
値一覧も、元フィールドを加工したフィールドを参照しているだけです。ただ、リレーションの一つはデカルト積でのリレーション(いわゆるXリレーション)です。
自動計算式が間違っている?
Last edited by Shin (2017-01-05 16:28:52)
Offline
Shin様
リレーションは片方は=、もう片方は×になっているので、できていると思います。
社名リストは、フィールドを計算にして、社名 & ¶ & " * " を入力であってますよね?
表形式にして見てみると、Shin様に頂いたサンプルの場合は、社名リストは社名フィールドと同じ内容、データリストはデータフィールドと同じ内容が入っているのですが、
私の方は?が入っています。
フォーム形式にして一度?を選び、その後その内容をデリートすると*マークが入ります。
グローバルのフィールドには、Case ( IsEmpty ( Self ) ; "*" ; Self )を入れています。
何やらいじっていたらできました!!
とても勉強になりました。
ありがとうございました。
[ Generated in 0.011 seconds, 7 queries executed - Memory usage: 567.4 KiB (Peak: 588.3 KiB) ]