レコード一覧画面で任意のフィールド値取得方法

お世話になります。

 

現在、TIS様の「一覧画面編集プラグイン」を使ってレコード一覧画面にて値を変更できるようにしています。

https://www.tis2010.jp/grideditor/)

※プラグイン内部で発生するイベントについて、ハンドラーを実行することも出来るようです。

実装したい処理としては、上記プラグインを使用しながらレコード一覧画面で任意のレコードフィールドを編集したときにREST API(GETとPUT)を動かしたいです。

ただ、レコード一覧画面でレコードを順番に取得(for文)することはできるのですが、そうすると上から順番にしかフィールドの値が取得できません。

レコード一覧画面で任意のレコードフィールドを取得するにはどのように記述すればよろしいでしょうか。

 

例)レコード一覧画面で赤丸のところを編集したらそのレコードの年月(レコード左側の2022 01)を取得してGETするためのクエリに使用したい

・以下で取得すると「Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘value’)」のエラー。

const record = event.record;

  var year = record.年.value;

  var month = record.月.value;

 

・for文で取得すると当たり前ですが、上から順番でしか取得できないので、1番上の「2022 12」が取得されてしまう。

const records = event.records

for (var i = 0; i < records.length; i++) {

    var year = records[i].年.value;

    var month = records[i].月.value;

}

 

赤丸セルを選択して、変更するという処理は、プラグインが担当しているので介入はプラグインそのものを変更しないと難しいのではないかとおもいます。

前提条件や制約はありますが、変更をWebhookで検知してREST APIを動かすのはどうでしょうか?

371966959511 様

ご返信ありがとうございます。

Webhookを使用するのは初めてでして、大変お恥ずかしいのですが

WebhookでREST APIを動かす場合、どのように組めばよろしいでしょうか。

どこか参考になるページなどありましたら、ご教授いただけると助かります。

 

以上、よろしくお願いいたします。

このページではZapierという外部サイトなどへ処理を依頼する形になります。

Webhook機能、どんな時使うの?利用シーン&設定方法まとめ! | kintone hive online
https://kintone-blog.cybozu.co.jp/developer/000304.html

Zapier以外もGoogle Spreadsheetを使う例などもあります。

 

371966959511 様

ありがとうございます。

harada様にお聞きするのはお門違いかと思いますが、もし知っていればご教授いただけないでしょうか。

こちらのプラグインですが、「プラグイン内部で発生するイベントについて、ハンドラーを実行することも出来ます。」と記載があります。

プラグインの設定画面で、画像のように説明があるのでプラグインのハンドラー?でREST APIも動かせる?と思ったのですがこれはまた別の処理になるのでしょうか…

 

なるほど、そこまで見ておりませんでした。

kintone.events.on('app.record.index.show', function(event){
    var handler = function(event) {
    console.log(event);
    };
    tisevent.on('grideditor.record.index.edit.change.日付', handler);
});

を設定してブラウザーのコンソールを表示したら変更後の日付がとれました。

371966959511 様

ご確認ありがとうございます。

一応自分も上記のように設定して、フィールドの値取得は出来たのですが、取得した値をもとにクエリを書く方法が分からず詰まっております…

本文の画像の

編集したフィールド(赤丸)のレコードの「年」「月」と「ID」(値1の左側)をクエリに入れ検索をかけて、

一致するレコードがあれば、そのレコードに値4,値5を入れる(PUT)ようにできればと思っております。

今書いているコードだと「年」取得でエラーが出てしまう状態です。

 

■ソースコード

kintone.events.on(events1, function(event) {

        var handler = async function(event) {

            const record = event.record;

                var year = record.年.value;

                var month = record.月.value;

                var userID = record.ID.value;

                const APP_ID = 500;

                    //年・月・IDが一致するレコードを探す

                    let paramForGet = {

                        ‘app’: APP_ID,

                        ‘query’: ‘年 in ("’ + year + ‘“) and 月 in (”’ + month + ‘") and ID = "’ + ID + ‘" limit 500’,

                    };

                        console.log(paramForGet)

                    //↑で一致するレコード取得

                    const get_resp = await kintone.api(kintone.api.url(‘/k/v1/records’,true), ‘GET’, paramForGet)

                        if(!get_resp.records.length) return;

                            let paramForPut = {

                                app: APP_ID,

                                id: get_resp.records[0].$id.value,

                                record: {

                                    “PUT先_値4”: {

                                        value: record[“値4”].value

                                    },

                                    “PUT先_値5”: {

                                        value: record[“値5”].value

                                    }

                                }

                            }

                            console.log(paramForPut);

                    //↑で指定したフィールドをコピー

                    const put_resp = await kintone.api(kintone.api.url(“/k/v1/record.json”, true), “PUT”, paramForPut)

                        console.log(put_resp);

                //}

            }

        }

        tisevent.on(‘grideditor.record.index.edit.change.値4’, handler);

        tisevent.on(‘grideditor.record.index.edit.change.値5’, handler);

    return event;

    })

          const record = event.record;
          debugger
          var year = record.年.value;

を入れてみました。

とあり、変更した部分のデータしか入っていませんでした。

プラグインの設定画面に書いてある

「※レコードオブジェクトには値を変更したフィールドのみが格納されておりますので、他のフィールドの値も更新したい場合はレコードオブジェクトにそのフィールドを追加して下さい。」

とあるので、その処理が必要なのではないでしょうか?

そのため値4,値5にはない年のデータが取得できない。

371966959511 様

ご確認ありがとうございます。

となると、フィールド値4を編集したときにそのレコードの別フィールド「年」「月」を取得するのは出来ないということでしょうか。

「他のフィールドの値も更新したい場合はレコードオブジェクトにそのフィールドを追加して下さい。」というのが、どのように追加するのかよく理解が出来ません…申し訳ありません。

コード内に記述する形でしょうか。

正確なところはわかりませんが、他のフィールドの値も更新したい場合というのは、別の項目に値を追加する場合はレコードに追加して一緒に書き込んでくださいということではないでしょうか?たとえば、フラグを立てるなど値が決まっている場合の想定でしょうか?

今回やりたいことは、同じ行の他の値をとりたいと理解しています。レコード番号はとれていますので、別のイベントで?レコード番号から当該行の年、月をとってきて、REST APIを使うことになるでしょうか?

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。