レコード再利用した元のレコードを操作したい

様々なプログラムを参照してきましたが、なかなか思ったようにいきません。

よろしくお願い致します。

 

■実現したいこと

レコード再利用した際に、そのレコードを最新版と判断できるよう、再利用元のレコードのカウンター(フィールド名:最新判定(文字列))を0に変更したい。

 

1.新規作成時に最新判定に1が入力される

2.管理番号の重複は無し

 

■現在の状況

再利用レコードの保存ボタンを押しても、詳細画面に戻らないが保存はされている

再利用元レコードの最新判定は1のまま変化なし

 

(() => {

  ‘use strict’;

  kintone.events.on(‘app.record.create.submit.success’, (event) => {

    const teisyutu = event.record[‘提出回数’][‘value’];

    const app = kintone.app.getid();

    var kanri = (event.record[“管理番号”][“value”])?parseInt(event.record[“管理番号”][“value”]):0;

    kanri = kanri-1;

    query = 管理番号 = ${kanri};

    var params = {app: app,

                  query: query,

                 }

 

    if(teisyutu > 1){ //新規レコード追加時は実行しない

 

         kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’,

         params).then(function(resp) {

 

        var record = kintone.app.record.get();

        resp.record.record[‘最新判定’].value = 0;

        kintone.app.record.set(record);

       });

  };

});

})();

詳細画面に戻らないのは

    const app = kintone.app.getid();

この部分でエラーが起きているためです。アプリIDを求めるにはgetid()ではなくgetId()です。

エラー情報等はこちらからコンソールを確認することができるので、エラーが出るか等を参考にされると良いでしょう。

回答頂きありがとうございます。

レコード詳細画面に戻らない現象は解消されました。

しかし、再利用元のレコードは変化をさせることができず、エラー表示が遅れて出てきます。

■エラー表示

Uncaught (in promise) Error: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received

■コード

 (() => {

  'use strict';

  // レコード再利用ボタンで編集、保存成功後に適用

  kintone.events.on('app.record.create.submit.success', (event) => {

    const teisyutu = event.record['提出回数']['value'];

    const app = kintone.app.getId();

    var kanri = (event.record["管理番号"]["value"])?parseInt(event.record["管理番号"]["value"]):0;

    kanri = kanri-1;

    var query = '管理番号 = "' +  kanri + '"';

    var params = {app: app,

                  query: query,

                 }

    if(teisyutu > 1){ //新規レコード追加時は実行しない

         kintone.api(kintone.api.url('/k/v1/records', true), 'GET',

         params).then(function(resp) {

         

         resp.record.records[0].最新判定.value = 0;

         kintone.app.record.set(record);

       });

  };

  return event;

});

})();

BTS佐々木 さま

次に発生しているエラーは、処理を続けようとしているものの、先にレコード保存に伴うページ推移が発生している旨のエラーです。この辺りについては、Promiseの理解が必要です。また、そのエラーを解消しても

           resp.records[0].最新判定.value = 0;

↑取得したレコードに対しての書き換えはできません。実現させるためには、レコードの更新APIが必要です。

           kintone.app.record.set(record);

↑(処理がPromiseの場合)イベントハンドラ内でkintone.app.record.setは使えないのと、そもそもrecordが宣言されていないのでエラーになります。

と、まだ修正箇所があります。一つ一つ解消と思っていましたが、Promiseの理解には時間が掛かると思うので、取り敢えずは

(() => {
    'use strict';

    kintone.events.on([
        'app.record.create.submit.success',
        'mobile.app.record.create.submit.success'
    ], (event) => {
        let appId = event.appId;
        let isReuse = location.href.match(/edit\?/);

        if (!isReuse) return event;

        let recordId = location.href.split(/record=|&reuse/)[1];
        let param = {
            app: appId,
            id: recordId,
            record: {
                '管理番号': {
                    value: 0
                }
            }
        };

        return kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', param).then(() => {
            return event;
        }).catch((error) => {
            alert(JSON.stringify(error));
            return event;
        });
    });
})();

こちらをお使い下さい。

mls-hashimoto様

コードを書いていただきありがとうございます。

自分で作ることが出来ず悔しいですが、頂いたコードを一つ一つ調べて

スキルアップできるよう努力します。

 

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