みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
サーバー:FileMaker Cloud クライアント:Windows10 FileMaker Pro Ver19.3
初めて投稿します、FileMakerで開発を始め、半年くらいの初心者です。
過去Q&Aなどを参照しましたが、実現できる方法を発見・思いつかず、質問致します。
委託販売を管理するシステムで、委託した商品がいくらで売れたか金額を入力する画面を作成しました。
構成として、
レイアウトはグローバルフィールド主体で構成されたユーティリティテーブル、グローバルフィールドの納品日、得意先コードの入力フィールドを配置
納品日、得意先コードでリレーションされた、
商品コード、数量、結果金額フィールドなどを含む、商品明細テーブルをポータル表示し、ポータル内の複数商品レコードの結果金額フィールドに金額を手入力、
また、スクリプトトリガ:OnRecodeCommit を使い「登録」「キャンセル」ボタンで、コミット制御をしています。
先日、この構成だと、納品日、得意先が違っても、ロックされ複数人同時入力が出来ない事が分かりました。
(納品日、得意先に紐づくレコードのみロックされると思っていました)
そこで、ポータル表示ではなく、リスト形式で表示させ入力できないかと思いましたが、
こちらは、1レコードごとにCommitが必要なようで、複数レコードの一括登録、キャンセルが出来ないようです。
編集用のグローバルフィールドを配置する案もありますが、日によって、数件~数十件と変動するため、準備したレコード数以上だと対応できません。
商品明細テーブルに結果を保存しなくても良いので、結果保存用のテーブルを新規作成して実現できるならそれでOKです。
複数人でそれぞれの条件で絞り込んだ複数レコードを入力できる、良い方法がございましたらご教示お願い致します。
Offline
入力者ごと、日付ごとのテーブルから作業させればいいでしょうね。
Offline
Shin 様 ご回答ありがとうございます。
なるほど・・・
ユーティリティテーブルの日付、得意先コードのグローバルフィールドで商品明細テーブルとリレーションしている方法から、
日付、入力者ごとのテーブルを作成し、このテーブルと商品明細テーブルをリレーションする、という方法ですね
早速試してみて、結果をご報告致します。
Offline
同じレコードを編集するから衝突するんで、ユーティリティテーブルに入力者ごとのレコードを作れば、グローバルフィールドのままでいいはずです。
himadanee 様 ご回答ありがとうございます
経過報告です
リレーション元である、ユーティリティテーブルは、1レコードで運用している為、
Shin様の回答と、過去Q&Aから、この1レコードがロックされているのが原因と考え、
Shin様の回答を自分なりに解釈し、
入力用のユーティリティテーブルを作成、グローバルフィールドの日付と得意先コード、入力者フィールドを作成、入力者数分のレコードを作成しました。
ここで、入力用ユーティリティ::入力者=商品明細::入力者 でリレーションすると良いかと考え、
商品明細側には、入力者フィールドは無い為、グローバルフィールドのg_入力者を作成、
日付、得意先コード入力時のスクリプトトリガで、商品明細::g_入力者にユーザー名をセット
ただ参照先がグローバルフィールドの為、リレーションは無効であることに気づき、
試しにポータルフィルタで絞り込んだ場合でも、親レコード側のロックも変化するのか?の検証で、
ポータルフィルタに「入力用ユーティリティ::入力者=商品明細::g_入力者」を設定しました。
ただこの設定だと、入力者1では商品明細の一覧がポータル表示されますが、入力者2では一覧表示がされません。
フォームに設定しているグローバルフィールドの日付、得意先コードが入力者1側のレコードを参照している事が原因と思われ、
どうしようか検討している状況です。
Offline
検証結果の報告です
とりあえず、フォームに設定しているグローバルフィールドの日付、得意先コードのレコードを
メニューバーの「次のレコードに移動」で移動し、ポータルにはフィルタで入力者を指定して表示させた一覧に対して、
入力してみた所、ロックはかからず、無事、複数人での入力が出来ました。
入力フォームの入力者ごとレコード設定は別途検討するとして、
複数人での複数レコード入力は解決致しました。
Shin 様、himadanee 様、大変助かりました。ありがとうございました。
Offline
もう解決済みのようですが、同じ落とし穴にはまったことのある人間の意見が参考になれば。
ユーティリティテーブルの1レコード運用の何が問題かといいますと、1つのレコードでは同時に複数人が編集する場合、たとえグローバルフィールドによるリレーションであっても(リレーションの照合先が別であっても)
検証元(ユーティリティテーブルのレコード)が同一であるためロックがかかるわけです。
これの回避方法としては
①ログイン時にユーティリティテーブルにレコードを作成、ファイルを閉じる際に当該レコードの削除
②ユーザ分だけレコード作成し、どのレコードをどのユーザが使用するか決める枠組みを作り、ログイン時に検索等で振り分ける。
が考えられます。上記の二つはどちらも一長一短です。
この方法を利用すればPiroさんが元々使用していたスキーマを変更することなく複数人での編集が可能になるはずです。
Offline
ブランコ 様 分かりやすい補足説明ありがとうございます。
ちなみに、今回私が対応した回避方法は、
②ユーザー分だけレコード作成し振り分ける方法を利用しております。
確かに、①の方法もありますね。思いつきませんでした。
FileMakerは、FileMaker独自の仕様の把握と、発想次第で、色々な実装方法、速度改善が出来る事を、最近ヒシヒシと感じております。
また、どう考えても思いつかない、実現できない時は、ご相談させて頂きます。
Offline
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 572.66 KiB (Peak: 589.87 KiB) ]