みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
複数ソリューション内にある各テーブルに対して、全ソリューションを通して一意となるIDを付けたいと考えています。
「全ソリューションを通して一意」という条件達成のためUUIDをIDとする方向で考えていますが、
各テーブルに対してUUIDを付けるという点で少々行き詰まっております。
レコードではなくテーブルに対してIDをつけたいので、まずグローバルフィールド(テキスト)を作成し
計算式でGet(UUID)とする案を考えましたが、何かのタイミング(ソリューションをサーバ側で一時的に閉じたりなど)
した場合にグローバルフィールドの内容が消え、再度Get(UUID)を計算されてしまうと、IDが変わってしまうのでは?と考えています。
そもそもグローバルフィールドが恒久的なデータの保持には適していないと思い、そちらは断念しています。
もう1点、計算式でGet(UUID)を入れてしまうと、グローバルフィールドでなかったとしても、
こちらの想定しないタイミングで再計算をされる可能性があるかもしれないとちょっと警戒しています。
上記の条件を満たす、良い方法はないものでしょうか?
ちなみに今回作りたいテーブルのIDは、他のソリューションとリレーションさせる予定です。
よろしくお願いします。
Offline
「テーブル名」と「テーブルID」とを関連付ける専用テーブルを別途用意するとか、
Offline
> テーブルのIDは、他のソリューションとリレーションさせる
これって?
そもそも、
テーブル名だけで何が不足なんでしょう?
Offline
テーブルとレコードの意味を混同しているのでは。
> 「全ソリューションを通して一意」という条件達成
これが必要ならば、全レコードを横断するマスターテーブルを作り、そこからレコードを作っていけばいい様な。
もっと具体的に書いてあればわかりやすいかも
Offline
返信ありがとうございます。
Hiroさん
そのテーブルは今回の件とは別に、リレーション関係なしで一覧などで見るために作ろうかと思っています。
ただ、今後の開発で数あるソリューションの中で「テーブル名」が被らない可能性がない訳ではないので、
テーブル名を使ってその専用テーブルからテーブルIDを取ってくるのは難しいかなと考えています。
解釈が違っていたらすいません。
チポさん
今回の最終的な目的は全てのソリューションを対象に、フィールドの変更が行われたタイミングで
「変更履歴」ソリューションにフィールドの変更履歴を残すことです。
「他のソリューションとリレーションさせる」の「他のソリューション」とはこの変更履歴ソリューションのことです。
変更履歴ソリューションには
・いつ
・どのテーブルの
・どのレコードの
・どのフィールドを
・何から
・何に変更したか
を記録する予定です。
変更を記録して後で変更履歴ソリューションを見るだけであれば、リレーションは必要なく、テーブル名で記録しておけば良いと思うのですが
今回リレーションに拘っているのは、変更を行ったソリューション側で、今までの変更の一覧を表示させたいためです。
例を出しますと、例えば「お客様情報」ソリューションがあり、それの変更の記録を「変更履歴」ソリューションに記録するとします。
「お客様情報」のAテーブルに「住所」というフィールドがあり、それが変更された場合です。
「お客様情報」のAテーブル(TO)を使ってレイアウトを作り、そのレイアウト上に「住所」フィールドが表示されていると想像して下さい。
その横に「履歴」ボタンを置き、押した時に いつ 何から何に変更されたか を表示したいです。
さらにその部分をクリックすると、「変更履歴」ソリューションの該当のレコードに移動し、誰が変更したかなどの詳細も見ることができるようにしたいです。
その遷移を作りたいので、テーブル名ではなく一意となるテーブルIDを使ってリレーションさせたいのです。
複雑に考えすぎで、もっと簡単に実現できるものでしょうか?
Shinさん
端的に書いてしまったので、分かりにくくて申し訳ないです。
Hiroさん、チポさんへの返信の通り、テーブルに一意のIDを付けたいという意味です。
Last edited by MTK (2017-06-27 16:54:01)
Offline
ならば、
普通のフィールドにして、入力値の自動化で、
最初のレコードはUUIDを入力、
以後のレコードはそのコピーを入力。
とすればどのレコードからも参照出来ますね。
Offline
「お客様情報」のAテーブルに「住所」というフィールドがあり、それが変更された場合です。
「お客様情報」のAテーブル(TO)を使ってレイアウトを作り、そのレイアウト上に「住所」フィールドが表示されていると想像して下さい。
その横に「履歴」ボタンを置き、押した時に いつ 何から何に変更されたか を表示したいです。
さらにその部分をクリックすると、「変更履歴」ソリューションの該当のレコードに移動し、誰が変更したかなどの詳細も見ることができるようにしたいです
ん~...。上記の文章だとレコード単位の履歴を確認したいと思われますが。
レコードのフィールドにGET(UUID)で事足りるような...。
テーブルIDが必要なら、フィールド:TableId(名前は任意)を作って、入力値の自動化|データ で予め決めておいた「UUID」をハードコーディングしてしまえば、良いのでは。
Offline
チポさん
なるほど、そういうやり方があるんですね。
勉強になりました。
試してみようと思います。
ありがとうございました。
qb_dpさん
確かに、仰る通りレコード単位の履歴で追えますよね・・・
テーブル単位での変更履歴も見る、という目的がありましたが
本当に必要なのか、再度検討してみようと思います。
ありがとうございました。
Offline
単に全体のロギングをしたいだけなら、SyncServer という手もありますよ。Roll back も可能です。
Offline
Shinさん
情報ありがとうございます。
SyncServerも調べてみようと思います。
Offline
Pages: 1
[ Generated in 0.012 seconds, 7 queries executed - Memory usage: 525.57 KiB (Peak: 546.11 KiB) ]