kintone 一覧画面で複数レコード更新

kintone で、一覧画面で複数レコードを更新する例です。


![図1.png](https://qiita-image-store.s3.amazonaws.com/0/100572/e37dce08-a60f-7641-d743-b5b674f52cd4.png)

コミュニティの質問「[kintone　CSVデータインポート時の一部数値の削除について](https://cybozudev.zendesk.com/hc/ja/community/posts/115017516403-kintone-CSV%E3%83%87%E3%83%BC%E3%82%BF%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E6%99%82%E3%81%AE%E4%B8%80%E9%83%A8%E6%95%B0%E5%80%A4%E3%81%AE%E5%89%8A%E9%99%A4%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)」で回答した内容を整理しました。

# 概要

数値項目が "0" の場合、"" の更新する処理です。

処理的には、下記の例を組み合わせたものです。

- [第2回 レコード一覧画面にボタンを置いてみよう！](https://cybozudev.zendesk.com/hc/ja/articles/201767270)
- [SweetAlert を使って、メッセージをスタイリッシュに表示させよう！](https://cybozudev.zendesk.com/hc/ja/articles/204790870-SweetAlert-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AA%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%95%E3%81%9B%E3%82%88%E3%81%86-)
- [第8回 簡単な更新処理に挑戦してみよう](https://cybozudev.zendesk.com/hc/ja/articles/203331050)
- [「kintone Utility Library for JavaScript」の使い方](https://cybozudev.zendesk.com/hc/ja/articles/115000333223)

個別の例だと、わかりにくい点がありますので、まとめてみました。


# 処理のポイント

- 更新対象件数が 1000件程度あるため、最初に対象レコード件数を表示して確認
- 処理中が分かるように、SweetAlert で表示
- kintone Utility Library を使って、複数レコードをまとめて処理。

# コード

```updateRecords.js
(function() {
    "use strict";
    kintone.events.on("app.record.index.show", function(event) {
        if (document.getElementById('my_index_button') !== null) {
            return event;
        }

        var myIndexButton = document.createElement('button');
        myIndexButton.id = 'my_index_button';
        myIndexButton.innerHTML = 'ゼロ一括更新';

        // ボタンクリック時の処理
        myIndexButton.onclick = function() {
            updateZeroValue();
        };

        kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);        
        return event;

        // ゼロ数値更新
        function updateZeroValue() {
            // ゼロ対象レコードの読み込み
            var param = {
                app: event.appId,
                query: '売上額 = 0 or 入金額 = 0 or 消費税 = 0 limit 1',
                fields: ['$id', '売上額', '入金額', '消費税'],
                totalCount: true,
                isGuest: false
            };
            kintoneUtility.rest.getRecords(param).then(function(resp) {
                // 更新処理
                if (resp.totalCount > 0) {
                    swal({
                        title: 'ゼロ数値を更新します',
                        text: '更新対象レコード　'　+ resp.totalCount + ' 件',
                        type: 'success',
                        showCancelButton: true,
                        closeOnConfirm: false,
                        showLoaderOnConfirm: true,
                    }, function() {

                        var param = {
                            app: event.appId,
                            query: '売上額 = 0 or 入金額 = 0 or 消費税 = 0',
                            fields: ['$id', '売上額', '入金額', '消費税'],
                            totalCount: false,
                            isGuest: false
                        };
                        kintoneUtility.rest.getAllRecordsByQuery(param).then(function(resp) {
                            var records = resp.records;
                            var newRecords = records.map(function(record) {
                                var newRec = {
                                    id: record['$id'].value,
                                    record: {}
                                }
                                if (record['売上額'].value === '0')
                                    newRec.record['売上額'] = { value: '' };
                                if (record['入金額'].value === '0')
                                    newRec.record['入金額'] = { value: '' };
                                if (record['消費税'].value === '0')
                                    newRec.record['消費税'] = { value: '' };
                                return newRec;
                            });

                            var param = {
                                app: event.appId,
                                records: newRecords,
                                isGuest: false
                            };
                            kintoneUtility.rest.putAllRecords(param).then(function(resp) {
                                // 更新完了
                                swal({
                                    title: '更新完了!',
                                    text: newRecords.length + ' レコード更新しました',
                                    type: 'success',
                                }, function() {
                                    location.reload();
                                });
                            }).catch(function(error) {
                                // 更新エラー処理
                                sweetAlert("レコード更新エラー！", error.message, "error");
                            });
                        }).catch(function(error) {
                            // エラー時の処理
                            sweetAlert("レコード取得エラー！", error.message, "error");
                        });
                    });
                }
                else {
                    swal('更新対象レコードがありません！');
                }
            }).catch(function(error) {
                // エラー時の処理
                sweetAlert("レコード取得エラー！", error.message, "error");
            });
        }
    });
})();
```



# JavaScript / CSS カスタイマイズ設定

JavaScript は、SweetAlert と kintone Utility Library を忘れずに。
CSS には、SweetAlert 。


![2017-04-05_14h55_03.png](https://qiita-image-store.s3.amazonaws.com/0/100572/04a6cb23-4395-44be-9581-58549b15065c.png)