みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
> himadaneeさん
ありがとうございます!
戻り値はとれないんですね・・・
> Shinさん
ありがとうございます!
なるほど、ODBCが手っ取り早そうなので、その方法を使ってみたいと思います。
アカウント名、パスワード組み込みの件もありがとうございます。
避けるように致します。
OS:Windows10 Pro
FileMakerバージョン:FileMaker pro 19
お世話になります。
ファイルメーカーで「顧客台帳」というファイルを作成して顧客の一覧を管理しているのですが、
この度、RPAを使って「顧客台帳」にアクセスし、その顧客情報を使って様々なことを行う予定です。
顧客情報をスムーズに取得したいため、「顧客台帳」ファイルの中に「データ取得」というスクリプトを用意して
顧客コードを引数にしてスクリプトにアクセスすれば、顧客情報を返すようにしようとしています。
そこでURLを以下のように指定してアクセスしています(テストではブラウザにURLを入れてアクセスしました)
fmp://Admin:Password@IPアドレス/顧客台帳.fmp12?script=データ取得¶m=顧客コード
これでスクリプトを実行することはできたのですが、スクリプトからの戻り値をどう受け取って良いかが分かりません。
このようにURLでスクリプトにアクセスしてデータを取得する方法をご存じの方おられたらご教授いただけないでしょうか。
ずっとコメントが付かないので私の思いつく限りの方法を。
今ちょっと検証ができないため、ダメだった場合はご容赦下さい。
まず確認ですが、どのレコードを誰が見られるか はどのように判定するのでしょうか。
ここでは仮に、情報保持テーブルに「閲覧権限ユーザー」フィールドがあり、そこに権限があるアカウント名が記録されているものとします。
①レコードにアクセス権を設定する方法
〈アクセス権がありません〉の表示を避ける方法として、何かしらの条件で一度レコードの検索をする方法を聞いたことがあります。
レイアウト表示時のトリガーに検索するスクリプトをつけておき、全件がHITするような条件でいいので検索をするようにします。
すると、そのレイアウトに移動する際には必ずその検索が行われ、アクセス権がないレコードは自動的に対象外となるはずです。
Ctrl + F等で検索した場合も、アクセス権がないレコードは自動的に対象外となるはずです。
②リレーションを使って制限をする方法
まず、グローバル「アカウント名」フィールドのみのテーブル(仮にアカウント情報テーブル)を作成します。
それと別に情報保持テーブルがある状態で、情報保持テーブルには「閲覧権限ユーザー」フィールドがあるとします。
[アカウント情報テーブル]-[情報保持テーブル] とリレーションをし、リレーション条件として
アカウント情報テーブルの「アカウント名」フィールドと情報保持テーブルの「閲覧権限ユーザー」フィールドを=で結びます。
その上で、レイアウトのテーブルオカレンスを [アカウント情報テーブル]-[情報保持テーブル] にします。
そうすれば検索されても自分の権限のレコードしか出ないかと思います。
以上2点ですが、ご要望と違う解決でしたらすいません。
Shinさん
早速ありがとうございます!
希望通りに表示することができました。
お世話になります。
FM18 Win10
値一覧で1月~12月という一覧を作り、それを「月選択」フィールドを使ってチェックボックスで選択してもらうようにしています。
そのチェックされた月を、別レイアウトでチェックボックスではなく、テキストで横一列に表示したいと考えています。
例) 1月 2月 5月 6月
ただここで問題がありまして、チェックボックスで選択された場合は「月選択」フィールドに月が改行で保存されますが
選択した順番に保存されてしまいます。
「月選択」フィールドの改行をスペースに置換して表示してみるとこのようになります。
例) 5月 1月 2月 6月
この「月選択」フィールドの改行データにソートをかけたいのですが何か方法はあるでしょうか?
よろしくお願いします。
> Shinさん
タブ順便利ですよね。
私も便利だと思って使っていたのですが、実際に使っているユーザの方がタブ順機能が原因で誤入力することがありまして・・・
なぜ誤入力してしまうのか・・・とも思いますが、誤入力に繋がるのであれば使わない方向で進めてみようと思っています。
デフォルトで設定しない というのはないんですね。
テーブル分けてみようと思います。
一部の親に対してのみ入力するような項目は優先的にやってみます。
ありがとうございました!
FM17 Win10
お世話になります。
今回質問が2点あります。
よろしくお願いします。
1.タブ順設定の解除はできるものでしょうか?
現在レイアウト上にフィールドを追加していくと、自動でタブ順が付いてしまいます。
毎回リセットをしていますが、レイアウトにフィールドを追加する度にリセットが必要で困っています。
タブ順機能自体を解除することは可能でしょうか?
2.テーブルの分け方について
アプリを作る際に、基本的に複数のテーブルに分けて作成することが多いかと思います。
私がテーブルを分ける際には、基本的に 1:多になる関係のものは別テーブルに分ける という運用をしています。
今まではそれで良かったのですが、最近大きめのアプリを作ることが多くなり、1テーブルに入るフィールド数が多くなってきました。
フィールドをレイアウトに設置したり式に入れたりする際、検索機能があるとはいえ数が多く、時間がかかってしまいます。
このような場合、例え 1:1の関係にあるものであっても、分類毎に別テーブルに分けて運用すべきなのでしょうか?
その分リレーションを余分にする必要も出てくるかなと思い、少々悩んでいます。
この質問には正解がないのかもしれませんが、皆様がどのように運用されているか教えていただけないでしょうか。
> ドロップダウンリストから選んだ時と、.....は、「線を表示させたい」
> また、同ドロップダウンリストから選んだ時と、.....は、「線を表示させたくない(非表示)」
ちょっと、ドロップダウンリストから選んだ時にどちらにしたいか分かりませんが
> 要はNG文字が含まれない場合は、線を表示して、含まれる場合は、線を非表示にしたいです。
こちらで考えると、下記のようにすればいいかと思います。
スクリプトを作成
if [PatternCount ( ドロップダウンリストのフィールド名 ; "NG文字" ) > 0]
変数を設定[$$線非表示; 値: 1]
Else
変数を設定[$$線非表示; 値: ””]
End If
このスクリプトをドロップダウンリストのフィールドのスクリプトトリガ設定の「OnObjectSave」に適用します。
次に非表示にしたい線を選択して、インスペクタ内の「次の場合にオブジェクトを隠す」の項目に
$$線非表示 = 1
としてみてはいかがでしょう。
Hiroさん
フローティングメニューを調べてみましたが、まさにこれです。
今後覚えておこうと思います。
なるほど、ヘッダ部分で分ければ確かにいけそうですね。
そちらも試しています。
ありがとうございました。
Shinさん
確かに別ウインドウにしてしまえば対応できそうです。
試してみて使用感など見てみたいと思います。
ありがとうございました。
Hiroさん
> そのご質問の前に、
> サンプルの構造・内容をご覧になられ、
> 方法を検討努力されました?
ちょっと誤解があるかと思います。
まず、サンプルについては内容を見させていただきました。
ツリー構造のデータの表示について、とても良く出来ているものかと思います。
分離モデルでの作成は今までも行っていますので、作り方も構造も存じております。
関連レコードでの表示についても今までにやっております。
ただ、私が今回質問しているのは、ツリー構造や、ツリーで選んだ内容ををどう表示すればいいか悩んでいるのではありません。
左側に設置しているオブジェクト(ツリー構造部分)と、右側に設置している画面が、スクロール時に連動して動いてしまうのを何とかしたいという質問です。
その上でサンプルを見て検討努力を行うべきと仰っているのであれば申し訳ないです。
ただ、今回の問題の解決の糸口となるものが私の目線ではサンプルから読み取れなかったのです。
度々でお手数おかけしますが、こちらの認識違いがございましたら指摘をいただけないでしょうか。
Hiroさん
階層化部分はまさに、このサンプルのように作りたいと考えておりました。
サンプルを紹介いただきありがとうございました。
> 右側の画面を画面内でスクロールさせる(ポータルを置いてポータル内でスクロールさせるイメージ)のような
> 対応が必要だと考えています。
上記の私の書き方が悪かったのですが
右側にポータルを置きたいのではなく、右側をスクロールした時に左側も一緒にスクロールしないようにしたい という要望でした。
右側にはリストのようにレコードを表示したいのではなく、フォームのように画面に出したいのです。
何か方法はありませんでしょうか。
FM17 windows10です。
お世話になります。
今回、フォーム形式のレイアウトを作っており
左側にフォルダツリーのような選択画面を
右側に、それに対応した情報を出す画面を
それぞれ出したいと考えています。
windowsのエクスプローラと同じようなイメージです。
そこで問題になってくるのが、右側に表示する情報が多いために1画面に納まらないことです。
スクロールさせてしまうとそれに対応して左側のフォルダツリーもスクロールされてしまいます。
そのため、スクロールした時に左側のフォルダツリーを一緒に動かすか
右側の画面を画面内でスクロールさせる(ポータルを置いてポータル内でスクロールさせるイメージ)のような
対応が必要だと考えています。
何か方法をご存じの方がおられましたらご教授下さい。
>チポさん
List関数を失念していました。
なるほど、それなら一覧で取得できますね。
確かに一つにすべきかもしれません。
1テーブル辺りのフィールド数がかなり多くなるため、グループごとに別テーブルにしてしまっています。
そちらも検討してみます。
ありがとうございました。
>Shinさん
リンク先拝見しました。
これは使いやすそうなプラグインですね!
なかなかのお値段なので、ちょっと相談してみようと思います。
ありがとうございました。
>qb_dpさん
なるほど違うテーブルのデータが取れないなら、そのテーブルで取っちゃおうってことですね。
今のところ1:1でのリレーションを想定していますが、今後1:多が出てくるかもしれません。
検討してみます。
ありがとうございました。
お世話になります。
表題の件で、レイアウト上に置いてあるフィールドを複数変更後に保存した際に、変更されたフィールド名を一覧で取得したいです。
Get ( 変更されたフィールド ) で取得できると思い試しましたが、同じレイアウトに置いてある リレーション先のフィールドが取れませんでした。
リファレンスを見る限り、違うテーブルなので取れないということですよね。
レコードの読み込み時にフィールドの値を保持して比較すれば取れるとは思いますが、
Get ( 変更されたフィールド ) みたいなスマートな方法があればと思い質問させて頂きました。
よろしくお願いします。
>Shinさん
何かしらの検索をすれば対象外になるんですね!
リレーション先のレコードについても問題ないとのことで大変助かります。
度々ありがとうございました。
>チポさん
なるほど、削除レコードだけのテーブルを作っての運用もいいですね。
削除テーブルを作る必要はあるものの、スマートで分かりやすいと思います。
規模やテーブル数などを踏まえて検討したいと思います。
ありがとうございました。
>Shinさん
アクセス権での除外は思いつきませんでした。
以前に別件でアクセス権を設定してリスト表示にした時に、レコードが非表示ではなく
「アクセス権がありません」みたいな表記がでてしまっていたような気がして、そこだけ懸念があります。(当方の設定ミスの可能性大)
ともあれアクセス権で解決できれば、こちらで想定している問題はほとんど解消されるかと思います。
実際にアクセス権を設定してみて動きを確認してみたいと思います。
ありがとうございました。
言われている内容だけであれば、グローバル変数($$をつけるやつ)とスクリプトで対応できないですかね?
OnRecordLoadのトリガでスクリプトを呼び出して「変数を設定」ステップで計算すれば可能かと思いますが、そういう解決方法ではダメでしょうか?
いつもお世話になります。
レコードの削除時に通常の削除ではなく、削除フラグを使用した論理削除を試してみたいと考えております。
ただ少し不安なのが、リレーションをした際に削除フラグが立っているレコードを容易に除外できるのか?という部分です。
リレーションしたいテーブルにグローバルフィールドを作って、そのグローバルフィールドをリレーション条件に追加してやればできるとは思いますが
リレーションしたいテーブルに毎度毎度そんなフィールドを作るのもちょっと扱いづらくなってしまいそうです。
ファイルメーカーで論理削除は扱いづらいものなのでしょうか?
こんな方法がある ですとか、実際にこんな運用をしている というご意見があれば伺いたいです。
Hiroさん
回答ありがとうございます。
仰る通り、レコードの確定がされていなかったのが原因でした。
フィールド設定 ステップだけでは確定されないという認識がありませんでした;;
ありがとうございました!
チポさん
回答ありがとうございます。
> ソリューションB側でスクリプトを使って「確認」フィールドを変更した場合に即時反映されません
そのステップはどのような?
「フィールド設定」ステップで "確認" を入れる処理をしているのみでした。
伺ったとおり、Evaluateを外して上記ステップの後にレコードを確定させたところうまく反映されました。
ありがとうございました!
いつもお世話になります。
ソリューションAのテーブルaにある非保存の計算フィールドで、
リレーション先のソリューションBにあるテーブルbのレコードの内
「確認」フィールドが空白になっているレコード数を計算しています。
テーブルa と テーブルbがリレーションになっており、TO名は テーブルa | テーブルb としています。
そこで、テーブルaの非保存の計算フィールドに下記の計算式を入れています。
Evaluate ( Count(テーブルa | テーブルb::ID) - Count(テーブルa | テーブルb::確認) ; テーブルa | テーブルb::確認 )
その上で非保存の計算フィールドをソリューションAに表示していますが、
ソリューションB側でスクリプトを使って「確認」フィールドを変更した場合に即時反映されません。
ソリューションA上に設置している非保存の計算フィールドにカーソルを入れるとそのタイミングで再計算はされるのですが・・・
何か方法があれば教えて下さい。
チポさん
レコード表示制限をしておいた方がいいですね!
設定しておきたいと思います。
0件の時にユーザに選択してもらう方式は親切ですね。
その機能も検討してみます。
ありがとうございます。
Hiroさん
なるほど、「前のレイアウトへ戻す」ステップは思いつきませんでした。
件数0の時にはカスタムダイアログでレコードが無い旨を表示してレイアウトを戻してやればいいですね。
それとは別に、レコード操作制限のシステム設計として、
コメントから察する方法が基本的に...?
はい、それはとても感じています・・・
機能の制限はかけるつもりですが、例えば「全レコード表示」や「レコード検索」機能などを
何らかの方法でユーザに使われた際に見えてしまいますよね。
通常このように、ユーザ別に限られたレコードのみを一覧にしたい場合はどのような手法でするのが正しいのでしょうか?
ご教授頂けると助かります。
[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 669.59 KiB (Peak: 723.01 KiB) ]