ボタンのキャンセルについて

いつも大変お世話になっております。
前日投稿させていただきました以下について
追加でアドバイスいただきたく投稿させております。

★実現したいこと
updateボタンをクリックした際に
「今日の日付けで更新を反映させますか? ok キャンセル 」
⇒➀ok をクリック→更新成功ok ⇒ 今日の日付けで更新できている
⇒②キャンセルをクリック→ キャンセルしましたok ⇒ 更新するとキャンセルされてなく、更新されてしまう。。。

★②を更新せず、キャンセルしたいがなかなかうまくできなくて
ご指導いただければ幸いです。ぜひともどうぞよろしくお願い致します。

実行したコードが以下となります。

(function() {
  "use strict";
  kintone.events.on('app.record.index.show', function(event){
    const viewId = 11113333;
    if (event.viewId !== viewId) {
      return event;
    }
    var button = document.createElement('button');
    button.innerText = 'update';
    kintone.app.getHeaderMenuSpaceElement().appendChild(button);
    button.addEventListener('click', function(){

      //ここに更新処理をかく
      var getBody = { app: kintone.app.getId(),};
      
      kintone.api(kintone.api.url('/k/v1/records', true), 'GET', getBody, function (resp) {
        var records = resp["records"];
        var putBody = { app: kintone.app.getId(),
            records: []
       };

        records.forEach(function(record){
          var birthDayFieldCode = record['生年月日'].value;
          var joiningDayFieldCode = record['入社日'].value;
        /**
        * 経過年月日を計算する
        * @param {string} dateStr 日付文字列
        * @returns {object} 計算結果のオブジェクト
        */
          var calculateDuration = function(dateStr) {
            var currentDate = luxon.DateTime.local().startOf('day');
            var date = luxon.DateTime.fromISO(dateStr).startOf('day');
            // 経過期間を計算する
            var duration = currentDate.diff(date, ['years', 'months', 'days']);
              return duration.toObject();
          };

          // 年齢を計算する
          var birthDayValue = record['生年月日'].value;
          var birthDayDuration = calculateDuration(birthDayValue);
            record['年齢'].value = (birthDayDuration.years + '歳' + birthDayDuration.months + 'ヶ月');

          // 入社からの経過年月を計算する
          var joiningDayValue = record['入社日'].value;
          var joiningDayDuration = calculateDuration(joiningDayValue);
            record['勤続年数'].value = (joiningDayDuration.years + '年' + joiningDayDuration.months + 'ヶ月');

          // リクエストパラメータ作成
          putBody.records.push({
            "id": record.$id.value,
            "record": {
              "勤続年数": {
                "value": record.勤続年数.value
              },
              "年齢": {
                "value": record.年齢.value
              },
            }
          });
      });

        kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', putBody, function(resp){
        // success
          var res = confirm("今日の日付けで更新を反映させますか");
            if (res === false) {
              alert('キャンセルしました');
              window.location.href = window.location.origin + window.location.pathname + "#record=" + event.record.$id.value; // 画面遷移
           }else
              alert("更新成功");
                location.reload(); // 成功したら画面を更新
             }, function(resp) {
                // error
                alert("更新失敗");
              });  
      });
  });
  });
  
})();

大川さん

こんにちわ

②のところですが、ボタンクリックイベント発火時
一番最初に「今日の日付けで更新を反映させますか? ok キャンセル」の
confirmを表示させて
okの場合、処理をする
キャンセルの場合、処理をしない
にすれば解決するかと思います。
コード
button.addEventListener(‘click’, function(){
if(!confirm(“今日の日付けで更新を反映させますか”)){
return;
}
以下処理内容(省略)

「いいね!」 1

あらい様

お世話になっております。
コードまでご丁寧にアドバイスいただき、誠にありがとうございます。
まだ初心者で全然知識不足で大変申し訳ございませんが
教えていただいたコードの追加箇所が間違っている関係だと思いますが
「updateボタン」が表示されなくなりました。
もうちょっとサポートいただくことは可能でしょうか?
よろしくお願い致します。

kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘PUT’, putBody, function(resp){
button.addEventListener(‘click’, function(){
if(!confirm(“今日の日付けで更新を反映させますか”)){
return;
}else
// success
alert(“更新成功”);
location.reload(); // 成功したら画面を更新
}, function(resp) {
// error
alert(“更新失敗”);
});
});

大川さん

私の説明不足ですいません。
下記コードで機能しますでしょうか。

(function() {
“use strict”;

kintone.events.on(‘app.record.index.show’, function(event){
const viewId = 11113333;
if (event.viewId !== viewId) {
return event;
}
var button = document.createElement(‘button’);
button.innerText = ‘update’;
kintone.app.getHeaderMenuSpaceElement().appendChild(button);
button.addEventListener(‘click’, function(){
if(!confirm(“今日の日付けで更新を反映させますか”)){
return;
}
//ここに更新処理をかく
var getBody = { app: kintone.app.getId(),};

 return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', getBody, function (resp) {
    var records = resp["records"];
    var putBody = { app: kintone.app.getId(),
        records: []
   };

    records.forEach(function(record){
      var birthDayFieldCode = record['生年月日'].value;
      var joiningDayFieldCode = record['入社日'].value;
    /**
    * 経過年月日を計算する
    * @param {string} dateStr 日付文字列
    * @returns {object} 計算結果のオブジェクト
    */
      var calculateDuration = function(dateStr) {
        var currentDate = luxon.DateTime.local().startOf('day');
        var date = luxon.DateTime.fromISO(dateStr).startOf('day');
        // 経過期間を計算する
        var duration = currentDate.diff(date, ['years', 'months', 'days']);
          return duration.toObject();
      };

      // 年齢を計算する
      var birthDayValue = record['生年月日'].value;
      var birthDayDuration = calculateDuration(birthDayValue);
        record['年齢'].value = (birthDayDuration.years + '歳' + birthDayDuration.months + 'ヶ月');

      // 入社からの経過年月を計算する
      var joiningDayValue = record['入社日'].value;
      var joiningDayDuration = calculateDuration(joiningDayValue);
        record['勤続年数'].value = (joiningDayDuration.years + '年' + joiningDayDuration.months + 'ヶ月');

      // リクエストパラメータ作成
      putBody.records.push({
        "id": record.$id.value,
        "record": {
          "勤続年数": {
            "value": record.勤続年数.value
          },
          "年齢": {
            "value": record.年齢.value
          },
        }
      });
  });

 return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', putBody);
 }).then(function() {
 // success
 alert("更新成功");
 location.reload(); // 成功したら画面を更新
 }).catch(function(error) {
 // error
 console.log(error);
 alert("更新失敗");
 });  

});
});
})();

「いいね!」 1

あらい様

お世話になっております。
私のコード追加箇所が間違ってまして、大変失礼いたしました。

お忙しい中、再度コードいただき、誠にありがとうございます。
いただいたコードで updataボタンがやっぱり表示されなくて・・・
もうちょっと確認させていただきます。
本当にありがとうございます。

大川さん

こんばんわ

私の方で再度ソースコード確認してみました。
大川さんのほうで転記したソースコードが一概に
これが原因で機能していなかったことは特定できませんでしたが
私の方で修正したソースコードではupdateボタンが表示されました。
以下ソースコードを記載します。

(function(){
“use strict”;

kintone.events.on(‘app.record.index.show’,function(event){
const viewId = 20;
if (event.viewId !== viewId) {
return event;
}
var button = document.createElement(‘button’);
button.innerText = ‘update’;
kintone.app.getHeaderMenuSpaceElement().appendChild(button);
button.addEventListener(‘click’,function(){
if(!confirm(“今日の日付けで更新を反映させますか”)){
return;
}
//ここに更新処理をかく
var getBody = { app: kintone.app.getId()};

return kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, getBody, function (resp) {
var records = resp[“records”];
var putBody = { app: kintone.app.getId(),
records:
};

records.forEach(function(record){
  var birthDayFieldCode = record['生年月日'].value;
  var joiningDayFieldCode = record['入社日'].value;
/**
* 経過年月日を計算する
* @param {string} dateStr 日付文字列
* @returns {object} 計算結果のオブジェクト
*/
  var calculateDuration = function(dateStr) {
    var currentDate = luxon.DateTime.local().startOf('day');
    var date = luxon.DateTime.fromISO(dateStr).startOf('day');
    // 経過期間を計算する
    var duration = currentDate.diff(date, ['years', 'months', 'days']);
      return duration.toObject();
  };

  // 年齢を計算する
  var birthDayValue = record['生年月日'].value;
  var birthDayDuration = calculateDuration(birthDayValue);
    record['年齢'].value = (birthDayDuration.years + '歳' + birthDayDuration.months + 'ヶ月');

  // 入社からの経過年月を計算する
  var joiningDayValue = record['入社日'].value;
  var joiningDayDuration = calculateDuration(joiningDayValue);
    record['勤続年数'].value = (joiningDayDuration.years + '年' + joiningDayDuration.months + 'ヶ月');

  // リクエストパラメータ作成
  putBody.records.push({
    "id": record.$id.value,
    "record": {
      "勤続年数": {
        "value": record.勤続年数.value
      },
      "年齢": {
        "value": record.年齢.value
      },
    }
  });

});

return kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘PUT’, putBody);
}).then(function() {
// success
alert(“更新成功”);
location.reload(); // 成功したら画面を更新
}).catch(function(error) {
// error
console.log(error);
alert(“更新失敗”);
});
});
});
})();

viewIdは修正してください

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