【kintone】グラフAPIでGETしたグラフの情報をアプリに表示する

アプリIDを指定して、グラフの情報を取得して表示するというアプリを作ってみたいと思います。
グラフAPIのドキュメントはこちら

https://developer.cybozu.io/hc/ja/articles/900005122323



# 1つ目のアプリ、グラフのあるアプリ
アプリストアから案件管理アプリを追加します。
もうあるよーという方はこちらは飛ばして2つ目のアプリを追加してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/51310402-eaa1-2633-0f20-e1d2471473aa.png)

# 2つ目のアプリ、グラフ設定を取得するアプリ
今回の主役アプリです。
「はじめから作成」でポチポチ作っていきます。

こんな見た目＆フィールドにします。
アプリIDに入力してボタンをクリックすれば、テーブルにグラフの設定を表示されるという仕様です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/b3f18fab-e0a4-c897-be07-618cb0754164.png)



| フィールド種類 | フィールド名 | フィールドコード |備考|
|:-:|:-:|:-:|:-:|
|文字列(1行)   |   アプリID| アプリID  |   |
|スペース   |  -- | sp_btn  | グラフの情報取得ボタンになる  |
| 文字列(1行)  |  グラフ名 | name  |  テーブル内 |
| 文字列(1行)   | グラフID  | id  | テーブル内  |
| 文字列(1行)   | グラフの種類  | chartType  | テーブル内  |
| 文字列(1行)   | グラフ表示モード |  chartMode | テーブル内  |

## JavaScriptカスタマイズ

即時関数に、use strictをつけて、
追加、編集画面表示で動くようにしておきます。

```js
(() => {
  "use strict";

  kintone.events.on(
    ["app.record.create.show", "app.record.edit.show"],
    (event) => {
      //処理
    }
  );
})();

```

スペースフィールドにボタンを設置します。

```js
//ボタン設置
const sp = kintone.app.record.getSpaceElement("sp_btn");
const btn = document.createElement("button");
btn.textContent = "グラフの情報取得";
sp.appendChild(btn);
```

ボタンクリックのイベントです。REST API を`await`で呼び出すので`async`をつけておきます。
※`addEventListener`の方が好きな人はそちらで書いてね!

```js
//ボタンクリック
btn.onclick = async () => {
  //処理
}
```

次はグラフAPIでグラフの設定を呼び出します。
`kintone.app.record.get()`でクリック時のレコードの内容を取得するようにしましょう。

```js
//クリック時のレコードの内容を取得
const obj = kintone.app.record.get();
const body = {
  app: obj.record.アプリID.value,
};

//グラフAPIでグラフの設定を呼び出す
const graphSetting = await kintone.api(
  kintone.api.url("/k/v1/app/reports", true),
  "GET",
  body
);
```

次はテーブルにグラフの設定を書くところです。
説明は後述します。


```js
//テーブルの行たち
const tRows = [];
//グラフ名でグラフ設定内をループして行を作る
Object.keys(graphSetting.reports).forEach((g) => {
  tRows.push({
    value: {
      name: {
        type: "SINGLE_LINE_TEXT",
        value: graphSetting.reports[g].name,
      },
      id: {
        type: "SINGLE_LINE_TEXT",
        value: graphSetting.reports[g].id,
      },
      chartType: {
        type: "SINGLE_LINE_TEXT",
        value: graphSetting.reports[g].chartType,
      },
      chartMode: {
        type: "SINGLE_LINE_TEXT",
        value: graphSetting.reports[g].chartMode,
      },
    },
  });
});

//レコードのテーブルに行を挿入
obj.record.テーブル.value = tRows;
kintone.app.record.set(obj);
```
`tRows`はテーブルの行たちが入る配列です。
呼び出したグラフ設定は配列の要素番号ではなくて**key**で指定しないといけないので、
`Object.keys(graphSetting.reports).forEach(～`のような感じでループします。

`graphSetting.reports[g].name`、`graphSetting.reports[g].id`などはグラフの設定から持ってきています。name、id、chartType、chartModeはそれぞれ

* name : グラフ名  
* id   :  グラフのID 
* chartType : グラフの種類  
* chartMode : グラフの表示モード  

です。
詳しくは、グラフAPIのドキュメントの「レスポンスパラメータ」のところを確認してくださいね。
↓グラフAPI（GET)ドキュメント

https://developer.cybozu.io/hc/ja/articles/900005122323

コード全体はこちらです↓

https://gist.github.com/juridon/3b1c4c992c71678001ed1c2c4eb2637e

# 動作確認＆まとめ

こんな感じに動いたでしょうか？？
（とにかく動くだけのコードなので、エラー処理などは適宜書いてくださいね！）

![graphapi.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/cf38590a-d1c0-61d9-3b9f-312f8eae0303.gif)

というわけで、
グラフの設定の取得をしてみました！
次回はこのアプリをちょっと進化させて、グラフ設定の更新やグラフの新規追加をするアプリを作ってみたいと思います。