みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
いつも お世話になっています
FMver15 win7を使用しております。
テーブルがAとBの2つあってリレーションの設定がしてあります。テーブルAにテキストフィールドとオブジェクトフィールドがあります。
そして、テーブルAにレコードが5つありレコードを一欄で表示しています。スクリプトで、テーブルAのオブジェクトフィールドにオブジェクトをペーストすると、リンク先のテーブルBのレコードが開くようにしています。
例えば、テーブルAのレコード1のテキストにカーソルがある時に、1番のオブジェクトフィールドにオブジェクトをペーストするとテーブルBの1番目のレコードが開くのですが、3番目のオブジェクトフィールドにオブジェクトをペーストしても、テーブルBの1のレコードが開いてしまいます。
これをカーソルの位置に関係なく、ペーストした時にテーブルBの同じレコードを開きたいのですが、どのようにスクリプトを組めばよろしいでしょうか?
動作は、OnObjectModifyで
スクリプトは、
IF(IsEmpty ( テーブルA::オブジェクトフィールド )=0)
レイアウト切り替え
End if
で行っています。
ご教授、よろしくお願いいたします。
動作は、OnObjectModifyで
スクリプトは、
IF(IsEmpty ( テーブルA::オブジェクトフィールド )=0)
レイアウト切り替え
End if
フィールドの構成がどうなっているのかわからないので
一般的な話として
上記のスクリプトでは
関連レコードが複数ある場合には、そのレコード群の先頭にしかいかないでしょう。
>テーブルAに5つのレコード
とは意味がわからないけど
これがポータルに表示しているテーブルBのものということならば
そのレコードをクリックした時点で
そのレコードのレコード番号なり、レコードIDを取得して
ペーストが終わった時点で
テーブルBのそのレコードを探していこうする
ということが必要でしょう。
その方法は、考えたらいくつかあると思いますが、
もう少し 全体の構成を書かれると
正確に近いもののアドバイスが得られると思います。
Offline
ちょいと考えて、
想像の域を出てないですが、
こんなことをしたいのかと思うファイルを作ってみました。
OnObjectModifyは同じですが、
スクリプトが大幅ない違うことと
移動専用にリレーションを一つ加え
移動のためにA側にひとつ、B側に一つ フィールドが追加になり
その追加になったもので上に書いた移動専用のリレーションが組まれ
そのリレーションでの関連レコードへ移動すように
スクリプトが組まれています。
そのサンプルファイルは
http://yahoo.jp/box/xpvefk
におきました。
Last edited by シャチ (2017-02-11 10:52:47)
Offline
シャチ、仕事が早いな。
あなたも 見るのが早いねぇ
Offline
シャチ、リスペクトしてるぜ!
グッジョブだぜ。
シャチ様
回答とサンプルの作成ありがとうございます。質問者が遊びに行っていたため、乗り遅れましたね。
なかなか質問の仕方がわかりにくくて済みません。もう少し詳細を記載します。
実際のレコードは、年間3000件ほど追加されていきます。
レコードの作成者と、オブジェクトフィールドの追加者が異なります。追加者は会社のそれぞれの部門で、報告書をPDFにしてその関連するオブジェクトフィールドに保存します。そのため、実際はオブジェクトフィールドも10ぐらいありそれぞれに別テーブル(レイアウト)があります。
一つ一つのレコードを開いて追加していくことも考えたのですが、複数を一度に処理するので一覧のまま追加していきたいなーと思い今回の質問にいたりました。
どうせやるなら、クリックしていくひと手間を省きたいなという感じです。
例えば、テーブル1(レイアウト1)のレコード1オブジェクトを追加したら、別のテーブル(レイアウト2)が開いで作成日とキーワード、検索用の概要を入れて閉じます。次にテーブル1のレコード2のオブジェクトを追加し、同じ作業をしていきます。
この時に、テーブル2にはレコードがないので、追加時にテーブル2のレコード追加もしております。
せっかく作成していただいたサンプルですが、この部分が異なるため活用いたしかねます。
テーブル1と2はリレーションを組んでいますが、1対1の関係ではありません。
テーブル2では、報告書の必要なところのみ追加しており、該当部門の報告書をまとめてみるためにあります。
説明不足で分かりにくいかもしれません。そのため、大変お手数をおかけいたしますが、何か良い案のご教授をお願いいたします。
済みません、説明が一つぬけてましたね。
IF(IsEmpty ( テーブルA::オブジェクトフィールド )=0)
レイアウト切り替え
End if
は、報告書がない時にテーブル2にレコードの追加動作をしたいからです。
テーブル2に報告書があれば、そのまま開くことになります。かなり端折って説明しておりました。
よろしくお願いいたします。
ごめんなさい
私には無理です
最初の質問と
質問者がかわったのかな?
内容も違うようだし
私には、わからん質問になった
Last edited by シャチ (2017-02-12 11:38:16)
Offline
シャチ様
わかりにくい質問になってしまい大変申し訳ございませんでした。
質問者は最初から同じです。最初の質問内容はかなり簡単にして画面を切り替えるときにレコードの有無を確認して・・・。という大事な部分を記載するのを省いたためご迷惑をおかけした結果になってしまいました。
もう少し、質問の仕方をわかりやすくしていきたいと思います。
かなり簡単に言いますと、レコードを一覧表示しているときにカーソルの位置がレコードIDの1のフィールドAにあります。
コピーデーターを別のレコードID(たとえば3番目)のフィールドAにペーストしたときに、カーソルをレコードIDの1から3に持っていくにはどうすればよいか?
GET(変更されたフィールド)ではフィールドAが出ますが、レコードID3の値が出ないですし。変更されたフィールドのレコードIDを出せればそれでよいのですが?
もし、ご存知でしたらお教えください。よろしくお願いいたします。
サンプルを使えと行った覚えもないし、
とにかく なぜサンプルが・・・
サンプルではレコードIDを使ってはずだけど。
おそらくサンプルのリレーションを見てないのではないかって思うけど。
もし違うのなら
たぶんに、考えていることが完全にずれているようなので
これ以上無理です。
Offline
そのドキュメントは、元レコードと関連づけるための情報を持っていますか。
例えば、ファイル名にIDが含まれているとかですと、それらのドキュメントを1フォルダーに納めておき、そのテーブルに一括インポートしてしまう、IDをファイル名から作成してリレーションキーにする、という方法もあります。
Offline
シャチ様、Shin様
返信ありがとうございます。
サンプルの場合も自分と同じ症状が出ております。例えば、BのレコードID移動用が3番の時=オブジェクトの3番を選んでいるとき、5番にオブジェクトをペーストすると3番が開きます。これを5番が開くようにしたいのです。
#7でこのように回答していればよかったです。変な回答で混乱させてしまい申し訳ございませんでした。
ご迷惑ばかりおかけしますが、よろしくお願いいたします。
Shin様
ドキュメントにIDは含まれておりません。
私のところでの動きと違ってますが、
ワンステップ追加してください、
2行目に
フィールドへ移動[] <==フィールド指定なし
これで変わるはず
かわらなければ、バージョンやOSが違うので私には検証ができないです。
Offline
念のために
サンプル修正してアップしました
http://yahoo.jp/box/jQ1Gn6
Offline
シャチ様
回答ありがとうございます。
2行目に
フィールドへ移動[] <==フィールド指定なし
をやってみました。結果は同じでした。
何も選ばれていないときはレコード1に
レコード3が選ばれているときに5にペーストするとレコードの3に行きます。
環境の問題になるのでしょうか?
ご迷惑ばかりおかけいたしますが、ご教授よろしくお願いいたします。
へぇ?
だいたい レコード3(ポータルのことと思うけど)が選ばれている時に
どうやって5にペーストできるんです?
5にペーストしたいのなら5行目をクリックするでしょ?
やっぱり わかんないなぁ。。。。何をしているのか?
Last edited by シャチ (2017-02-12 23:44:22)
Offline
シャチ様
遅い時間まで、返信ありがとうございます。
どこも選ばない状態でペーストし、その先の情報を記録。そのレイアウトを閉じて、また一覧に戻りオブジェクトをペースト。レイアウトBの情報を更新。
そんな感じで、レイアウトAの一覧を出しながらレイアウトBを出して更新を繰り返す作業になります。その作業が多いので、一つでも楽をしたい=クリックを少なくしたい
ためにこんなことができたらいいなと思い質問させていただいております。
わけのわからない質問で、ご迷惑をおかけし申し訳ございませんが、よろしくお願いいたします。
FMPは人の頭の中まで読み取ることはできないでしょう
どこに貼り付けるかくらいは最低ってやらないと
それが嫌ならAIつきのコンピュータでかなり高度なソフトウェアがいるんでは?
で、結局、そうしたいってこと?
そうなら、もう完全に私は手の施しようがないです。
これで、アドバイス打ち切りさせてください。
私は、そこまで高度な知識は持ち合わせていないので。
Offline
よく理解できていないので、間違っているかもしれませんが、あしからず、、、です。
https://www.dropbox.com/s/o4f9vbmbusw0y … fmp12?dl=0
ドラッグ & ドロップ関連で悩む人は多いと思います。
ドロップ先のID等の情報を取得するには、株式会社ライジングサン・システムコンサルティング さんのページがわかりやすいと思います。
http://risingsun-system.biz/drag-and-drop-in-filemaker/
ドロップボックスに載せたサンプルでは、ドロップした際に$$IDに値が入るように工夫されています。
Last edited by 通りすがりさん (2017-02-13 02:46:25)
通りすがりさんです。
Offline
なるほど ドラッグ&ドロップですか
それは検証してないです。申し訳ない
やっぱり実行していることは見ないとわからん私でした。
通りすがりさんんぽサンプルの代案。考えてみよう と・・・
Offline
シャチ様
返信ありがとうございます。これ以上できないといって何度も返信頂きありがとうございます。
私の悩みとしまして、一覧表示させたときに、どこでもペーストできてしまうことです。
どこに貼り付けるか選択しても、操作ミスで別のところにペーストしてしまうことがあり得ます。その時にどうするか?
1.そのまま作業を継続させる
2.そこにペーストさせないようにする。
のどちらかになります。どちらの選択も私の能力ではできません。それが今回の質問の大きな問題です。とりあえず、できそうな1を選択しました。
もしかして、2のほうがやりやすいようでしたらそちらをお教えいただくことはできますか?
大変わがままを申しておりますが、どうかご教授よろしくお願いいたします。
通りすがり様
サンプルありがとうございます。最初のほうはできている前提です。
2番目のほうはよく理解できません。$$IDを取得しても、それを選択することができないのです。そもそも、レコードにIDがありますのでそのIDを利用しようと考えております。
私が悩んでいる状態の説明としましては、シャチ様のサンプルで説明がつきます。使う方がどこにペーストしても問題なく次の作業ができるようにしたい。そのために、ペーストしたレコードのIDを取得できればという悩みです。通常は、選択したところにペーストしますが、間違って一つ下にしたらどうするか?今の状態では対応ができません(回り道が必要という意味です)。
ご理解とご教授よろしくお願いいたします。
>私の悩みとしまして、一覧表示させたときに、どこでもペーストできてしまうことです。
ここの「ペースト」が曲者だったんですよ。これをドラッグ・・・と書いてもらっていれば
>どこに貼り付けるか選択しても、操作ミスで別のところにペーストしてしまうことがあり得ます。その時にどうするか?
これもよくわ泣かない
入力済みには、ドロップさせないってこと?
それなら、できそうだけど。
それにしても、
実際にやっていることをもっと細かく書いて欲しかった。
で
ドラッグ&ドロップの相手は ひょっとしてはなんですか?
Offline
シャチ様
返信ありがとうございます。やっぱりそこでしたか。何となく、気が付いてましたが、コピーペーストとドラッグ$ドロップの言い方ですね。すみませんでした。
ドラッグ&ドロップはPDFデーターです。
入力済みの場合もあれば、入力していないときもあります。
ドラッグ&ドロップでオブジェクトフィールドが入力されているかどうかを判断(IF(IsEmpty ( テーブルA::オブジェクトフィールド )=0))して、
入力済みならばオブジェクトデーターの上書き
未入力ならばレイアウト2でレコードの新規作成を行っていました。
通りすがり様
再度リンク先のビデオを確認しました。言われているドラッグ & ドロップの意味が異なりますが、今後の役に立つと思いました。
ご迷惑をおかけいたしますが、ご教授、よろしくお願いいたします。
さんちゃん 様
https://www.dropbox.com/s/vxt1zb67ejk85 … fmp12?dl=0
私は、説明が下手なので多くは語れませんが、少しでもお役に立てれば、と思っております。
やり方としては、
ドラッグ & ドロップ用に一時保管用のフィールド ( サンプルの中では tempFile フィールド ) を用意します。
tempFile フィールドに PDF がドラッグ & ドロップされ、OnObjectModify によって、トリガ ( モディファイ ) スクリプトが走ります。
tempFile が変更されたので、$$ID に値が入ります。
(フィールド設定を参照してみてください。ここでさんちゃん 様 のレコードのIDに変更してみても良いかもしれません。 )
変更されたIDがわかるので、あとは、簡単かもしれません。
Last edited by 通りすがりさん (2017-02-13 16:51:44)
通りすがりさんです。
Offline
[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 589.77 KiB (Peak: 626.67 KiB) ]