みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になります。
グローバルオブジェクト(写真)上に配置したボタン名の文字種類をスクリプトで変更することは可能でしょうか。
条件書式でやってみたのですが、全てのボタンが対象になってしまい上手く行きません。
ボタンオブジェクト名を指定し、ボタン名のフォントを変更または、太文字にしたいです。
使用しているのはFMP19でウィンドウズです。
よろしくお願いします。
オブジェクト名を指定できるのは取得関数とかオブジェクトへ移動なので、それを使って変更はできないのでは。
フォント変更は、ボタンでなくボタンバーなら計算式で表示内容を指定できます。
変更対象とするボタンのUUIDを変数にリストで入れていき、条件を
FilterValues ( LayoutObjectUUID ; $$ListOfLayoutObjectUUID ) <> ""
のようにすればできそうですが、オブジェクトのUUIDを取得するのがめんどくさいですね。
テキストボックスをボタンかしたものでしたら、条件付き書式が使えますよ。
Offline
条件付き書式は普通にボタンを作っても使えるんですが、オブジェクト名を条件に入れるというか、スクリプトでそれをどうやって動的に変更するかということなのです。
普通のボタンでもマージフィールド<<フィールド名>>とかマージ変数{{UUID}}とか、ラベルに使えます。
ボタンごとに、ボタンオブジェクト名を取り出して、条件設定の中に埋め込んでいくしかないのでは。
面倒ならば、ボタンをレイアウトモードでコピーして、xmlを編集すれば、ある程度自動化できますよ。
Offline
もう少し「目的」をしっかり書いてみては。
ボタン上のテキストのフォント・スタイルの変更は「条件付き書式」で可能です。
フィールド値で条件となるモノがあるのでは?あればそれを条件に指定できます。
フィールド値と無関係ならグローバル変数を条件にして「条件付き書式」で指定可能です。スクリプトでグローバル変数の値を設定すればよいです。
※スクリプトの場合「ウインドウ内容の再表示」、または、「オブジェクトの更新」を実行しないと「条件付き書式」が反映されない事があります。
Offline
スクリプトで制御するにしても、そもそもの条件がわかりません…
ボタンの作り方にもいくつか方法があります。
ツールバーの中で選択するボタン、ポップオーバーボタン、複数横並びに作るボタンバー
テキストボックスからボタングループに変更する、画像をボタンにするなど、用途に合わせて様々なアプローチがあります。
基本構造のものやテキストを駆使して、思っているようなモノを作るためには応用と工夫が必要になる場合があります。
書式設定関数なるものがあります。その組み合わせ方によっては、理想のものが出来る可能性がありますね。
書式設定関数
https://help.claris.com/ja/pro-help/con … tions.html
書式設定関数の応用
https://ywc.com/filemaker/?p=243
qb_dpさんが言うように「目的」や「目標」をしっかり記述していただかないことにはどうにもなりません。
Offline
皆さまアドバイスありがとうございます。
説明が不足しておりましたので再度説明をいたします。
現在、Filemaker GOを使って過年度の点検記録を見ながら新規点検記録を行いたいと考えています。
テーブル及びレイアウトは以下です。
T1_2018年度点検記録
・ID
・損傷写真番号
・損傷平面図(グローバル)
・損傷写真(オブジェクト)
・チェックボックス
T2_2020年度点検記録(2018年度テーブルを複製したもの)
・ID
・損傷写真番号
・損傷平面図(グローバル)
・損傷写真(オブジェクト)
・チェックボックス
レイアウトは以下
L1_点検入力用
・T2_IDとT1IDでリレーションをしたもの。
L2_損傷図
・2018年度の損傷平面図
L2_損傷図レイアウトには、損傷平面図を下敷きにボタンオブジェクト名に損傷写真番号を
割り振ったボタンを配置(50個から300個程度)
ボタンを押すとL1レイアウトに移動し、損傷写真番号のレコードを検索するスクリプトを
設定しました。
L1レイアウトに移動後は、2018年度の損傷写真を確認したのち、同じ構図で2020年度の写真を撮影します。
写真を撮り終えたらチェックボックにチェックを入れ、L1レイアウトに配置したボタンからL2_損傷図へ移動します。
L1レイアウトに戻った際、チェックボックスのチェックを元に条件書式でボタンの色を変え、点検済がわかるように
したいと考えました。
一応、色を変えることは出来るのですが、別のボタンを選択するとそれまでの条件がクリアになるようでもとに戻ってしまいます。
そのような訳で、スクリプトでオブジェクトを指定し無理矢理文字又は背景色を変えることが出来ないかと考えた次第です。
どうかお知恵をお貸しください。
どんなボタンを配置しているのか分かりませんが、基本的に1度決めた条件がクリアになるような事はないはずです。条件を失うような構造になっていると考えられます。
どのような条件式を組まれているのか記述してください。
Offline
年度ごとにテーブルを作っていく構造が、まず大きな間違い。
ざっと見て、
IDごとに名称や図面を保存するテーブル、
年度のごとの点検日、
担当者などを保存するテーブル、
点検の位置ごと(ボタンごと)の点検結果を保存するテーブル
で構成するのがいいでしょう。
ボタンの代わりに大きな繰り返しフィールドにしておき、位置ごとの結果でラベルを表示させればいいかと思います。
Offline
ウィンさま
条件書式で チェックボックス = 1 としました。
この場合指定したいオブジェクトボタン以外のボタンも色が変わってしまいます。
オブジェクトボタンの指定がされていないので一つのレコードのチェックボックスのチェックにより
一斉に入切りが行われるようです。
Shinさま
当初は1テーブルでやっていたのですが、ポータルの使い方がいまいち理解できていないことから
安易に2つのテーブルでやってみることにした次第です。
>ボタンの代わりに大きな繰り返しフィールドにしておき、位置ごとの結果でラベルを表示させればいいかと思います。
上記はどのような手順で行えば良いのでしょか。教えていただけないでしょうか。
レコード数分のボタンが必要なレイアウトのようで、どう実装するのが最善か急には思いつきませんが
とりあえず、ボタンのオブジェクト名をレコードのIDにしてあれば、条件書式の条件は
ExecuteSQL(”
SELECT \"チェックボックス\"
FROM \"T2_2020年度点検記録\"
WHERE \"ID\"=?
";"";""; "オブジェクト名") <>""
のような感じでできそうですが。
(参照したいのが2020なのか2018なのかちょっとよくわかりません。)
「条件書式で チェックボックス = 1 としました」の代りに、該当のレコードのチェックボックスを参照する計算式です。
レコードに記録されたデータ一旦そのままにしておき、新たなデータベース構造を持ったものに作り直したほうが良いかもしれません。
FileMakerは独創的な構造で作ってもある程度は対応できます。様々なアプローチで開発出来る事から作り手によって大きな違いや珍しい仕組みを持ったものを作ることができます。
しかし、どんな工法にも基本構造があるようにFileMakerにも定石となるような構造があります。そこから拡張していくのが望ましいと思います。
Shinさんの言うように年度毎のテーブル構造はマズイです。
これを機に構造そのものを見直し、作り直しましょう!
元のファイルからデータをインポートすれば、過去データはどうにかなるでしょう。
Offline
himadaneeさん
回答ありがとうございます。
文字の色を変更することはできましたが、チェックボックスとの連動が
できませんでした。
SELECT,FORM等の設定を変えていろいろやってみましたが思ったように
はなりませんでした。なぜそのような設定(対象の選択)を行うかと
いった基本的な知識が欠けているためこの方法は難しそうです。
ちなみに、FMPを使う前はACCESSを独学で勉強していましたがSQL文が理解できませんでした。
違う方法を考えみたいと思います。
ウィンさま
アドバイス有難うございます。
テーブルを一つにしたいのですが、1つのテーブルにした時、異なった年度の
同じ損傷写真を並べて表示させることができないため2つのテーブルにしています。
点検作業中に過年度の写真を見ながら新年度の点検をおこないためこうしたやり方を
している次第です。
一つのテーブルで2つのレコードを表示させる方法について、ここで質問して良いでしょうか。
それとも新規トピックをたてたほうが良いでしょうか。
ここで良いのではないでしょうか。
なんの損傷平面図なのでしょうか?差し支えがなければ教えてください。
またFileMakerGoを使用しているデバイス(機器)はなんでしょうか?
写真はFileMakerGoを走らせているデバイスで撮影する感じですか?
比較点検の為の構造とデザインを考えてみます。
Offline
ウィンさま
早速の返信をいただきまして、ありがとうございます。
損傷平面図とは建物の平面図です。
点検作業でipadを使い、写真撮影はipadのカメラを使用したいと考えています。
点検作業は屋根などの場合、まずは過年度点検で確認されている樋や防水等の損傷進行の有無を確認し記録(写真・メモ)をとります。
そののち、新規の損傷の有無を確認し、新しく確認されれば記録を追加するといった手順になります。
これまでは、印刷した過年度点検調書(点検記録で損傷平面図、写真、メモ等が記載)を参照しながらその都度、ペンで損傷位置や
デジカメで撮影した写真番号をメモしています。
現在、この一連の作業をipad使って置き換えようとしています。
実は、すでに試験的に行っておりまして、FMPで作成した過年度点検調書を参照しながら写真撮影および状況の記録ができることで
作業能率が良くなったと感じております。
ただ、使っているうちにいろいろ不具合が発生し、それを一つずつ潰している状況です。
そのなかでどうしても解決ができないのが、点検済のチェック確認です。
損傷の確認作業では、まず損傷平面図で損傷位置を確認したのち、該当する損傷記録(レコード)を探し過年度との比較、写真撮影を
行うことから、損傷平面図の損傷位置にボタンを配置し、それに該当する損傷レコードに移動する方法を考えました。
また、損傷レコードから損傷図ボタンへの移動もできるようにし、ボタンがアクティブになった場合、背景色が変わるようにして損傷位置が
わかるようにしました。
損傷レコードには、チェックボックスを設け、点検実施・未実施が分かるようにしましたが、損傷図においてもそれと同様に
ボタンの文字または背景色が変わることで実施・未実施がわかるようにしたいと考えた次第です。
改善の方法がありましたらご教授ください。
ここでの掲示板は、必要になった時に必要な手法を学んで自身のソリューションに取り込みながら作り込んでいく場合が主だと思います。
その他には、分かりやすく説明する場合などにサンプルを作って上げて導いて行く場合があります。
中には自身のソリューションをデータを抜いた状態でオープンソースのようにして公開する人も中にはいます。
今回改善するために、何が最善なのか…
構造と点検比較の為のサムネイル画面、点検済みボタン配置、スクリプトステップなど見本となるようなファイルをアップして上げたらいいのか。(求めるデザインと大きくかけ離れたものになる可能性が高いです。)
またテーブルオカレンスやポータルの使い方など、不慣れな人が見本ファイルを基に自身のファイルに構造を取り込めるのか…
試験的に導入しているファイルに手を加えてあげたらいいのか…
サンプルを出してあげて、質問者に独自性を引き上げてあげるきっかけを与えるだけでいいのか…
そもそもの構造が間違っている。作り直したほうが良いと言うのは簡単です。言われた側はどうしていいかわからなくなる気持ちが痛いほど分かります。
そこまで長文で相談してくると言うことは、以前の自分もそうだったように、貴殿もかなり深刻なお気持ちである事も理解しています。
テーブルの構造に問題がある中、試験的に運用が開始されているのであれば、現ソリューションに開発者を参加させるのが一番手っ取り早いのではないかとも考えます。
頼りにならない回答ですいません。
名前(ウィン)をクリックするとメール連絡が出来るようになってます。何かお力になれるかもしれないので連絡をしてくださっても構いません。
ここの掲示板では僕も随分助けて頂いたので、少しても応えたい気持ちがあります。
Last edited by ウィン (2021-06-12 18:14:26)
Offline
ウィンさま
相談の申し出、ありがとうございます。
しかし、個別に個人宛に質問するのはこのHPの趣旨にもそぐわないとも考えますので
この件は、もうすこし自分で考えてみます。
また、ここで質問するかと思いますので、見かけましたら
またアドバイス頂ければと思います。
親身になっていただきありがとうございました。
FileMakerServerでも入れ替え可能なグローバルフィールドを、普通のフィールド+計算フィールド(グローバル格納)を作るというのはどうでしょうか?
※管理者だけがアクセスできるテーブルにフィールドを作成し、テーブルオカレンスを作らなければ、スクリプトからの変更や削除が不可能
●準備
・管理者だけがアクセスできるテーブル管理情報を作成し、レイアウトメニューに表示させるをオフに設定
・レコードを1件作成する
・オブジェクトフィールドアイコン情報を作成し、[最大繰り返し数を2に設定
※グローバル格納をオフのまま
・レイアウトモードに切り替え、テキストツールで、装飾を施した未実施と点検実施を作成
・それぞれの背面に線ツールもしくは、図形ツールでオブジェクトを描画しグループ化を実行
※これらをメンテナンスデータとして残しておきます
・レイアウトモードとブラウズモードを切り替えながら、上記のグループをオブジェクトフィールドアイコン情報に貼り付け
・次に下記の計算フィールド共有アイコンを作成し、繰り返し数を2、検索オプションのグローバル格納を有効に設定
アイコン情報[ Get ( 計算式繰り返し位置番号 ) ]
●ボタンの作成
・対象のテーブルに計算フィールド検査アイコンを作成し、計算結果をオブジェクトに設定
※計算内容はチェックボックスのエラーを想定し、以下の通りに作成
Case (
IsEmpty ( 検査済 ) ; GetRepetition ( 管理情報::共有アイコン ; 1 ) ;
検査済 = "未実施" ; GetRepetition ( 管理情報::共有アイコン ; 1 ) ;
検査済 = "点検実施" ; GetRepetition ( 管理情報::共有アイコン ; 2 ) ;
GetRepetition ( 管理情報::共有アイコン ; 1 )
)
もしくは、
Let ([
#アイコン番号 = Case (
IsEmpty ( 検査済 ) ; 1 ;
検査済 = "未実施" ; 1 ;
検査済 = "点検実施" ; 2 ;1
)
];GetRepetition ( 管理情報::共有アイコン ; #アイコン番号 ))
・レイアウト上のフィールドチェックボックス(検査済)を削除し、代わりに上記の計算フィールド検査アイコンをボタンとして配置
※スクリプト内の、フィールド設定の値は以下の通り
Case (
IsEmpty ( テーブル::検査済 ) ; "点検実施" ;
テーブル::検査済 = "点検実施" ; "未実施" ;
テーブル::検査済 = "未実施" ; "点検実施
)
まかさま
ありがとうございます。
是非、試してみます。
分からない点は再度質問いたします。
後日、報告いたします。
ごく簡単な基本構造だけのサンプルです。
https://www.dropbox.com/s/q46fa8bzk0sqr … 2.zip?dl=0
数行のスクリプト以外は、リレーションの構造のみで構成してあります。図面上のタイトルは、とりあえず最終の点検状態を文字で表示していますが、部位ごとにラベル文字を設定すれば、それを表示した上で書式を設定することも簡単です。
#10で上げたテーブル構成(一部改編)で構成しています。この基本は、データの正規化です。
大元になるデータの、部位ごとの点検記録ですね。それを1部位1点検を1レコードとする1テーブルにして、全体の構造の中心に考えます。全体の構造には、このデータをどのように作りやすく、見やすくするためのデータやテーブルを付け加えていきます。
図面との関係は、単に位置を関連付けるだけなので、ボタン代わりに繰り返しフィールドをハッチで配置し、それにトリガーをしこめばいいでしょう。繰り返しの数を増やせば細かい位置が指定可能で、50×50以上のハッチも可能だと思います。
そこから表示させる部位ごとの点検記録は、時系列(今回、昨年...)でそのテーブルを参照します。本日の記録と、過去の記録を別に表示させておき、今日の記録を作成できるようにしておけば、目的に合った動きになるはずです。日付で降べきにソートしておけば、最初のレコードが最終的な点検(実施、修復)状況になります。(この情報を、表示のラベル変更に使います)
点検記録から図面への表示は、点検記録のデータを繰り返しフィールドへ展開して位置個別の集計を行うことで、簡単にデータをまとめることができ、さらに、繰り返し位置同士の参照を利用すれば、図面上の繰り返しフィールドの条件付き書式へ利用できます。
点検作業一覧は、日付で点検記録を参照すればいいです。また、点検記録を日付と案件で抽出してリストにすれば、点検報告書の形態になり、それを日付でまとめると、日報になります。
繰り返しフィールドを配列のように利用することで、1設定で同じ動きを繰り返し位置それぞれの条件で作り込むことができますので、非常にシンプルな構造で仕上げられます。
サンプル追記
元ウィンドウの再表示が難しいので、新規ウィンドウで開く から、レイアウト移動へ動きを変更しました。部位レイアウトに、全体の中の位置をサムネイル的に表示して、それを全体レイアウトに戻るボタンにしてあります。
ラベルで表示するようにフィールドを追加。状態は、色で表示させてあります。
Last edited by Shin (2021-06-15 13:46:54)
Offline
Shinさま
サンプルまで作っていただき有難うございます。
とりえず、頂いたサンプルデータの中身をみて仕組みを理解したいと思います。
himadaneeさん
いろいろ設定を試してみたところできるようになりました。
アドバイス有難うございます。
試しに36レコード分の入力(オブジェクト名ID入力、条件書式のID入力)をしてみましたが、そこそこ時間がかかりました。
この作業を数百レコードも行うとなると気が遠くなりそうです。
しかし、これを足掛かりにいろいろ試して行こうと思います。
Shinさんより、サンプルデータを頂いたのでテーブルの構成から見直していこうと考えています。
レコード数分のボタンが必要なレイアウトのようで、どう実装するのが最善か急には思いつきませんが
とりあえず、ボタンのオブジェクト名をレコードのIDにしてあれば、条件書式の条件は
ExecuteSQL(”
SELECT \"チェックボックス\"
FROM \"T2_2020年度点検記録\"
WHERE \"ID\"=?
";"";""; "オブジェクト名") <>""
のような感じでできそうですが。
(参照したいのが2020なのか2018なのかちょっとよくわかりません。)
「条件書式で チェックボックス = 1 としました」の代りに、該当のレコードのチェックボックスを参照する計算式です。
Pages: 1
[ Generated in 0.051 seconds, 9 queries executed - Memory usage: 613.59 KiB (Peak: 650.5 KiB) ]