みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Win10 FMP18
いつもお世話になります。
現在、レイアウト上に100フィールドあるとします。新規レコードを作り、
作成者が文字を入力する場合は黒、それ以外の者が入力する場合は赤にす
るという風にしたい場合、私の場合は条件付きの設定で行おうと思ってい
ます。ただ、全てのフィールドに適用する場合、100フィールドに対して
1個づつ条件付きの設定を変更する必要がありますか?厳密には、100個を
全部選択してから行うつもりですが、その作業を4つのレイアウトに対し
て行う必要があるのでかなり難儀します・・・。それとも、何か全く別の
方法で一気に出来たり出来ますか?
追記:オブジェクトフィールドを選ぶという事であれば、オブジェクトパ
ネルから選ぶ事は出来るので、無理であればこちらからオブジェクトは選
べますね。これなら一気に条件付きの設定は可能ですが、別の方法があれ
ば嬉しいです。
追記2:当初は条件付きの設定で行おうと思っていましたが、この場合はユー
ザが変更する度に赤に表示されたり、黒に表示されたりしますね?!これ
はどうすれば良いでしょうか?どのユーザーが見ても作成者が作った場合
は黒、それ以外が編集した場合は赤にしたいです。
Get ( アカウント名 ) ≠ 作成者
タイトルとは別の質問を同時にしてしまい申し訳ないです。一旦削除しよ
うかと思いましたが、削除の方法が分らずとりあえず追記しました。
では、宜しくお願いします。
Last edited by げっさん (2021-08-18 11:34:53)
Offline
標準では設定する対象のレイアウトオブジェクト(フィールド・ボタン等)を選択せずに条件付き書式を設定することはできません。
別の方法というのは「レイアウト上のフィールドに条件付き書式を一括設定」のような機能でしょうか?
レイアウトをコピーすると特殊な XML 形式でコピーされるので
それを編集する外部ツールを使えば選択しなくても条件付き書式を一括で設定できるかも知れません。
(条件付き書式の XML を解析する手間があるので楽かはどうか分かりませんが)
Offline
Mozさん
お世話になります。
標準では設定する対象のレイアウトオブジェクト(フィールド・ボタン等)を選択せずに条件付き書式を設定することはできません。
そらそうですよね。
別の方法というのは「レイアウト上のフィールドに条件付き書式を一括設定」のような機能でしょうか?
ごめんなさい。ここがさらっと書いてしまったので分りづらいですよね?!
要は条件付き書式の設定を使わずとも、別の方法でまとめてフィールドに
対して命令といいますか、条件を付けられないかという意味でした。
ファイルに対してのスクリプトトリガで実現出来ないかと思っていました
が、私が思っているような動きをしてくれるスクリプトが見当たらなかっ
たので諦めました。
(条件付き書式の XML を解析する手間があるので楽かはどうか分かりませんが)
これは手間というよりも私には出来そうにないですね・・・。
ありがとうございます。
Offline
同じ条件でいいのでしたら、レイアウトで、複数のオブジェクトを選択しておき、条件付き書式を設定するといいのですが。
> 作成者が文字を入力する場合は黒、それ以外の者が入力する場合は赤にする
という条件を、同じ式で実現できるかどうかですね。
Offline
複数のレイアウトオブジェクトに同じ条件付き書式を設定するだけなら #1 で質問者さん自身も書かれていますし
#4 でShinさんも書かれているように複数選択しておけば可能です。
作成者が文字を入力する場合は黒、それ以外の者が入力する場合は赤にする
これは単純に考えれば共通化できますが(作成者・変更者)、レコード単位での最後の変更者との比較しかできません。
・フィールド毎に作成者と変更者を評価したい
・変更履歴の中で作成者以外が変更しているかも評価したい
・変更するつもりで結果しなかった(同じ値に戻した)ときは変更者として評価しない
などなど運用ルールが細かくなるほど面倒になります。
なお、入力した場合は条件付き書式で色を変えられますが、
入力する(している)場合には条件付き書式が反映されません。
入力中も色を変えたいならフィールドそのもののスタイル(フォーカス)を変えることになりますね。
Offline
誰が入力したかをフィールドごとのデータに保存されるわけでないので、条件付き書式では無理でしょう。
onObjectSaveだと思いますが、スクリプトトリガでデータとして文字色を追加しないとだめなのでは。
Shinさん
お世話になります。
同じ条件でいいのでしたら、レイアウトで、複数のオブジェクトを選択しておき、条件付き書式を設定するといいのですが。
ですよね。元々、複数のオブジェクトを選択するのが面倒なんでその方法を教えて欲しいという質問だったんですが、
> 作成者が文字を入力する場合は黒、それ以外の者が入力する場合は赤にする
という条件を、同じ式で実現できるかどうかですね。
こちらの問題にぶち当たってしまいました・・・。
Offline
Mozさん
お世話になります。
複数のレイアウトオブジェクトに同じ条件付き書式を設定するだけなら #1 で質問者さん自身も書かれていますし
#4 でShinさんも書かれているように複数選択しておけば可能です。
そうですよね、これは問題ないと後で気付きました。
・フィールド毎に作成者と変更者を評価したい
・変更履歴の中で作成者以外が変更しているかも評価したい
・変更するつもりで結果しなかった(同じ値に戻した)ときは変更者として評価しない
などなど運用ルールが細かくなるほど面倒になります。
ややこしいので、基本は「フィールド毎に作成者と変更者を評価したい」だけでも大丈夫です。
なお、入力した場合は条件付き書式で色を変えられますが、
入力する(している)場合には条件付き書式が反映されません。
入力中も色を変えたいならフィールドそのもののスタイル(フォーカス)を変えることになりますね。
あくまでも、入力後で大丈夫です。
ただ、どのアカウントでみても黒 or 赤という風にしたいので、条件付き書式では無理ですよね?!
Offline
himadaneeさん
お世話になります。
誰が入力したかをフィールドごとのデータに保存されるわけでないので、条件付き書式では無理でしょう。
言い方を変えれば、もしその条件が保存出来れば可能という事でしょうか?
onObjectSaveだと思いますが、スクリプトトリガでデータとして文字色を追加しないとだめなのでは。
私もスクリプトトリガーで行う方法を考えましたが、スクリプトで文字色を変えるという命令は出来ませんよね?!
Offline
自己レスです。
作成者が文字を入力する場合は黒、それ以外の者が入力する場合は赤にする
こちらの内容を別のトピックに作成し改めて質問したところ、Shinさんの回答を参考にして、条件付き書式で以下のような式で求められる事が分りました。
作成者 ≠ Evaluate ( " 修正者 " ; [フィールド] )
ここから本来の質問となるんですが、この式の場合は[フィールド]をそれぞれのフィールド毎に名前を変える必要があるので1つ1つ手作業で進める必要がありますよね?!
となると、やはり約100個もフィールドがあった場合、それに対して一つ一つ行うのはめちゃくちゃ手間ですよね・・・。
改めて、どのようにすれば良いのか、皆さんのお知恵を貸して下さい。
Last edited by げっさん (2021-08-18 14:47:54)
Offline
その計算式はフィールドごとに違う値にはならないので、だめだと思いますが
スクリプトで文字色を指定するのは、TextColor()関数でフィールド設定します。
当然ながら、条件によって黒か赤で上書きされるので、フィールド値に任意の色を指定することはできなくなります。
> ここから本来の質問となるんですが、この式の場合は[フィールド]をそれぞれのフィールド毎に名前を変える必要があるので1つ1つ手作業で進める必要がありますよね?!
> となると、やはり約100個もフィールドがあった場合、それに対して一つ一つ行うのはめちゃくちゃ手間ですよね・・・。
その通りですが、フィールドの定義やレイアウトへの配置は、Mozさんが#2で書かれているように、コピーしてツールで加工、ペースト、という手があるので、完全に100回の作業が必要、というわけではないです。Excelなどを利用して、一挙に作ってしまう、ということもできなくはないです。
ロボットにやらせる、という手もありますよ。
Offline
himadaneeさん
お世話になります。
その計算式はフィールドごとに違う値にはならないので、だめだと思いますが
そうですよね・・・。なんで、諦めて一つ一つ選んでやってます。
スクリプトで文字色を指定するのは、TextColor()関数でフィールド設定します。
一瞬、このTextColor()関数を利用してトリガー設定しようと試みましたが、どう考えても無理っぽいです・・・。
でも、TextColor()関数があるというだけでも分って良かったです。一生懸命スクリプトで調べてしまってたので、全く見つけられず終いでした。
ありがとうございます。
Offline
ここから本来の質問となるんですが、この式の場合は[フィールド]をそれぞれのフィールド毎に名前を変える必要があるので1つ1つ手作業で進める必要がありますよね?!
となると、やはり約100個もフィールドがあった場合、それに対して一つ一つ行うのはめちゃくちゃ手間ですよね・・・。
考え方は様々ありますが、開発する目的は開発者のためではなく、利用者のためでは?
質問者さんが100個のフィールドにひとつひとつ設定する手間を掛けた分の恩恵が利用者にはあるでしょう。
100個のフィールドへの設定は1回きりですが、作ったものは幾度となく使われるのですよ。
逆にその手間を掛けても恩恵がない(開発者が知りたいだけとか......)なら実装しないという選択肢もあります。
#2 で紹介したように反復作業によるミスを防ぐための手段が無いわけではありません。
(ひとつひとつに違う条件を設定する必要があるならミスのリスクはゼロにはできません)
Offline
Shinさん
お世話になります。
その通りですが、フィールドの定義やレイアウトへの配置は、Mozさんが#2で書かれているように、コピーしてツールで加工、ペースト、という手があるので、完全に100回の作業が必要、というわけではないです。Excelなどを利用して、一挙に作ってしまう、ということもできなくはないです。
なるほど、内容的に私にはハードルが高すぎて、正直どうのようにすれば良いのか検討も付きません・・・。
でも、Shinさんの過去ログの中で、
コピー先のオブジェクト(複数でも可)と、コピー元を選択し、条件付き書式を開きます。これだけ。
というのを見つけました!!昨日から諦めて手動で行っていましたが、計
算式はコピペで出来るので大丈夫なんですが、どうしても書式を手動で選
ぶのが手間で仕方が無かったので、こちらですと一番面倒な書式がコピペ
しているのでかなり楽になりまいした!!
これで約100個のフィールドに対しても半分の労力で出来ますのでかなり
楽です。
本当にありがとうございます!!
P.S.黒←→赤問題も解決したので本当に助かりました!!
Offline
Mozさん
お世話になります。
考え方は様々ありますが、開発する目的は開発者のためではなく、利用者のためでは?
質問者さんが100個のフィールドにひとつひとつ設定する手間を掛けた分の恩恵が利用者にはあるでしょう。
100個のフィールドへの設定は1回きりですが、作ったものは幾度となく使われるのですよ。
おっしゃる通りですね。まさしく今回の面倒という発想はどちらかという
と、開発する者としてそのような機能があれば今後応用が利くなぁと思っ
て質問をさせて頂きました。ただ、Mozさんの方法は私にはハードルが高
いと思って、実は既に一つ一つ選んで行っておりました。
本当に私は今回の1回きりですが、利用者は何度も何度も使いますもんね。
この言葉は今後の開発するにあたっても身に染みる言葉です。
逆にその手間を掛けても恩恵がない(開発者が知りたいだけとか......)なら実装しないという選択肢もあります。
う~ん、ここが正直分らない部分で、実際に私がこの機能を実装したとこ
ろで使ってもらえるかどうかはまだ分らないんです。ただ、あったら便利
だと思って事前に実装しておこうと思いました。やはり、これも利用者の
事を考えると、万が一使わなくても自身が利用者になった時に便利だと絶
対に思えるので実装します。
#2 で紹介したように反復作業によるミスを防ぐための手段が無いわけではありません。
(ひとつひとつに違う条件を設定する必要があるならミスのリスクはゼロにはできません)
これは昨日やってて思いました。特にカラーの設定はコピペしていないの
で、正直間違ってる気がしてなりませんでした。が、Shinさんの過去ログ
を拝見してその問題も一部解消されそうです。
最後に、このトピックに対して自分なりに解決したと思ったのでMozさん
にもお礼のコメントをしなければと思っていたところ、新たにコメント頂
けたので返信させて頂きました。
本当に今回も勉強になりました。ありがとうございます!!
Offline
文字色の変更ではなく、塗りつぶし色の変更でしたら、かなり簡単に作れます。(環境に依存する可能性がありますが)
Field1に対して、計算フィールド Chen1 [ = Evaluate ( "Get ( アカウント名 )" ; Field1 ] を作ります。Field1 が編集されれば、そのアカウント名が記録されます。
レイアウト上で、Field1 の塗りつぶしをなしにしておき、その背面に Chen1を配置します。Chen1 には条件付き書式で、self ≠ 作成者 の条件で塗りつぶしを設定しておきます。(文字も見えないように適当に処理)これで、編集されたフィールドは、塗りつぶしで見えます。簡単な設定ですので、100くらいでしたら、ツールを使えば、Excel でフィールドを作って、レイアウトへペーストできます。
そのツールは、
https://fm-aid.com/bbs2/viewtopic.php?id=8866
に紹介されています。
または、Field1 オブジェクトを2個用意して、片方には Chen1 = 作成者、もう一方には Chen1 ≠ 作成者 という条件でオブジェクトを隠します。前者に書式を設定しておけばいかがでしょう。これでしたら、レイアウト上のフィールドをまとめて選択して設定、選択したまま複製して設定、まとめて位置を合わせれば終わりです。
もっと簡単でいいのでしたら、そのフィールドの後ろにでも、最終編集をかけたアカウント名を表示させておく、というのでもいいのでは。
Last edited by Shin (2021-08-19 11:40:31)
Offline
Shinさん
色々考えて下さってありがとうございます。一度、Shinさんのおっしゃる
ツールをダウンロードして使った事があるのですが、正直私にはコピペし
た内容自体を理解出来なかったので諦めました・・・。
今回も折角なので懲りずにやってみましたが、やはり無理でした・・・。
で、実は私がShinさんに解決したとお伝えした以下の式、
作成者 ≠ Evaluate ( " 修正者 " ; [フィールド] )
これが致命的なミスをしている事に気付きました。
条件付き書式で設定した場合、変更したフィールド以外がアカウントを変
更する度に赤になったり黒になったりして本末転倒の結果になりました。
やはり、まだまだ甘かったですね・・・。
これに懲りずに色々試してみると、本当の意味での解決を導き出せました!!
今回ばかりは自分自身を褒めてやりたいです。別のコメントで投稿します
ので、良かったら見て下さい。
いつも本当にありがとうございます!!
Offline
自己レスです。
既に「解決」となっていましたが、実は致命的なミスを発見してしまい、
まだ未解決のままでしたが、何度も質問するのはどうかと思って自分自身
で今回頂いた内容を見返して色々試してみると、見事に本当に解決しまし
た!!
誰が入力したかをフィールドごとのデータに保存されるわけでないので、条件付き書式では無理でしょう。
onObjectSaveだと思いますが、スクリプトトリガでデータとして文字色を追加しないとだめなのでは。スクリプトで文字色を指定するのは、TextColor()関数でフィールド設定します。
himadaneeさんがおっしゃていた上記二つを組み合わせて以下のようにす
れば出来ました!!
onObjectSaveで以下のスクリプトを選択
<文字色変更スクリプト>
If [作成者 = Get ( アカウント名 )]
フィールド設定 [TextColor ( Get ( アクティブフィールド内容 ) ; RGB ( 0 ; 0 ; 0 ) )
Elese
フィールド設定 [TextColor ( Get ( アクティブフィールド内容 ) ; RGB ( 255 ; 0 ; 0 ) )
End If
何より楽なのが、今回は全ての対象フィールドを選択し、上記スクリプト
を[スクリプトトリガ設定]から選択すれば良いだけというオマケつきで、
本当に一瞬で出来るようになりました!!
今回、このトピックに携わって頂いたShinさん、Mozさん、himadaneeさん
に感謝致します。
本当にありがとうございます!!
P.S.これが出来た瞬間、誰にもこの達成感を分かち合うことが出来ず、一人
心の中で喜びを爆発させてしまいました。(笑)
Offline
TextColor()関数でフィールド設定すると、データそのものを触っていますので、別のレイアウトでも同じ書式で表示されてしまいます。
経験上、別のレイアウトで、別の条件での条件付き書式を使おうとしても作働しない、と慌てることがありますので、注意が必要です。
Offline
Pages: 1
[ Generated in 0.011 seconds, 9 queries executed - Memory usage: 657.46 KiB (Peak: 690.37 KiB) ]