kintone

【緊急任務】未納管理を作れ!!Part.2

《未納管理シリーズ》
【緊急任務】未納管理を作れ!!Part.1
【緊急任務】未納管理を作れ!!Part.2 当記事

今回は前回決めた仕様の

②請求管理アプリ上の未納チェックボタンを押すと『未納』ステータスになっているレコードのプロセスが一つ進み、【コンビニ払い用紙発行待ち】になる。この時の作業者は各教室の事務担当者。

を作っていこう。

ボタンを設置しよう

kintoneの一覧画面にボタンを設置するのはcybozu developer networkに
最適な記事があるのでそちらを参考にした。
第2回 レコード一覧画面にボタンを置いてみよう!(外部リンク)

設置する場所によってややコードが変わるので注意しよう。
一覧画面表示ボタンの右側に設置したい場合は
kintone.app.getHeaderMenuSpaceElement()
一覧画面表示ボタンの下(レコードの真上)に設置したい場合は
kintone.app.getHeaderSpaceElement()
を用いる。

ボタンが押されたら未納チェックを開始

ボタンが押されたときのイベントは
ボタンのid.onclick = function() { この中にコードを記述する }
で実装できる。

①まずはステータスが「未納」のレコードを取得する

もうレコードの作成・更新・取得・削除等はkintoneUtilityが便利すぎる。
クエリに条件を付けて記述する。
入金ステータスが未納で、プロセス管理が未処理になっているレコードを抽出する。

kintoneUtility.rest.getAllRecordsByQuery({
                                app: アプリ,
                                query: '校舎 = "' + school_house + '" and 入金ステータス in ("未納") and ステータス in ("未処理")',
                                isGuest: false
                            })

②プロセス更新対象のレコードをまとめる

取得したレコードを更新用のレコードに整形していく。
セット用のレコード(setRecords)を配列として作成し、その配列に更新用データを入れていく。

.then(function (response) {
                                window.alert("未納が" + response.records.length + "件見つかりました。ステータスを更新します。");
                                var setRecords = [];
                                //未納レコードのステータスをコンビニ払発行待へ
                                for (var ix = 0; ix < response.records.length; ix++) {
                                    var recordId = response.records[ix].$id.value;
                                    var assignee = response.records[ix].経理事務担当.value;
                                    var assigneeCode = [];
                                    for (var iy = 0; iy < assignee.length; iy++) {
                                        assigneeCode.push(assignee[iy].code);
                                    }
                                    var pushData = {
                                        "id": recordId,
                                        "action": "処理開始",
                                        //"assignee":  assigneeCode,
                                        "revision": -1
                                    };


                                    setRecords.push(pushData);
                                }

③更新処理を行う

既に整形済みデータをもとに更新用bodyを作成し、
kintoneUtilityを用いて更新処理を行う。

var body = {
                                    "app": アプリID,
                                    "records": setRecords
                                };
                                kintone.api(kintone.api.url('/k/v1/records/status', true), 'PUT', body, function (resp) {
                                    //success
                                    console.log(resp);
                                }, function (error) {
                                    //error
                                    console.log(error);
                                });

                                hideSpinner();
                                window.alert('ステータスの更新が完了しました');
                                location.reload();

同アプリ内の更新のため、最後にはlocation.reload();を用いて画面を更新するのを忘れない。