初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2023-11-08 12:55:34

umi
Guest

グーグルフォームの回答が編集されたとき、ファイルメーカーのデータを書き換える

いつも勉強させていただきありがとうございます。

https://fm-aid.com/bbs2/viewtopic.php?id=14829
ではたいへんお世話になりました!

qb_dp様に教えていただいたサイト、
https://kotovuki.co.jp/archives/13512
の要領でGASを使ってグーグルフォームから取得し、
その後、取得したJSONデータをFMのフィールドに振り分けるのと、それを集計するまではできたのですが、
グーグルフォームの回答が編集されたとき、回答のidとしては同一で変わらないため、FMでは新着がない結果になってしまう点で行き詰っています。

現状、おおよその構成は

会議日程テーブル…会議日程、議題
集計テーブル…ポータルに個別回答を表示し会議日程ごとに集計(1年分表示、会議日程テーブルの会議日程を52の繰り返しフィールドに振り分けて52日程表示)
個別回答テーブル…回答idごとのJSONテキストとそこから抽出したデータ(参加者名、メールアドレス、携帯電話番号、回答(繰り返しの計算フィールド52個、会議日程ごとに参加なら“1”))

チームの活動として会議の参加状況を年度単位で把握したいため、
集計テーブルでは1年分を1レコードで表示・集計したいと考えています。
1年分の日程をグーグルフォームに上げておき、参加チェックを随時変更してもらって、
FMサイドでデータ取得のたびにつねに個別回答が更新されるようにしたいのですが、無理な話なのでしょうか?

回答者に別回答を送ってもらって(グーグルフォームに再度入力)FMサイドで回答者IDごとに最も新しいレコードを保存とかだと、
過去に参加チェックしたものをいちいちチェックしなかったりしてFMサイドのデータの信頼性がなくなりますし、よい方法があれば幸いです。

グーグルフォームを月ごとくらいにわけて、グーグルフォームの回答は1回に限り、変更ある場合は電話等個別で対応、
FMサイドでグーグルフォームに紐づく月集計と、それを束ねた年度集計を別でするとかのほうが現実的でしょうか…。

もしよろしければお知恵をお借りできたら幸いです!
どうぞよろしくお願いいたします。

#2 2023-11-08 19:55:52

himadanee
Guest

Re: グーグルフォームの回答が編集されたとき、ファイルメーカーのデータを書き換える

取得するJSONにtimestampというのがありましたけど、これはフォームの保存日とかじゃないんですか。

>新着がない結果
毎回全部インポートすればいいと思いますけど

#3 2023-11-08 23:45:39

umi
Guest

Re: グーグルフォームの回答が編集されたとき、ファイルメーカーのデータを書き換える

himadanee wrote:

取得するJSONにtimestampというのがありましたけど、これはフォームの保存日とかじゃないんですか。

>新着がない結果
毎回全部インポートすればいいと思いますけど

himadanee様 リプライありがとうございます。
おっしゃる通りtimestampはフォーム側の回答の保存日時です。
さらにおっしゃる通りに、毎回全部インポートするでよいと私も思うのですが、
その方法(スクリプトの書き方)がわかりません。

現状、FM側のスクリプトで、

変数を設定[$id;
値:JSONGetElement($JSON;“id”)]
フィールド設定[Response_id重複::g_id;$id]
If[IsEmpty(Responce_id重複::主キー)]
ポータル内の行へ移動[選択:オン;最後の]
フィールド設定[Responce::JSON,$JSON]
  変数を設定[$addcount;値:$addcount+1]
End If

という部分がJSONのデータをポータル(関連レコード)に取り込むところと思われ、
ここを書き換えればよいのでは、というところまでは予測しているのですが。

フォーム回答のid(JSONデータの中にある)をグローバルフィールド「g_id」に置いておいて、
重複チェック用のResponce_id重複テーブル(自己リレーション)の「id」(先にJSONから取得した)と照合して、
でもってレコードの主キー(デフォルトの)が空欄だったら(=レコードがなければ)
ポータル行を追加(関連レコードを作成)、カウント1プラス、ということになっている?  ←合ってますか?
のだとすれば、
ここに追加して、If[not IsEmpty(Responce_id重複::主キー)]で
関連レコードのJSONフィールド(テキスト)を上書きできそうに思ったのですが、うまくいきません。
お恥ずかしながら今年のあたまに7→19に買い替えたばかりで変数自体今回はじめて勉強している感じです。

#4 2023-11-09 09:34:53

himadanee
Guest

Re: グーグルフォームの回答が編集されたとき、ファイルメーカーのデータを書き換える

ポータルを使わないで、単純にIDで検索して、なければレコードを作成、フィールド設定、でいいと思いますが...

>毎回全部インポート
と書きましたけど、ちょっと勘違いしてました。
全レコードからtimstampが新しいものだけ全部インポートとかしないでも、
フォーム(レコード)の編集(更新)ごとに送信してくるので、そのフォーム(1レコード)だけ更新すれば済むんですよね。

#5 2023-11-09 16:42:11

umi
Guest

Re: グーグルフォームの回答が編集されたとき、ファイルメーカーのデータを書き換える

himadanee wrote:

ポータルを使わないで、単純にIDで検索して、なければレコードを作成、フィールド設定、でいいと思いますが...

>毎回全部インポート
と書きましたけど、ちょっと勘違いしてました。
全レコードからtimstampが新しいものだけ全部インポートとかしないでも、
フォーム(レコード)の編集(更新)ごとに送信してくるので、そのフォーム(1レコード)だけ更新すれば済むんですよね。

himadanee様、ありがとうございます。

現状、グーグルフォームからJSONを引っ張ってくるのに、グーグルフォーム1つのURL(フォームに紐づくGASのURL?)が
集計用テーブル1レコードのフィールド値(KEY)になっております。
GASでもって1つのフォームに集まっている全部の回答を一括してJSON形式で取り出し、
それをFM側で回答のidで切って、個別回答の1レコードずつに振り分ける感じになっているようです。
ようですというのは、参考にさせていただいたものをコピペで動かしていて、それを鋭意読解、勉強しているところなので、すみません…(-_-;)

いちおうその後、
レコードがなければ新規作成、のあとに、
Else
関連レコードへ移動[テーブル:「Response」;使用するレイアウト:「Response」(Response)]
フィールド設定[Response::JASON;$JSON]
レイアウト切り替え[元のレイアウト;アニメーション:なし]

と、Elseを使って書き足したところ、すでにある個別回答(Responce)を最新の回答で上書きできるようにはなりましたが、
こんどはデータを更新するたびになぜか一番古い回答が何度も追加されるという不具合が出てしまい、まだ解決しておりません。
とはいえ夜明けは近い、はず…。

Registered users online in this topic: 0, guests: 1
[Bot] CCBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 7 queries executed - Memory usage: 518.52 KiB (Peak: 523.42 KiB) ]