みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になります。
windows10にてFM18Proを使用しています。
我流でファイルメーカーを利用していますので初心者の域から抜け出せていないものです。
また質問をさせて頂きます。よろしくお願いいたします。
フォーム形式の画面以上から新規のレコードを作成する時、初めに担当者をget(アカウント名)にてレコードに追加しています。この場合に途中で中止を行った場合そのレコードはそのまま保存されますが、これを回避する方法はどのような手法が良いのでしょうか?数項目なら変数に持たせる等で最終的のレコードに書き込みを行っていますが、フィールドがたくさんの場合はどうすればよいかご教授頂ければ幸いです。
専門的にやっている方のご意見を頂戴したいです。お時間のある時によろしくお願いいたします。
Offline
新規のレコードにアカウントを追加した瞬間からレコードが1つ増えます。
途中で中止した場合、1つのレコードをそのまま保存したくないと言うことだと解釈できます。
提案の一つとしては、新規レコードを作成する際、実レコードを作らないで入力作業を行ったらいかがでしょうか。
テーブルは全く同じフィールドが入ったものを2つ用意して、片方は入力用グローバルフィールド、もう片方は実データ用フィールドを準備する。
入力用レイアウトを作り、フィールドを全てグローバルフィールドにして、最後に保存ボタンを押した際にグローバルフィールドの値を実データのフィールドに書き込むステップを踏ませてはどうでしょう。
※自動入力は一切使わず、全てスクリプトステップで行うものとする。
Offline
新規レコード入力を中止したとき、それまでの入力を保存したい。
ですよね?
それはいつまででしょうか?
そのファイルが開いている間で、
次の新規レコード作成時までなら、
変数や、グローバルフィールドが使えます。
しかし、
一度閉じて次回開いた後とか、
次に別の新規レコードを作った後で、それまでの保存が複数レコード分
となるとそれらは使えませんよね。
Offline
「初めに担当者をget(アカウント名)にてレコードに追加しています」これを回避する方法ですよね。おそらく、レコードを作ってしまって途中でキャンセル、つぎの新規レコードを作る際に、そのレコードを流用したいt、というでしょう。
早い話が、削除してしまった方が簡単でしょうね。特に、アカウント名を自動保存して、その更新を禁止している時には、後から変更することはできません。
更新を禁止していないのでしたら、担当者以外の必ず新規レコードの時に入力されその後編集されることが無いフィールドがあるならば、担当者名を、Evaluate ( "Get ( アカウント名 )" ; フィールド ) という計算式にしておけば、いいかもしれません。そのフィールドを最後に編集したアカウント名が設定されます。
Offline
「途中で中止を行った場合そのレコードはそのまま保存されます」
レコード確定する前に「レコード削除」してしまえば保存されないです。中止の際に何かしら確定する操作(そのままFMを終了、レイアウトを切り替える、スクリプトがフィールド移動[]などで確定している、など)をしているんでしょう。
ボタンを押さないとレコードが確定されないようにonRecordCommitスクリプトを仕込む方法も考えられます。
数項目なら変数に持たせる言ってるのでアカウント名レコード追加回避だと思えなくて…
いずれにしても様々なやり方があるって事ですw
またの追加質問お待ちしています。
Offline
皆様
早速の書き込み有難うございました。
今回の質問についてはウィンのご回答が私の知りたかったことです。他の方も他のレイアウトにて私が苦戦している事項もありまたので追って追加にて質問をさせて頂きたく思っています。
新規のレコードにアカウントを追加した瞬間からレコードが1つ増えます。
途中で中止した場合、1つのレコードをそのまま保存したくないと言うことだと解釈できます。
、実レコードを作らないで入力作業を行ったらいかがでしょうか。入力用レイアウトを作り、フィールドを全てグローバルフィールドにして、最後に保存ボタンを押した際にグローバルフィールドの値を実データのフィールドに書き込むステップを踏ませてはどうでしょう。
※自動入力は一切使わず、全てスクリプトステップで行うものとする。
この方法ですが、当方素人のためお教えいただきたいですが、例えば100フィールドあったとして
テーブル仮 g_あ1 g_い1 g_う1 g_え1 ~~
テーブル保存 あ2 い2 う2 え2 ~~
とするとすべてフィールド設定でテーブル保存にレコードを一つずつ設定を行うしかないのでしょうか?
なにかこの作業をテーブル内容をすべて設定するものがあるのでしょうか?
もしあるのならこの関数をこんな感じでとお教えいただければ幸いです。
Offline
グローバルフィールドで仮入力をさせておいて、本レコードへ設定するのでしたら、普通はフィールド設定で一つずつ設定していくことになります。
それを避ける方法としては、自動入力(計算)でグローバルフィールドを参照させて入力、という方法もありますが、変に動作してしまって上書きされることも皆無ではないです。
手間を省く方法としては、設定するフィールド名のリストを作っておき、名前でフィールドを設定を使ってフィールドを設定していく、loopを組む、という方法でしょうか。
Offline
カンタンな方法は、 レイアウト設定 -> レコードの変更を自動的に保存する のチェックを外します。動作を確認してみては。
また、以下のようにすると ボタンでレコード追加・確定の処理が行えます。※例は新規ウインドウで行っています。新規ウインドウを使わない場合は、関連したスクリプトを削除。
新規レコードの入力を途中で中断とはどの様な状況でしょうか?
>専門的にやっている方のご意見を頂戴したいです。
私の場合、
必要なレコードで入力途中なら、後で検索して入力を継続
不要なレコードなら、削除 (必要で入力し始めたので削除は少ないはず)
新規レコード作成時にグローバルフィールドを作成し「保存・確定ボタン」でレコード追加と言う仕様にすると、
各テーブルでカスタム新規レコード作成処理が必要になり開発作業に手間が掛かる。
編集時のUIや処理もカスタム化する必要がある。
編集時は排他処理も心配などなど...
FileMakerの仕様を受け入れて開発した方が作業が進めやすいので「保存・確定」時のみレコード作成・更新 という処理は行っていません。
Last edited by qb_dp (2021-06-14 11:14:16)
Offline
例えば100フィールドあったとして
テーブル仮 g_あ1 g_い1 g_う1 g_え1 ~~
テーブル保存 あ2 い2 う2 え2 ~~
とするとすべてフィールド設定でテーブル保存にレコードを一つずつ設定を行うしかないのでしょうか?
その通りです。
テーブル仮 gあ1 gい1 gう1 gえ1
テーブル保存 あ1 い1 う1 え1
フィールド構造は同じ、グローバル用のフォールドの頭に「g」を付けて変更
フィールド自体は複製すれば済みますが、フィールド名の変更とグローバルの変更は1つずつの手動になります。
スクリプトステップの「フィールド設定」も各フィールド分必要になるので大変手間のかかる作業になります。
また、グローバルフィールドの初期化なども行わなければならず、開発工程を考えると現実的ではないのかもしれません。
そもそもの目的は何でしょうか?中断もしくは削除してしまった時、余計なレコードが作られてしまい、レコード番号の連番が途切れてしまい、綺麗な配列にならないと気に入らないとかでしょうか?
シリアルやID/レコード番号はいくらでも振り直しが利くので対策はあります。
余計なレコードが入っていること自体嫌悪するのであれば、入力条件を満たしていないレコードを検索、削除のスクリプトステップを踏ませるボタンを作るだけで良いです。ボタンを押さなくても、このステップすら自動にする事も可能です。
違った目的だったとしたら、手間を惜しまずチャレンジして見るのも良いと思います。
今は単一のファイルで作成していると思います。仮テーブルと実テーブルを1つのファイル内に持たせる事も可能です。(統合モデル)※今回提案した手法
それとは別にレイアウトとスクリプトを持たせたUIファイルと、データと計算フィールドを持たせたデータファイルの2つのファイルで分けた分離モデルという手法もあります。
どうせ分けてみたいと思うのであれば分離モデルで作ってみるのも手かもしれません。
もっともスタンダードな使い方で行くのであれば、qb_dpさんの提案するアプローチで試みた方が無難だと思います。
fm_jikoさんのお求めのものは分離モデルのようでいてそうではない、サマリーデータのようでそうではない、だいぶ特殊なアプローチになってしまいます。
どんなアプローチで作るにせよ、スクリプトステップや関数でワンタッチで出来るものはありません。スクリプトステップは苦労するものです。一度完成してしまえば、後はワンタッチで使用することが出来るデータベースになります。
「物事には順序がある」って気持ちで色々考えると、スクリプトステップや新たなアイデアが浮かんできたりするので頭の片隅にでも置いておいてくださいねb
最終的にどの手法で行きたいでしょうか。
Last edited by ウィン (2021-06-11 21:00:45)
Offline
カンタンな方法は、 レイアウト設定 -> レコードの変更を自動的に保存する のチェックを外します。動作を確認してみては。
新規レコードの入力を途中で中断とはどの様な状況でしょうか?
ユーザーが入力を行っていて途中で時間の都合等で中断または以前入力していたことを忘れて新規で入力を開始したなどの場合です。
Offline
カンタンな方法は、 レイアウト設定 -> レコードの変更を自動的に保存する のチェックを外します。動作を確認してみては。
また、以下のようにすると ボタンでレコード追加・確定の処理が行えます。※例は新規ウインドウで行っています。新規ウインドウを使わない場合は、関連したスクリプトを削除。
これは私が思っていたいような動作をするようです。一度これを試してみたいと思います。
有難うございます・多分途中でご協力を得るよう担うかもしれませんがよろしくお願いいたします。
Offline
そもそもの目的は何でしょうか?中断もしくは削除してしまった時、余計なレコードが作られてしまい、レコード番号の連番が途切れてしまい、綺麗な配列にならないと気に入らないとかでしょうか?
シリアルやID/レコード番号はいくらでも振り直しが利くので対策はあります。
余計なレコードが入っていること自体嫌悪するのであれば、入力条件を満たしていないレコードを検索、削除のスクリプトステップを踏ませるボタンを作るだけで良いです。ボタンを押さなくても、このステップすら自動にする事も可能です。
きれいな配列は気にしていませんが、例えば氏名だけ、次には事項1まで、次は事項3のみ、のようにゴミみたいなレコードが増えることを懸念しています。
上記でおっしゃった通り。メンテナンス用のスクリプトを管理者用として作成しようと思っています。
また統合モデルにこだわってはいないので
分離型での設計も試しに行ってみたいっと思います。
有難うございます。
Offline
ユーザーが入力を行っていて途中で時間の都合等で中断または以前入力していたことを忘れて新規で入力を開始したなどの場合です。
コレは、保存ボタンの仕様にしても解決しないのでは?
例えば、未確定フラグを立て使用者に未確定レコードがあることを明示できるようにすれば、色々も題が解決するかと...。
Offline
途中入力で放置されることが多い環境では、続きで入力が継続されることが少なく、それを妨げると強制終了、という強引な人も出てくる傾向ですね。
次のログイン時にも、未確定レコードがあることをアラートし、削除するか続きを入力するかを促すようにしておくのがいいかと思います。
Offline
fm_jiko wrote:ユーザーが入力を行っていて途中で時間の都合等で中断または以前入力していたことを忘れて新規で入力を開始したなどの場合です。
コレは、保存ボタンの仕様にしても解決しないのでは?
例えば、未確定フラグを立て使用者に未確定レコードがあることを明示できるようにすれば、色々も題が解決するかと...。
未完成のレコードが増えてきたらそのようにし負ければいけないと思いました。運用してみて改善してみます。
頂いた内容での改良を試みています。
貴重なご指導有難うございました。
Offline
途中入力で放置されることが多い環境では、続きで入力が継続されることが少なく、それを妨げると強制終了、という強引な人も出てくる傾向ですね。
次のログイン時にも、未確定レコードがあることをアラートし、削除するか続きを入力するかを促すようにしておくのがいいかと思います。
知識があればそのように行って2重くらいの安全策を考えるのですが、今後の改良を試みています。
有難うございます。
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 569.08 KiB (Peak: 589.62 KiB) ]