見出し画像

変更させたくないけど、コピーはしたい

売上確定後の伝票レコードなど、変更はされたくない、でもそこに書いてある内容をコピーだけしたい、ということはよくあることではないでしょうか?
自分もそういうリクエストをたまにいただきます。今までだとWebビューアを配置してそこでコピーしてもらっていたのですが、今回はスクリプトトリガを使うことで解決しました。

FileMakerには編集を行うためのモードである、ブラウズモードと検索するための検索モードでフィールドに入力できるかどうか設定できます。
残念ながら、レコードのデータによって切り分けることはできません。
あるいは、カーソルの入るフィールドと入らないフィールドを置いて、「次の場合にオブジェクトを隠す」を設定することで。切り替えできます。ただ、重なっているとレイアウト修正に手間取りそうです。

前提条件

レコードの特定のフィールドの値が1の場合は、レコード編集ができないアクセス権を作ります。こうしておくと、たとえ失敗したとしても間違えて書き換えられることがないので安心です。
今回のは場合は、アクセス権設定で、[データ入力のみ]アクセス権を複製して、[データ入力のみ削除なし]というアクセス権を作成しました。
設定としては、レコードのアクセス権で編集にカスタムアクセス権を設定しました。
complete_flgが1以外の時は変更できる、という設定です。
図の中で、「not flg_complete」というのはflg_completeフィールドの値が1ではない、という意味です。
userというアカウントにこのアクセス権を設定しました。

2023-02-20追記
2023-02-18のミンキーでカスタムアクセス権を設定しておくと、もう一ついいことがあると教えてもらいました。
フィールドにカーソル入れた後、右クリックしても「カット」と「ペースト」が利用できなくなります。

アクセス権の設定
アクセス権の設定内容

利用するスクリプト

スクリプト1 : フィールド全選択
flg_complete フィールドが1なら「全てを選択」スクリプトが実行され、flg_complete フィールドが0の時は何も起きません。

If [ テーブル::flg_complete ]
全てを選択
End If
現在のスクリプト終了 [ テキスト結果:    ]

スクリプト2 : 編集停止
flg_complete フィールドが1ならレコード確定されフィールドがカーソルが外れます。flg_complete フィールドが0の場合は何も起きません。

If [ テーブル::flg_complete ]
レコード/検索条件確定 [ ダイアログあり: オン ]
End If
現在のスクリプト終了 [ テキスト結果: "false" ]

レイアウトにフィールドを置いただけの場合

フィールドで何かキーを打つと図のようにアラートが出ます。キーを打たないようにすれば、選択してコピーできます。が、何かの拍子にキーを打ってしまうとアラートが出ます。別に変更しようとしているわけでもないのに鬱陶しいですね。

普通のフィールドの場合
何も設定されていないフィールドの場合

スクリプトトリガを仕込む

今度はスクリプトトリガをフィールドに設定してみます。
OnObjectEnterに「フィールド全選択」を指定します。
フィールドにカーソルが入るとスクリプトが発火します。
OnObjectKeystrokeに「編集停止」スクリプトを設定します。
何かキーを打つとスクリプトが発火します。

スクリプトトリガの設定内容
スクリプトトリガの設定

この設定ですと、カーソルの移動ではアラートが出ません。キーを打つとフィールドが静かに外してくれます。

おまけ

確定したら、カーソルをフィールドに入れさせたくない、という場合は、onObjectEnterに「編集停止」スクリプトを割り当てます。

スクリプトトリガ設定
スクリプトトリガの設定方法

以上です。利用したファイルを添付しておきます。
完全アクセス権のアカウント名/パスワード
admin / admin
userアカウントはパスワードありません。

何かの役に立てればいいなぁ。



この記事が気に入ったらサポートをしてみませんか?