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

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

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

You are not logged in.

Announcement

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


#1 2020-06-15 20:10:01

chaco2008jp
Member

「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

いつもお世話になっております。

スクリプトにある「フィールド内容の全置換」では、ターゲットフィールドの指定をプルダウンより行う必要があるかと思いますが、
この指定を計算式を用いて行う事は可能でしょうか?

イメージ的には以下のような形です。

目的・・テーブルAの中にあるフィールドAを、「フィールドB & "のページ"」という計算式でフィールド内容の全置換を行いたい

「変数の設定」$テーブル名 → "テーブルA"

「フィールド内容の全置換」
  ターゲットフィールドの指定 →  GetField ( $テーブル名 & "::" & "フィールドA" )
  計算式の指定 → フィールドB & "のページ"


ターゲットフィールドの指定ダイアログ内に「指定」というボタンがあり、これをクリックすると計算式入力フィールドが出たので、ここに「GetField ( $テーブル名 & "::" & "フィールドA" )」と指定を行いましたが、エラーとなってしまいました。

何か良い方法はありますでしょうか?何卒宜しくお願い致します。

Offline

#2 2020-06-15 20:25:21

himadanee
Guest

Re: 「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

そこは繰り返しフィールドの繰り返し数を指定する場所です。

フィールド自体を計算で指定することはできません。
フィールドでなくテーブルを変えて1つのスクリプトで兼用したいように読めますが?

#3 2020-06-15 22:17:59

Moz
Member

Re: 「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

[フィールド内容の全置換]を使わずに[Loop]と[フィールドを名前で設定]を利用すれば代用できます。

[フィールド内容の全置換]は他のユーザがレコードロックをしている際などに
エラーになったレコードが補足できないなどのデメリットもありますから代用しては如何でしょう?

Offline

#4 2020-06-15 22:22:23

chaco2008jp
Member

Re: 「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

himadanee 様

コメントありがとうございます!

>そこは繰り返しフィールドの繰り返し数を指定する場所です。
>フィールド自体を計算で指定することはできません。
そういう事なのですね!理解致しました!

>フィールドでなくテーブルを変えて1つのスクリプトで兼用したいように読めますが?
申し訳ございません!挙げた例は分かりやすく説明するための例でして、実際には状況が異なります!
色々と複雑なスクリプトになってしまっており、実例を挙げるとややこしくなってしまうなと思い、そのような質問にさせて頂きました!
一言注意文を書き入れるべきでした!申し訳ございません!

長くなってしまうと思いますが、出来るだけ簡潔に、
現在構築したい仕組みの概要を紹介させて頂きます!

現在、ネット通販ページのソート機能(価格順、人気順、カラー別など)を疑似的にHTMLファイルのみで再現する仕組みを構築しており、
膨大な数のファイルを書き出すスクリプトが必要となっております。
※楽天市場やYahooショッピングでも使用する為、データベースから情報を引き出すような操作が出来ず、そのような設計を考えています。

ブランド毎のページ 37レコード
カテゴリ(大)毎のページ 18レコード ※トップス等
カテゴリ(小)毎のページ 42レコード ※Tシャツ等

上記の三種類のページ内で、

カラーで絞り込む(黒系、白系、赤系など全15色)
並び替え(価格順、人気順など全6通り)
表示切替(説明文を交え全カラーを表示させた詳細リストと、カラー毎に価格とレビュー点数・件数だけを掲載したサムネリストの2種類)

このようなソートが出来る仕組みを考えております。

そこで、以下のような54テーブルを用意し、

・ブランドページ 詳細リスト お勧め順
・ブランドページ 詳細リスト  価格安い順
・ブランドページ 詳細リスト  価格高い順
・ブランドページ 詳細リスト  レビュー件数順
・ブランドページ 詳細リスト  レビュー点数順
・ブランドページ 詳細リスト  月間売上順
・ブランドページ サムネリスト お勧め順
・ブランドページ サムネリスト  価格安い順
・ブランドページ サムネリスト  価格高い順
・ブランドページ サムネリスト  レビュー件数順
・ブランドページ サムネリスト  レビュー点数順
・ブランドページ サムネリスト  月間売上順
・ブランド×カラーページ サムネリスト お勧め順
・ブランド×カラーページ サムネリスト  価格安い順
・ブランド×カラーページ サムネリスト  価格高い順
・ブランド×カラーページ サムネリスト  レビュー件数順
・ブランド×カラーページ サムネリスト  レビュー点数順
・ブランド×カラーページ サムネリスト  月間売上順

・大カテゴリページ 詳細リスト お勧め順
・大カテゴリページ 詳細リスト  価格安い順
・大カテゴリページ 詳細リスト  価格高い順
・大カテゴリページ 詳細リスト  レビュー件数順
・大カテゴリページ 詳細リスト  レビュー点数順
・大カテゴリページ 詳細リスト  月間売上順
・大カテゴリページ サムネリスト お勧め順
・大カテゴリページ サムネリスト  価格安い順
・大カテゴリページ サムネリスト  価格高い順
・大カテゴリページ サムネリスト  レビュー件数順
・大カテゴリページ サムネリスト  レビュー点数順
・大カテゴリページ サムネリスト  月間売上順
・大カテゴリ×カラーページ サムネリスト お勧め順
・大カテゴリ×カラーページ サムネリスト  価格安い順
・大カテゴリ×カラーページ サムネリスト  価格高い順
・大カテゴリ×カラーページ サムネリスト  レビュー件数順
・大カテゴリ×カラーページ サムネリスト  レビュー点数順
・大カテゴリ×カラーページ サムネリスト  月間売上順

・小カテゴリページ 詳細リスト お勧め順
・小カテゴリページ 詳細リスト  価格安い順
・小カテゴリページ 詳細リスト  価格高い順
・小カテゴリページ 詳細リスト  レビュー件数順
・小カテゴリページ 詳細リスト  レビュー点数順
・小カテゴリページ 詳細リスト  月間売上順
・小カテゴリページ サムネリスト お勧め順
・小カテゴリページ サムネリスト  価格安い順
・小カテゴリページ サムネリスト  価格高い順
・小カテゴリページ サムネリスト  レビュー件数順
・小カテゴリページ サムネリスト  レビュー点数順
・小カテゴリページ サムネリスト  月間売上順
・小カテゴリ×カラーページ サムネリスト お勧め順
・小カテゴリ×カラーページ サムネリスト  価格安い順
・小カテゴリ×カラーページ サムネリスト  価格高い順
・小カテゴリ×カラーページ サムネリスト  レビュー件数順
・小カテゴリ×カラーページ サムネリスト  レビュー点数順
・小カテゴリ×カラーページ サムネリスト  月間売上順

※カラー別ページはキャラクター的に全カラー表示の詳細リストは不要なので、テーブルを用意しておりません

この54テーブルを、ブランド別のデータベースを抱えたテーブルや、商品別に価格などの情報を持ったテーブルとリレーションさせて、
そのリレーションのソートルールを価格の昇順や、レビュー件数順などに設定する事で、希望するHTMLソースをList関数などを用いて出力させようとしています。

カラーやソートなどのパターンを掛け合わせると、ザックリ計算しても約2万~3万ページが必要となるのですが、
基本的に上記の54テーブルは、全て同じ仕組みでHTMLソースを書き出すので、
一連のスクリプトを、テーブル名だけを変えて54回スクリプトを回せば出力できると見込んでおります。

この「一連のスクリプト」内では、複数回の「フィールド内容の全置換」関数が使用されるのですが、
現状はこの全ての関数に個別にアクセスして、テーブル名をプルダウンから選択する、という作業をしており、
更にはその作業をテーブル数である54セット繰り返さなければならず、かなりの作業量が見込まれます。

そこで、スクリプト冒頭でテーブル名を変数として設定し、以下のような形で、その冒頭の変数だけを変えれば全て片が付くスクリプトに出来ないかと模索しております。

例)

【変数を設定】 $テーブル名 → "ブランドページ 詳細リスト お勧め順"

【フィールド内容の全置換】GetField ( $テーブル名 & "::" & "フィールドA" ) → 計算式A
【フィールド内容の全置換】GetField ( $テーブル名 & "::" & "フィールドB" ) → 計算式B
【フィールド内容の全置換】GetField ( $テーブル名 & "::" & "フィールドC" ) → 計算式C
【フィールド内容の全置換】GetField ( $テーブル名 & "::" & "フィールドD" ) → 計算式D
【フィールド内容の全置換】GetField ( $テーブル名 & "::" & "フィールドE" ) → 計算式E
【フィールド内容の全置換】GetField ( $テーブル名 & "::" & "フィールドF" ) → 計算式F
【フィールド内容の全置換】GetField ( $テーブル名 & "::" & "フィールドG" ) → 計算式G
【フィールド内容の全置換】GetField ( $テーブル名 & "::" & "フィールドH" ) → 計算式H
【フィールド内容の全置換】GetField ( $テーブル名 & "::" & "フィールドI" ) → 計算式I
【フィールド内容の全置換】GetField ( $テーブル名 & "::" & "フィールドJ" ) → 計算式J
【フィールド内容の全置換】GetField ( $テーブル名 & "::" & "フィールドK" ) → 計算式K


現在は、ご教授頂いた通りフィールド内容の全置換は対象フィールドが計算式で指定出来ない為、全てプルダウンから選んでいるのですが、
とにかく作業工数が多く、加えて設定ミスも予測されるので、何とか改善出来ないものか模索しております。

恐らく、根本的にもっと効率的なやりかたはあると思うのですが、
何分私がファイルメーカーに疎く、仮に業者に依頼する等して自分の知らない方法でシステムを構築してしまうと、
今後の改修なども出来なくなってしまうので、上記のようなアナログな方法で何とか希望する形にしたいと考えております。
※本業がwebデザインや撮影、コピーライト等でして、プログラミング関係は出来るだけ時間をかけず、分かりやすい方法で、手が届く範囲でという形でやっています、

また、上記説明だけですと「ブランドやカテゴリが増える度にレコードを増やす必要があり、労力では?」「ページ数が多すぎて計算フィールドで行うにしても重すぎて動かないのでは?」「そんなにフィールド内容の全置換を使う必要は無いのでは?」など、
様々な疑問点が生まれてしまう事は重々承知しておりますが、この辺りを全て解説していくと大変な文章量になってしまうと思うので、
勝手な言葉で本当に申し訳ないのですが、一旦その辺りは見逃して頂ければと思います、、

例えば「ブランドやカテゴリが増える度にレコードを増やす必要があり、労力では?」に関しては、
スクリプト開始と同時に全てのテーブルの全てのレコードを削除し、ブランドマスタやカテゴリマスタといったデータベースを利用して、
自動的に必要なレコードが生まれるような仕組みを既に構築し、解決しております。(こちらもとてもアナログな方法ですが、、)

また、1つのサイトだけでなく、楽天やYahooといった支店のページも出力する必要があり、そのために諸々のリンク先URLも異なり、更にはPCとスマホでソースが違うなど、
様々な要因もあってフィールド内容の全置換が多数出て参りまして、計算が複雑になっております。

それ以外にも、恐らくこういう事が疑問になってしまうだろうな、という点はいくつか思いつくのですが、
本当に心苦しいですがここでは割愛させて頂きますので、何卒ご容赦頂ければと思います、、
中には、実際に回りくどい方法で設計している事も重々承知しております。
素晴らしいアドバイスを頂けることは大変嬉しいのですが、本当に申し訳なく感じております。

しかしながら、HTMLページを書き出すという事においては、力業であまり美しくはないかもしれませんが、既に実験して成功しており、
あとはどうやって効率的にスクリプトを構築するか、そして上記の通り「フィールド内容の全置換」をどうやって効率的に設定するか、そこだけが課題になっております。

解決が難しいようであれば、フィールド内容の全置換に関しては全ての関数に入って、全てプルダウンから選択するという力業で乗り越えようと覚悟はしております。。

このような状況なのですが、いかがでしょうか?
何か良いアイデアがあればご教授願いたいです、宜しくお願い致します。

Offline

#5 2020-06-15 22:28:04

chaco2008jp
Member

Re: 「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

Moz様

コメントありがとうございます!先程長文のコメントを投稿させて頂きました際にすれ違いとなってしまいました!申し訳ございません!

>[フィールド内容の全置換]を使わずに[Loop]と[フィールドを名前で設定]を利用すれば代用できます。
ご教授頂きありがとうございます!実はその方法も視野には入れているのですが、現在組んでいるスクリプトの根本が覆されてしまう事になると思っており、出来ればフィールド内容の全置換で対応出来ればと考えております、、
詳細に関して先程のコメントのような形で細かく説明させて頂こうとも思いましたが、再びものすごい長文になってしまいそうなので、大変心苦しいのですがここでは割愛させて頂きます、、
あくまでも「フィールド内容の全置換」をどうやって効率的に設定するか、そこだけを焦点に出来れば幸いでございます。。

せっかくご教授頂いたのにも関わらず、本当に申し訳ございません!

Offline

#6 2020-06-15 22:41:57

Moz
Member

Re: 「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

酷なことを言いますがやり方を変えずに我が儘通したいたぁ「そんな都合の良い魔法はねーよ」でございまーす。

他のトピックでも他の方に突っ込まれていたように思いますが......
テーブル構造などには口を挟んではいけないようなのでこれ以上は申しませんが......

全置換は動的な指定はできませんからスクリプトをXML形式でクリップボードに取得し
エディタでXMLを書き換えてクリップボードから書き戻す手法があります。
イチイチ手で直すよりミスは減るでしょう。ツールが以下トピックで紹介されています。
https://fm-aid.com/bbs2/viewtopic.php?id=8866

全置換というのは1度に1フィールドだけを全レコード分行いますから
必要なフィールドxレコード数回の処理が必要になります。
上でも書きましたが複数人での利用ではレコードロックが起こりますが捕捉ができません。

対してLoopによる処理は複数フィールドにまとめて行えますから処理のパフォーマンスも結果的には良くなるでしょう。
早い段階で方向性を変えられたほうが良いと思いますが余計なお世話でしたかね。

Last edited by Moz (2020-06-15 22:43:03)

Offline

#7 2020-06-15 22:48:04

chaco2008jp
Member

Re: 「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

Moz 様

せっかくコメント頂いたのにも関わらず、申し訳ございません、、
正直に言うと、「[Loop]と[フィールドを名前で設定]を利用すれば代用できます。」という言葉を聞いても、
具体的にどういった事を行えば良いのか想像がつかず、また、そのような質問をしてしまうと返って質問を複雑にしてしまうと感じた為、
自分が分かる範囲内での質問に絞らさせて頂きました、、

ご提案頂いた内容も、大変申し訳ございませんが私には全く理解する事が出来ませんでした、、

やはり、まずは根本から勉強をし直さないとファイルメーカーは使えないと感じました、
今回は何とか力業で乗り越えようと思います、ご回答頂いた皆様、本当にありがとうございました!

Offline

#8 2020-06-15 23:31:03

Shin
Member

Re: 「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

> まずは根本から勉強をし直さないとファイルメーカーは使えないと感じました、
FIleMaker に限らず、このように大量のデータを系統的に扱う際の効率的な方法を、まず習得するべきでしょう。

> 今回は何とか力業で乗り越えようと思います、
まぐろを、ペティナイフでさばくようなものです。その結果は、
仮に業者に依頼する等して自分の知らない方法でシステムを構築してしまうと、今後の改修なども出来なくなってしまう
よりも、さらに悪くなると思います。

ざっと見ただけですが、上にあるリスト、というテーブルは全て動的に作るべきもので、保存しておくモノでは無いでしょう。リストがあれば、html への書き換えも単純なのでは。

Offline

#9 2020-06-16 00:01:33

chaco2008jp
Member

Re: 「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

Shin様

いつもコメントありがとうございます!

>FIleMaker に限らず、このように大量のデータを系統的に扱う際の効率的な方法を、まず習得するべきでしょう。
その通りだと思います、、以前こちらの掲示板で良い勉強用の資料をご紹介頂き、そういった教材でもって基礎的な知識やテクニックを身に着けるべきだと感じております、、
しかしながら、目の前の仕事として撮影やコピーライトなどがあり、中々勉強に時間を割けない状況でございます、、
ファイルメーカーはアマゾンで購入出来る初心者用の参考書を数冊読んだ程度でして、最初の内はその程度の知識でも十分便利にファイルメーカーを使えておりました(元々はエクセルを使って強引に管理していたので、)
しかし、サイトが複雑になるにつれて、予期せぬエラーやトラブルが起こるようになり、対処しきれない状況です。。

>まぐろを、ペティナイフでさばくようなものです。
そうなんです、、、非常に的確な例えで、全くもってそのような状況である事は重々理解しているのですが、、
例えるならば皆さんはマグロ包丁どころか、最新のデジタル機器でオートマチックにマグロをさばいているように見えまして、
タイピングすらできない自分には、そんなデジタル機器はチンプンカンプン、、でも捌かなければならないマグロは次々にやってくるという感じで、
まさに、ペティナイフが使えれば、それとなく感覚で使えるマグロ包丁くらいの知識が欲しいという感じです、、!
デジタル機器を使用している人にとって、マグロ包丁なんて時代遅れかもしれませんが、ペティナイフしか無い自分としてはものすごく即戦力なのです!!

先日、1時間1万円で色々とスカイプでファイルメーカーの事を教えて頂けるサービスを利用したのですが、
レイアウト編集ページで、右上のアイコンを押すと左側にフィールド一覧が出てきて、
ここからまとめてフィールドを配置出来る事を知り感動しました、、!!(今までは1つ1つ、上部のフィールドツールをつかってたくさんのフィールドを配置してました、、その為画面もグチャグチャです、、)
このレベルのマグロ包丁くらいの知識で心から感動するレベルです!!泣

しかし、いつかはデジタル機器が使えるようにならないとなと思いつつ、中々時間が作れずに今の状態です。。
理想は、マグロ解体工場に丸ごと仕事をぶん投げたいくらいなのですが、、下手なりに、これこれこういう風に解体したいというコダワリだけは強いと思うので、
外注するにしても、要望を伝えるには相当な時間が掛かるだろうし、そもそもどこに外注すれば良いのかも分からない、、そんな感じです、、

こんな者の為にいつもコメント頂き心から感謝しております!

>上にあるリスト、というテーブルは全て動的に作るべきもので、保存しておくモノでは無いでしょう。リストがあれば、html への書き換えも単純なのでは。

そうですよね、、自分は元々デザイナーで、以前は優秀なプログラマーの方と一緒に仕事をしていたので、
大体こういう感じの事は出来るんだろうな、という事だけは何となく分かってはいるのですが、
いざ自分で作業しようと思うと、ありとあらゆる事が分からず手詰まりになってしまい、
結局自分で分かる範囲のアナログな方法に落ち着いてしまいます、、

きっと仰る通り、こんな回りくどい事をしなくても、もっと簡単に希望する結果に出来ると思うのですが、、
やはり勉強が必要ですね、、また何か分からない事があった時はご相談させて頂くかと思いますが、
今後とも何卒宜しくお願い致します、、!!

Offline

#10 2020-06-16 15:50:59

Hiro
Member

Re: 「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

終わってますが、質問者さんは、

根本的な構造設計が、そもそも間違っています。
本件の基本命題は、単なる「動的集計」でしょう。(結果のHTML書き出しは、ほんの付随事項ですネ。)
集計作業用の汎用テーブルを「バーチャル・リスト」の考え方で、1テーブルだけ追加すれば十分でしょう。
必要なテーブルはこのバーチャル・テーブルで一過的に互換できます。
集計結果の「書き出し順」指定は、この作業用テーブルを直前ソートして出力するだけでしょう。
なお、バーチャル・リストはExecuteSQL関数を使うのが定石です。

Offline

#11 2020-06-16 16:00:49

himadanee
Guest

Re: 「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

ExecuteSQL関数がでてきたのでついでに言うと、ODBC共有設定をして「SQLを実行」にすると、複数のフィールドを一度に全置換できます。SQL自体は計算式で生成できるし。

#12 2020-06-17 00:57:21

chaco2008jp
Member

Re: 「フィールド内容の全置換」におけるターゲットフィールドの指定を、計算式で行う方法はありますか?

Hiro 様 himadanee 様

コメントありがとうございます!

>集計作業用の汎用テーブルを「バーチャル・リスト」の考え方で、1テーブルだけ追加すれば十分でしょう。
大変申し訳ございません、、初心者の自分には何が何だかという感じで、、やはり根本的な勉強が必要ですね、、

>ODBC共有設定をして「SQLを実行」にすると、複数のフィールドを一度に全置換できます。
こちらも上記の通り、何が何だかというのが正直な感想です、、、

自分がファイルメーカーを使い始めた当初は、まだ商品数も少なく管理も簡単だったのですが、
最近になって色々なキャラクターの製品を取り扱うようになり、商品数も多くなり、
もう自分の能力では管理出来ないという事を痛感致しました。。

もちろん、コツコツと勉強すれば出来るのかもしれませんが、
ファイルメーカーの勉強以上に、商品の仕入れなど利益に直結する仕事も多数転がっており(むしろそっちが自分の本業)
そういった事を考慮しても、何もかも自分でやる事は大変非効率だと思いました。。

今朝会社の会議で、今後は誰か良さそうな方を探して、その方に全面的に設計管理等お願いする方向で決まりました!
個人的にファイルメーカーは大好きなのでまた質問などさせて頂くかと思いますが、その時はどうぞ宜しくお願い致します!

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 604.97 KiB (Peak: 641.88 KiB) ]