APIより検索クエリで関連レコードの項目を指定して絞り込む

●現状

学生一覧のアプリと、テスト結果一覧のアプリがあります。

学生一覧にある(例)山田太郎という生徒のレコードでは、テスト結果一覧アプリにある山田太郎という生徒のテスト結果(テストの名前と、その採点結果・点数)を、関連レコードとして表示しています。

 

●やりたいこと

(1) 学生一覧のアプリで、「過去に100点を取ったことがある生徒」だけを一覧で抽出したいです。

→kintoneの画面上では、絞りこみ条件に、当該条件を指定するだけでできました。

 

(2) Google Spreadsheet(GAS)よりAPIを使って上記の一覧を取得したい。

→学生一覧アプリ上での、テスト結果一覧の関連レコードは、フィールド名「テスト結果一覧」、フィールドコード「テスト結果一覧」として設定してあります。点数は、テスト結果一覧アプリ上で、フィールド名は「点数」、フィールドコードは「点数」となっています。

→その場合、APIの検索時クエリとしては、「テスト結果一覧.点数 in (“100”)」で良いかと思ったのですが、403エラーになってしまい取得ができませんでした。

参照先:関連レコードに含まれるフィールドを指定する方法

https://developer.cybozu.io/hc/ja/articles/202331474-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%8F%96%E5%BE%97-GET-

 

どなたか解決方法わかりますでしょうか。

 

403ということは認証周りでリクエストが失敗しているように思われます。エラーメッセージを確認すべきなのと、RESTに関するトラブルシュートはこちらに書かせてもらった手順を参考にしてもらえると思います。

Ryu Yamashita様、

早速ありがとうございます!結論から申し上げると解決いたしました!!!

以下、他の方の参考にもなればとおもいますので、内容記載いたします。

※本職のプログラマーではないため、表現として稚拙、不正確な部分は何卒ご容赦ください。

(1) 確認したところ以下のエラー文でした。

CB_NO02 権限がありません。

(2) テストしたクエリの内容としては下記で、後半の点数部分を削除すると正常に動作します。

名前 = “山田太郎” and テスト結果一覧.点数 in (“100”)

(3) 「403ということは認証周りでリクエストが失敗しているように思われます」とのことで、
思い当たるパターンを考えてみました。

その結果・・・・

 

●原因

私の場合、GASからキントーンへアクセスする際に、KintoneManagerという

下記Qiitaページで公開されているライブラリを使用しています。

https://qiita.com/Arahabica/items/063877b0da439020d2c2

 

このライブラリではKintoneのAPI認証を行う際にふたつの方法を提供していて、

一つがアプリごとに払い出すToken、もうひとつがID/Passwordです。

 

その認証部分で私は、学生一覧のアプリも、テスト結果一覧のアプリも、

両方ともTokenで認証しておりました。

 

これによって起こる問題としては、今回のように、関連レコードでアプリをまたぐ

検索・絞り込みを行う際に、クエリ単位では単一のアプリに対してしか認証がされないため

関連レコードとなる「別アプリ(今回で言うと「テスト結果一覧」)」の認証がされていない状態で

クエリを投げることになります。

(流れのイメージ)

1.Tokenで学生一覧のアプリへのAPI認証を得る

2.クエリを投げて学生一覧を絞り込み

3.更にその関連レコードであるテスト結果一覧を参照 ←ここでエラー

 

これをTokenではなく、両方のアプリに対してアクセス権限を持っている「アカウント(ID/Password)」で

認証をすることによって、関連レコードへのアクセスが可能になりました。

(変更後)

1.ID/Passwordで学生一覧のアプリおよびテスト結果一覧のアプリへAPI認証

2.クエリを投げて学生一覧を絞り込み  
3.更にその関連レコードであるテスト結果一覧を参照、絞り込み

4.成功!

 

Ryu Yamashita様、ありがとうございました!!!