kurie
(大川)
2024 年 7 月 26 日午前 2:57
1
いつも大変お世話になっております。
前日投稿させていただきました以下について
追加でアドバイスいただきたく投稿させております。
大変お世話になっております。
まだまだうまくカスタマイズできなくて、
を参考にしながら進めておりますがつまずいてしまい、初投稿させていただきました。
一覧画面で、以下のように、更新ボタンをクリックすると「年齢」「継続年数」を今日の日付けで自動で埋めることができるようにしたいですが、全然反応しておりません。
[image]
「今日」を認識させるように、どうすればよろしいか全然想定できなく…
★実現したいこと
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("更新失敗");
});
});
});
});
})();
yarai
(yt)
2024 年 7 月 26 日午前 6:43
2
大川さん
こんにちわ
②のところですが、ボタンクリックイベント発火時
一番最初に「今日の日付けで更新を反映させますか? ok キャンセル」の
confirmを表示させて
okの場合、処理をする
キャンセルの場合、処理をしない
にすれば解決するかと思います。
コード
button.addEventListener(‘click’, function(){
if(!confirm(“今日の日付けで更新を反映させますか”)){
return;
}
以下処理内容(省略)
「いいね!」 1
kurie
(大川)
2024 年 7 月 26 日午前 7:31
3
あらい様
お世話になっております。
コードまでご丁寧にアドバイスいただき、誠にありがとうございます。
まだ初心者で全然知識不足で大変申し訳ございませんが
教えていただいたコードの追加箇所が間違っている関係だと思いますが
「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(“更新失敗”);
});
});
yarai
(yt)
2024 年 7 月 26 日午前 7:52
4
大川さん
私の説明不足ですいません。
下記コードで機能しますでしょうか。
(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
kurie
(大川)
2024 年 7 月 26 日午前 8:25
5
あらい様
お世話になっております。
私のコード追加箇所が間違ってまして、大変失礼いたしました。
お忙しい中、再度コードいただき、誠にありがとうございます。
いただいたコードで updataボタンがやっぱり表示されなくて・・・
もうちょっと確認させていただきます。
本当にありがとうございます。
yarai
(yt)
2024 年 7 月 26 日午後 12:26
6
大川さん
こんばんわ
私の方で再度ソースコード確認してみました。
大川さんのほうで転記したソースコードが一概に
これが原因で機能していなかったことは特定できませんでしたが
私の方で修正したソースコードでは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(“更新失敗”);
});
});
});
})();
「いいね!」 1
system
(system)
クローズされました:
2024 年 7 月 31 日午前 6:26
8
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。