みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
閲覧や更新の履歴を保存し戻れるようにという考えは「監査証跡」とか「Audit Log」とかいうキーワードで語られる、システム系においては重要な概念です。
FileMakerにはその機能はありませんが、以下の製品を使えば簡単に付与することはできます。ちょっと高いのでおいそれとは導入できないのですが...。
http://syncdek.com/fmdataguard/
> 修正不可にしたいフィールドが多数ある場合でも簡易的な方法でいけますでしょうか?
先程の方法はそこがネックでして、全フィールドにスクリプトトリガを入れなきゃならないんですね。そのかわり変更しようとしたときの警告を制御したりと、ユーザビリティ向上の工夫がしやすいので、まあ場面次第です。
> 同じファイル内に作成せずに別ファイルにコピー(Buckup)をとっていくようなイメージでいいのでしょうか?
はい、そうですね。プロの現場では履歴だけの記録を別ファイルに取っておくことはよく行います。FileMakerはこうした履歴用テーブルにレコードが増えても動作への影響が少ないのですが、とはいえ長年使っていると肥大化するので、別ファイルによけておくのがいろいろ幸せです。
データを扱っているテーブル内で履歴のためにレコードを複製する手法は、データモデリングの原則から外れることと、仮に数値データを集計しているような場合に二重カウントになる点などに留意してご利用なさればと思います。
honda様おっしゃられるとおりWebベースで印刷画面作ってると思ったように動かないこと多発なので、どこで折り合いつけるか、ではありますね。そのへんをわかってて使うべき話、といことでしょうか。
蛇足ではございますが...。
以下のサイトにもサンプルがありますが、page-break系のCSSで改ページを制御したりは一応できるので、あとは思った通り動いてくれることを祈りつつです。
https://msdn.microsoft.com/en-us/librar … 85%29.aspx
以下にもサンプルを紹介しましたが、FileMakerのテクニックでいうと各レコードでのHTML部分をまず生成し、それをまとめる点が大事です。
http://fmhelp.jp/?p=261
それとデータ生成においては以下のカスタム関数が役立ちます。
https://www.briandunning.com/cf/438
またまた横から失礼します。
①レコードのロックと解除の方法はどのようにするのがいいのか?
これもさまざまな手法がありますが、正攻法としてはアクセス権セット内の式を設定することで実現します。
簡易的にはフィールドにOnObjectModifyのスクリプトトリガを設定し、
If [TO名::ロック]
レコード/検索条件復帰[ダイアログなし]
End If
(ロックは数字フィールドでロック時1を入力)
といったスクリプトを割り当てるなんていう方法もあります。この手法はロック時に変更しようとするとカーソルが単に抜けるという動作になりますので、これをベースにいろいろ制御できます。
②一度登録した記事を編集する場合に、「いつ」「誰が」「どこを」「どのように」変えたのかわかるようにしたいです。
「いつ」「誰が」は、レコードが保存されたときにスクリプトトリガを起動し、ログ用テーブルにレコードを追加することでごく容易に実現できます。
「どこを」「どのように」のほうはちょっと面倒でして、要は履歴をすべて保存して比較をするような仕組みが必要になります。
ログインや変更の履歴を1回の変更ごとにレコード追加してゆくとレコード数が膨大になりますが、レコードとして増やしてゆくぶんには動作は重くなりません。ただし大きなファイルは別ファイルとしてバックアップ優先度を下げるほうがお勧めです。
という感じなのですが、雰囲気は伝わりますでしょうか。
横からすみません、では
> 親レコード内で子と孫の表示をしたいのですが、方法がわかりません。ポータルで試しましたがわかりませんでした。
の部分を。親レコードを表示しているレコードにポータルを配置すれば、子レコードは表示できます。その子レコード内にひとつの孫レコードがあるならリレーションのフィールドを置くだけです。これは大丈夫ですよね。
問題なのは、孫レコードが複数ある場合です。この場合の問題解決法はいくつかありますが、だいたいにおいては
1. 子レコードをクリックして孫ポータルの表示を切り替える
2. 孫レコードをLIST関数でまとめて1つのフィールドに複数レコードを表示させる
3. LIST関数を使うのは2.と同様だが、レイアウトをしやすくするため計算フィールドを繰り返しで使う
という感じでしょうか。この場合、2.、3.は親レコードのレイアウトでは更新ができません。
割とよく使うのは3.かと思います。
繰り返しフィールドというのはデータモデリングの観点では使うべきではありませんが(ここ重要です)、このように表示用としては使うことがあります。
簡単に言うと、計算フィールドに
GetValue(List(TO名::フィールド名);Get ( 計算式繰り返し位置番号 ))
という式を設定し、繰り返し数を2以上にするという手法です。
なお2.にしても3.にしてもLIST関数を使う場合は、値が空欄の場合に行が詰まる点は気を付けましょう。
という感じで全体のごく一部のみ紹介した感じですが、何かのお役に立てば幸いです。
> 一部重複しているデータがあって、その中のいくつかが重複しているデータの内一つだけ表示したい
という場合ですが、自己リレーションを使う方法がとにかく一番簡単です。手順としては、
1. レコードのプライマリキー(通し番号のことです)を付ける
2. 照合したいフィールドを計算フィールドで作成
3. 照合したいフィールドをキーにした自己リレーションを作成
4. プライマリキーで比較した式を作成
です。パートなどの処理は基本「データの表現のための処理」なので、今回についてはデータそのもので処理することになります。
以下にサンプルを用意しました。これは全国の市区町村を拾い出したものですので、キーとなっているフィールドの計算式を書き換えるだけでおっしゃられる目的にご利用になれます。
アクティブなフィールドを裏でこっそり書き換えるときに、おっしゃられるとおり「フィールドを名前で設定」は実に役立ちます。で、これでフィールド名を設定する際は、Hiroさんがおっしゃられるとおりテーブルオカレンス名から指定する必要があるのです(でないと別テーブルの同一名フィールドが処理できないためです)。
蛇足でありますが、式は
GetFieldName (Evaluate(Get ( アクティブフィールド名 )))
でも可能です。
FileMakerのデータをWebブラウザで表示させるというのは、レイアウトの表現力が増し組むのも楽になるなど、最高に幸せという点に同意します!
そのための方法ですが、これは計算フィールドでHTMLを生成するという点に付きますが、これはかなり簡単な話ですので、ぜひ行ってみてください。HTMLのちょっとした裏技を覚えるとページ制御なども可能です。
コツとしては、1レコードぶんの表示HTMLを計算フィールドで作成し、それをまとめて集計なりList関数なりで複数レコードぶんまとめる、という感じになります。また生成したHTMLはブラウザで表示してもかまいませんが、FileMakerのWebビューアに直接表示もできます。
このあたりを含め、どこが不明かを教えて頂ければ、そこを埋める情報をご提供できるかと思います。
Pages: 1
[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 570.45 KiB (Peak: 591.73 KiB) ]