初心者のFileMaker pro Q&A

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

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

ログインしていません。

アナウンス

Claris FileMaker Pro 19 ヘルプ
新しい質問は、新規トピック から投稿して下さい。


#1 Re: 初心者のFileMaker pro Q&A ≫ GraphQLを利用したAPIアクセス ≫ 2021-07-23 16:14:56

nim

みなさんありがとうございます。
細部を検証した結果、リクエストする単一のPOSTエンドポイントの末尾に半角スペースが入っていたのが原因でした……。これを直したところ、私が試した上記手法の全てで、正常なレスポンスが返ってきました。
何をやっても正しくないと言われるので、なんて厳格なAPIなんだ…と思っていたのですが、一転して、GraphQLのストライクゾーンの広さに驚いています…。

いつもみなさんのご協力に心から感謝しております。本スレッドが今後、FileMakerでGraphQLを叩く方達の参考になれば幸いです。

#2 Re: 初心者のFileMaker pro Q&A ≫ GraphQLを利用したAPIアクセス ≫ 2021-07-21 23:14:36

nim

なお、以下の方法はすでに試しており、すべて失敗しています。

・Content-typeを application/graphql にしてみる。
・@$json内のデータを、{"query": "query { models { results { name } } }"} にしてみる。
・@$json内のデータを、{\"query\": \"query { models { results { name } } }\"} にしてみる。

#3 初心者のFileMaker pro Q&A ≫ GraphQLを利用したAPIアクセス ≫ 2021-07-21 23:09:52

nim
返信: 5

お世話になっております。

これまで様々なREST APIによるデータ取得を行なってきましたが、ここへきてGraphQLというものに遭遇し、困惑しています。
具体的には、MatterPortというアメリカのサービスに、FileMakerからGraphQLのクエリを用いて連携をしたいと考えています。
GraphQLについて調べてみると、GETやPOSTなど基本的にはRESTと同じようなかたちでリクエストを送ることができるようでしたので、cURLを用いてサンプルデータに対してリクエストを試みたのですが、うまくいきません。
FileMakerにおけるGraphQLを使ったAPIリクエストについて、下記以外のやり方で成功している、という例がありましたらぜひ教えていただきたく存じます。探してみたところ、FileMaker × GraphQLの実装例を見つけることができなかったので……。

[ Table::curlフィールド ]
curl {{base_url}} \
  -X POST \
  -H "Authorization: Basic {{user_auth}}" \
  -H "Content-Type: application/json" \
  -d @$json

上記cURLにおいて、
{{base_url}} -> 単一のエンドポイント
{{user_auth}} -> base64エンコードされた、<token_id:token_secret>形式の改行なしの認証情報
@$json -> {"query": "models { results { name } }"} ←JSON形式でのクエリをスクリプト内の変数$jsonとして用意。"query"キーの値に、GraphQLのクエリ情報を丸ごと入れてます。

この方法だと、認証まではうまくいっているようなのですが、データとしては、「{"code":"not.found","message":"Not found"}」が返ってきます。ドキュメントを見ますと、「リクエストされたオブジェクトが存在しません。関連する操作で特定の ID フィールドを使用すると、このエラーが表示されます。」とのことなのですが、どうもよく理解できません。
( https://support.matterport.com/hc/ja/ar … エラーコード-0-3 )

ちなみに、アクセスしている環境はproductionではなくsandboxモードなのですが、MatterPortのガイドを読むと、sandboxモードにおいては、ユーザーが作成したモデルではなく、MatterPort社が用意しているデモモデルへのアクセスが提供されるということですので、このリクエストが通るならば、レスポンスにはそのデモモデルのモデルネームが返ってくるはずです。

それが返ってこないということについて、そもそもリクエストの方法が間違っているのか、あるいはMatterPortの問題なのか…その原因の切り分けができかねています。
エラーコードとはいえJSONが返ってきていることを考えるに、リクエストのフォーマット、cURLの記述方法自体は少なくとも間違っていない、ということはいえるでしょうか…。

MatterPort GraphQL Schema
https://api.matterport.com/docs/reference

#4 Re: 初心者のFileMaker pro Q&A ≫ SOAPリクエストの送受信 ≫ 2020-05-26 19:16:19

nim

お二人ともありがとうございます。
アドバイスをもとに再設定したところ、無事にURLからSOAPリクエストの送受信ができました。

URL: https://(接続先URL)
(httpspost形式は使っていません)

上記に対して、cURLオプションからPOSTしたいデータを送信しました。

$soap: リクエストボディとなるSOAP対応のXML
[cURLオプション]
curl -X POST (URL) \
-H "Content-Type:text/xml ; charset=utf-8" \
-d @$SOAP

なお、URLの自動エンコードについては、チェックをしても、はずしても結果が変わりませんでした。
最初、ヘッダーにContent-LengthをつけてPOSTしていたところエラーになっていたのですが、結果的にこれを外すことで成功しました。
ヘッダー設定の要否はサービスプロバイダに依るところだとは思いますので、あくまでも今回のケースでは、ということになります。

しかしながら、返ってきたSOAP仕様のXMLの<Body>内XMLのタグ「<」と「>」が、すべて実体参照(&lt;と&gt;)になってしまっており、困惑しています。
Envelope部分は「<」「>」となっているのですが、肝心のBody部分を正しくXMLのタグにデコード?してあげないと、「レコードをインポート」でXSLTを噛ませるときに困りますよね…?

試しに、同じ実行条件で、スクリプトをそのまま「レコードをインポート」にてやってみたのですが、インポートできたレコードは0でした(正しく処理できていれば、読み込んだXMLから3件のレコードがインポートされるはずなのです)。

XSLTの記述は正しいものと仮定したとき、正しくインポートできない原因として考えられるのは、やはりこのタグの実体参照でしょうか。
また、このタグの実体参照が原因だった場合、XSLTでのXpathが通じなくなり、「レコードをインポート」によるXMLデータからのレコードインポートは難しいと考えるべきでしょうか。

(その場合、「URLから挿入」で生のXMLを読み込み、何らかの方法で値を抜き出していくとか、XMLをJSONに変換するツールなどを利用して上手にやっていくしかないのでしょうね…)

#5 初心者のFileMaker pro Q&A ≫ SOAPリクエストの送受信 ≫ 2020-05-26 13:12:00

nim
返信: 3

久しぶりにお世話になります。

FileMaker Pro 18で、SOAP1.1 over httpsでのデータ送受信を設計しています。
最終的にはXSLTを噛ませて「レコードのインポート」にする予定です。
現在はテストの段階なので、変数$xmlに「ファイルから挿入」をやってみているのですが、SOAPサービスからfaultが返ってきます。
SoapUIでテストした段階では正常なレスポンスを確認していますが、PostmanとFileMakerで失敗します。

SoapUIでテストが成功していることから、リクエストボディのXML自体は問題ないと思っておりまして、
FileMaker特有の接続プロトコルで、設定ミスが起きているのかなと推測し、こちらで知恵をお借りできればと思い書き込ませていただきます。
丁寧にエラーメッセージが書かれているようなので、何らかのXMLエラーが起きている、ということはわかりますが、そのエラー内容の説明がよくわかりません…。


【「URLから挿入」の中身】
$soap: リクエストボディとなるSOAP対応のXML
URL: "httpspost://(接続先URL)" & "?" & $soap
curl オプション: curl_requestフィールドに事前にレイアウト上から、以下の通りに入力してある状態。
-H "Content-Type:text/xml ; charset=utf-8"
-H "Content-Length:716"
ターゲット(レスポンス格納先):$xml

【$xmlに返ってきたSOAP faultレスポンス】
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
  <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
   <faultcode>S:Client</faultcode>
   <faultstring>例外により、SOAPメッセージを作成できませんでした: XMLリーダー・エラー: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '%' (code 37) in prolog; expected '&lt;'
at [row,col {unknown-source}]: [1,1]</faultstring>
   </S:Fault>
  </S:Body>
</S:Envelope>

#6 Re: 初心者のFileMaker pro Q&A ≫ [FileMaker Server]マスタマシン兼クライアントからのSSL証明書の識別 ≫ 2019-06-01 23:34:48

nim

>Hiroさん


そうですよね。
サーバー専用機の購入を真剣に検討したいと思います。
いつも的確なアドバイスありがとうございます。

#7 初心者のFileMaker pro Q&A ≫ [FileMaker Server]マスタマシン兼クライアントからのSSL証明書の識別 ≫ 2019-06-01 11:23:51

nim
返信: 4

いつも勉強させていただいております。
今回は、SSL証明書の識別について基本的なことを伺いたくトピックを立てました。

いま現在、非推奨と承知のうえで、FMSを立てているマスタマシンを、クライアント兼用として使用しております。
このほか、社内複数のPC、タブレット、VPNにてこのマスタマシン上のFMSにアクセスしてFileMakerファイルを利用しており、
先日、COMODO社の企業認証タイプのカスタムSSL証明書をFMSにインポートしました。
SSL証明書のインポートは成功し、社内各端末からもSSL証明書を識別した安全な接続を確立することに成功しています。
しかし、このFMSでホストされたファイルに、マスタマシン上のFMPからアクセスしようとすると、どうしてもSSL証明書を識別してくれません。
マスタマシン上から、自身の端末上にホストされたファイル、またはAdmin Consoleにアクセスする場合、ドメインの最後にポート番号が付加される、あるいは異なるポート番号が付加されるという認識はありまして、実際たしかに、マスタマシンのFMPからホストに接続すると、末尾にポート番号5003が付加されてしまい、証明書CNが異なる旨が接続時の警告として表示されます。

証明書のコモンネーム:xxx.xxxxx.co.jp
   マスタマシンのFMPからホストに接続しようとした場合:xxx.xxxxx.co.jp:5003

基本的にはこれによって、証明書が識別されずにいるのだと思います。
証明書の仕組みを考えれば、これが識別されないのは当然のことと存じておりますが……。
どうにか、この末尾のポート番号5003を消すとかして、他のクライアントと同じように、画面右上の鍵アイコンを緑にしたいなーと思っているのですが…。
うまいホストへの接続方法はないものでしょうか。
考え方として、自分が接続しようとしている場所が自分の中にあるのだから、証明書によって保証される必要ないじゃないか、という考え方もできるのでしょうか…。

ちなみに、マスタマシンからブラウザを介して開くadmin-consoleは、httpsでFQDNを指定すれば、ちゃんとSSL化された接続としてログイン・操作することができます。あくまでも、マスタマシン上のFMPクライアントから、自らの端末下で稼働しているFMSのホストに接続しようとした場合のみ、認識してくれません。

このマスタマシンをクライアント兼用として利用するのは1日に計30分程度で、それ以外の時間はサーバー専用機として動いてもらっています。
専用の端末をサーバーとして立てたい気持ちは山々なのですが、予算の都合上、いまはこの運用に甘んじています…。
みなさんの知恵をお貸しいただければ幸いです。

[環境]
バージョン:FMServer 17 & FMP17Advanced
サーバーOS(クライアント兼用): Mac OS Mojave (iMac retina 21.5inch)
サーバー稼動:1台(シングル)
SSL証明書:COMODO / 企業認証タイプ (自社所有ドメインのサブドメインにてFQDN取得・FMS17にインポート済)

#8 Re: 初心者のFileMaker pro Q&A ≫ FileMaker CloudにおけるExecuteSQL関数のパフォーマンスってどうですか? ≫ 2018-07-26 21:34:52

nim

>calafate様
ありがとうございます。
「現在のスクリプト終了」のテキスト結果にSQLを記述し、親スクリプトで結果を受け取るという方法もあるのですね、びっくりしました。
これならコードを節約できるうえに、わかりやすいですね。とても勉強になります。

>ローカル環境のLAN回線とはそもそも比較になりません。
>リレーションの複雑さと走査するデータ量によりますが、雲泥の差です。
はっきりと言っていただけて、救われたような気持ちです。
FMCの進化をウォッチしつつ、当面はLANのFMServerで運用をしていくことにしました。

>Hiro様
なるほど、素晴らしいアイデアですね…。
ユーザーの画面上からSQLが実行できるようになると、当初の設計にないデータセットの集計処理をしたくなったとき、すごく便利です。

#9 Re: 初心者のFileMaker pro Q&A ≫ FileMaker CloudにおけるExecuteSQL関数のパフォーマンスってどうですか? ≫ 2018-07-24 21:21:00

nim

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

お二方からご指摘いただきました繰り返しフィールドの運用について、ちょっと考え直したいと思います。
スケジュールの都合から、今回はひとまず、FM単体のネットワーク共有機能で最大5台接続の運用を始め、時期を見て、再度FMCかFMServerか、それに向けでパフォーマンスの改善を図っていくことにします。

#10 初心者のFileMaker pro Q&A ≫ FileMaker CloudにおけるExecuteSQL関数のパフォーマンスってどうですか? ≫ 2018-07-22 22:15:04

nim
返信: 17

以前から何度かお世話になっております。
宿泊予約管理システムを作成しておりまして、
カレンダー関係の構築では、hiro様のToDoカレンダーや宿帳v4等にて勉強させていただきました。

現在、ローカル環境にて開発を進めており、予約カレンダーのところでは、例によって繰り返し回数42回の繰り返しフィールドを使いながら、
その繰り返し計算式にexecuteSQL関数を用いて、その日ごとの予約件数だとか、予約者の情報等を柔軟に取得し、レイアウト上で表示させるようにしています。

これが、ローカルではさっくさくと動いていたのですが、FMCloudでホストして動かした途端、executeSQLを使う場面でのパフォーマンスの低下が著しく、どうしたものかと思案中です。
パフォーマンスに影響を与える要因は、それこそ本当に多種多様だと思いますので一概には言えないと思うのですが…。

内容を表示する42回の繰り返しフィールド(計算式・非保存)を、テキストフィールドにしておいて、サーバー上でexecuteSQLを実行するスクリプトを適宜走らせ、スクリプトから値を格納していく方が、パフォーマンスは良いと思われますか? 経験豊富な皆さんのお知恵をお借りしたいです。

基本的な構成としては、

・カレンダー日付[42]
・祝日[42]
・予約室数[42]
・料金ランク[42]

というかたちで、非保存の計算式で42回の繰り返しフィールドとして定義されているフィールドが4つあるテーブルでのレイアウトです。
こちらで試してみたのは、この4つの繰り返しフィールドのうちの、予約室数[42]と料金ランク[42]をレイアウトから削除したところ、体感的に2倍はパフォーマンスが改善されました…。
レイアウトで欲張りすぎない、ということもあるのでしょうね。
オブジェクトスタイルに関しては、ちゃんとテーマに保存してあるスタイルのみを使っています。
また、FMCloudのインスタンスについては、t2.mediumからm4.largeまで試しましたが、この部分でのパフォーマンス改善にはほとんど変化がなく、むしろAdmin Consoleから使用状況をみるかぎり、
network throughputの部分でも、数十bytes per second程度しか動いていませんので、無駄に性能を余らせているだけになって、結局t2.mediumに戻しました。


Cloudにしてここまで極端に遅くなってしまうなら、簡易共有機能である「FileMaker ネットワーク共有」で共有したほうが、費用もかからずパフォーマンスも高いからいいのかな、とも考えています。
用途的には社内の基幹業務アプリケーションですが、同時接続5台という制限がそこまでネックになるわけではない人数で使いますので…。
もちろん、セキュリティーが脆弱という問題はあるかと思いますが。

悩みます。

#11 Re: 初心者のFileMaker pro Q&A ≫ 【宿帳v4】日付ごと、部屋ごとの予約一覧を表示させたい ≫ 2017-10-01 08:37:52

nim

ありがとうございます。
やはり難しいですか・・・。
いまの顧客管理ソフトがそのような仕様になっていて、
同じような表現ができれば使い勝手を維持できると思ったのですが、
ほんとうにそれが使い勝手がいいのかどうかも含めて再検討ですね。
まずは表示期間を短くして、週めくり、月めくりのボタンを設置することで対応してみようと思います。
どうもありがとうございました。もう少し勉強します。

#12 初心者のFileMaker pro Q&A ≫ 【宿帳v4】日付ごと、部屋ごとの予約一覧を表示させたい ≫ 2017-09-30 09:30:21

nim
返信: 2

以前にHiroさんがサンプルとしてお作りになった「宿帳v4」をダウンロードさせていただきまして、勉強している最中のものです。

●宿帳v4.fp7 → http://yahoo.jp/box/S1xpff

これにはおおきく「テーブル1(予約レコード群)」と「テーブル2(表示用)」があり、
テーブル2をリスト表示にすることで部屋番号を縦にならべ、
あとは宿泊者表示用の繰り返しフィールドを横に並べて、関連するレコードを「テーブル1」からLookupさせている、ということまでは理解しました。
まさにこれがやりたかったことで、希望が見えてきた!と感激しているのですが、
もともとのサンプルファイルでは1週間分を横並びで表示されてましたが、当方ではこれを3ヶ月分(92日)、表示したいと考えています。

単純に、「テーブル2::宿泊者一覧」と、Lookup先の「テーブル1::表示用一覧」の繰り返し数を「92」にすることで、とりあえず対応できるのはわかるのですが、
これだとテーブル1のすべての予約レコードに冗長な繰り返しデータが増えてしまい、ファイル容量を膨張させてしまうのではないかと心配です。
ルックアップ先を非繰り返しフィールドにすることができればスッキリするかと思うのですが…これがいま悩んでいるところです。

Filemakerの仕様として、繰り返しフィールドの計算においては、非繰り返しフィールドも繰り返しフィールドのように扱われるようなので、
計算式のなかで共通の値をもちいるときには、非繰り返しフィールドにも明示的な番号[1]を指定してあげるなどの対策が必要、ということは学びました。
だったらと思って「テーブル1::表示用一覧[92]」の繰り返し数を1にして(非繰り返しフィールドにして)、
lookup(extend(テーブル1::表示用一覧[1]);"-")  や、 Lookup( GetRepetition ( テーブル1::表示用一覧 ; 1 );"-") なども試しましたが、ダメでした。

繰り返しフィールドのLookupで非繰り返しフィールド(または繰り返しフィールドの1番目だけ)を指定することはできないのでしょうか。
個別のサンプルファイルに関することで申しわけありません。

#13 Re: 初心者のFileMaker pro Q&A ≫ hiroさんの「ToDoカレンダー」を予約管理用のカレンダーとして使いたい ≫ 2016-07-08 21:23:43

nim

>hiroさん

ありがとうございます!
次の休日に研究させていただきまして、
また何かありましたら、質問の機会をいただけますと幸いです。

よろしくお願い致します。

#14 初心者のFileMaker pro Q&A ≫ hiroさんの「ToDoカレンダー」を予約管理用のカレンダーとして使いたい ≫ 2016-07-08 09:31:54

nim
返信: 2

初めまして。

宿泊業をやっていまして、予約管理のためのカレンダーを作りたいと思っています。
現在使ってみているのは、
http://www.russ.jp/stepbbs/step.cgi?mode=view&no=50195
にある、hiroさん制作のサンプル「ToDoカレンダ」を使用しております。
FileMakerの機能を理解しきれていないためか、様々な点ですぐに壁に当たってしまいます。
「他のテーブルのレコードを検索して、絞り出されたレコードの特定のフィールドデータを、レイアウト上の特定位置に表示する」
ということがやりたい時、何をどうすればいいのか…小一時間考えても、さっぱり手が進みませんでした。

【以下、具体的に実行したいこと】
①予約入力画面からカレンダーを開く(ここまではできました)
②カレンダーの各日付を選んだら、右側(下の画像で見ると、カレンダー右側の201-214までの数字が表示されているところ)に部屋ごとの予約状況が表示される。
③すでに予約されている部屋には、予約者の名前が入っている。予約可能な部屋は、空白となっている。
④空白の部屋を選択し、ローカル変数(またはグローバルフィールド)に渡してカレンダー画面を閉じ、元のレイアウト(予約入力画面)に戻る。

image

【テーブル情報】
各予約は、「Reservation_Entries」というテーブルで管理しており、カレンダーテーブルとは「日付」をキーにリレーションしています。

【開発環境】
Mac OS X
FileMaker Pro 14 Advanced

初歩的な質問ですみませんが、何卒よろしくお願いいたします。
質問するにあたって不足している環境情報などがあれば追記させていただきます。

Board footer

Powered by FluxBB