JavaScriptカスタマイズやプラグインを使わないで、kintoneでステータスを一括更新する方法

![2020-12-25_00h18_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/9ae28227-ac99-a01d-667f-cfa6f1ca7605.png)
# はじめに
この記事は「[kintone Advent Calendar 2020](https://qiita.com/advent-calendar/2020/kintone)」の24日目の記事です。

kintoneのプロセス管理機能を有効にしたアプリで、ステータスを一括更新したいことがあります。
通常のフィールドなら、ファイルの書き出しと読み込みで一括更新できますが、ステータスはファイル読み込みでは更新できません。
[複数レコードのステータスを一括で処理する機能は未搭載です。](https://faq.cybozu.info/alphascope/cybozu/web/kintone/Detail.aspx?id=2093 "よくあるご質問 | プロセス管理アプリで複数レコードのステータスを一括で変更できますか？")

業務で一括更新が頻繁に必要なら、[JavaScriptカスタマイズで一括更新](https://developer.cybozu.io/hc/ja/articles/211583223 "ワンクリックで一括承認をしてみよう")や、[プラグインで一括更新](https://kintone-sol.cybozu.co.jp/integrate/jbat005.html "ステータス更新＋（ATTAZoo+）ＪＢアドバンスト・テクノロジー株式会社")することを検討するといいでしょう。

通常は必要がなくても、一時的に必要になった場合はどうしたらいいでしょうか。
プロセス管理の設定を変更したときなど、レコードのステータスをまとめて更新したいことがありえます。
「[途中でプロセス管理を有効にするとステータスが全て初期](https://kinbozu.com/blog/process-status/ "キンボウズ")」ということもあるでしょう。

また、JavaScriptカスタマイズやプラグインの設定にはkintoneシステム管理権限が必要ですが、その権限がなければ設定できません。

そのような場合は、ブラウザの開発者ツール（以下Chromeデベロッパーツールで説明します）のConsole画面でREST APIを実行すれば、ステータスを一括更新できます。
ConsoleでのREST APIの実行は、kintoneシステム管理権限がない一般ユーザーでも可能です。

# ChromeデベロッパーツールのConsole画面で、REST APIを実行する
サンプルアプリを利用して、ChromeデベロッパーツールのConsole画面で、REST APIを実行する方法を確認します。

## サンプルアプリ
プロセス管理が設定されているサンプルアプリの「To Do」を追加して、レコードを何件か追加しておきます。
レコード番号やステータス、作業者が見やすいレコード一覧を、追加しておくといいでしょう。
![2020-12-24_22h41_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/437a34f3-5601-1c37-f007-cdbc8ec0c7f8.png)

## ChromeデベロッパーツールのConsole画面
「To Do」アプリのレコード一覧画面で、ChromeでデベロッパーツールのConsole画面を表示します。
「[動かない？そんな時はデバッグをしてみよう！入門編](https://developer.cybozu.io/hc/ja/articles/207613916 "cybozu developer network")」を参考にして、Chromeのデベロッパーツールを表示し、Consoleタブをクリックします。
![2020-12-24_23h00_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/0c77fced-e08c-5278-d16e-0256fb5da111.png)

## ConsoleでREST APIを実行する
「[ブラウザのデベロッパーツールを使って、kintone REST APIのサンプルを簡単に実行してみる！](https://developer.cybozu.io/hc/ja/articles/360025535551 "cybozu developer network")」を参考にして、レコードを取得してみましょう。
レコード一覧画面でレコードを一括取得するので、

* レコードIDの指定は不要
* URI /k/v1/record → /k/v1/records

とします。
なお、レコード取得のREST APIについては、「[レコードの取得（GET）](https://developer.cybozu.io/hc/ja/articles/202331474 "cybozu developer network")」を参照してください。

```Javascript
var body = {
  'app': kintone.app.getId()
};

kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
  // success
  console.log(resp);
}, function(error) {
  // error
  console.log(error);
});
```

![2020-12-24_23h19_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/56194630-11e3-8699-46e0-676ac50ab219.png)

Consoleに表示された{records:の先頭の▶をクリックすると、取得したレコードの内容を展開できます。
![2020-12-24_23h23_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/296d6e19-9f82-6d00-e092-c57d0bf0dd0a.png)


# ステータスを一括更新する
では、レコード一覧画面で、ステータスを一括更新しましょう。
ステータス更新のREST APIについては、「[複数のレコードのステータスを一括更新する](https://developer.cybozu.io/hc/ja/articles/204791550#anchor_changeRecordStatusBulk "レコードのステータスの更新 - cybozu developer network")」をご覧ください。
上記で実行したコードに、下記の修正をする必要があります。

* リクエストパラメータの変更
* URI /k/v1/records → /k/v1/records/status
* HTTPメソッド GET → PUT

## リクエストパラメータを準備する
リクエストパラメータは、「[複数のレコードのステータスを一括更新する](https://developer.cybozu.io/hc/ja/articles/204791550#anchor_changeRecordStatusBulk "レコードのステータスの更新 - cybozu developer network")」の「リクエストパラメータ」に「必須」と記載されている項目を指定します。

* アプリのID
* ステータスを更新するレコードの、レコードIDと実行するアクションと作業者の配列

「リクエストの例」の「ボディ」を参考にしてください。
例えば、次のような内容とします。
（実際に試す場合は、レコードIDや、実行するアクション、作業者は、試す環境にあわせて変更してください）

```Javascript
{
    'app': kintone.app.getId(),
    'records': [
        {
            'id': 12,
            'action': '依頼する（担当者を設定後）',
            'assignee': 'nakamura'
        },
        {
            'id': 13,
            'action': '依頼する（担当者を設定後）',
            'assignee': 'nakamura'
        },
        {
            'id': 14,
            'action': '依頼する（担当者を設定後）',
            'assignee': 'nakamura'
        }
    ]
}
```

多数のレコードを処理する場合は、Excelなどに上記の文字列を貼り付けて、一括で加工すると楽でしょう。
加工したExcelのデータをテキストエディタに貼り付けて、コードを整えましょう。

## 一括更新する
先ほどのコードを修正します。

* リクエストパラメータの変更
* URI /k/v1/records → /k/v1/records/status
* HTTPメソッド GET → PUT

```Javascript
var body = {
    'app': kintone.app.getId(),
    'records': [
        {
            'id': 12,
            'action': '依頼する（担当者を設定後）',
            'assignee': 'nakamura'
        },
        {
            'id': 13,
            'action': '依頼する（担当者を設定後）',
            'assignee': 'nakamura'
        },
        {
            'id': 14,
            'action': '依頼する（担当者を設定後）',
            'assignee': 'nakamura'
        }
    ]
};

kintone.api(kintone.api.url('/k/v1/records/status', true), 'PUT', body, function(resp) {
  // success
  console.log(resp);
}, function(error) {
  // error
  console.log(error);
});
```

レコード一覧のConsoleにコードを貼り付けてEnterキーで実行しましょう。
![2020-12-25_00h17_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/268043e9-27d2-5183-a38d-78fbeb8d31b4.png)

実行後、ブラウザの画面を再読み込みして、更新後のレコードを確認します。
![2020-12-25_00h18_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/e29e472b-0599-8b97-4b8e-014bd26588a4.png)

ステータスが「作業中」になり、作業者も設定されました！

# まとめ
ブラウザのデベロッパーツールのConsoleでREST APIを実行すると、標準機能を超えてレコードを操作できることがあります。
JavaScriptカスタマイズやプラグインなどの拡張機能で対応するかわりに、Consoleを使うことができます。
なお、一括更新で間違えると、元に戻すことができないので、慎重に操作しましょう。