プログラミング初心者です。
以下のようなカスタマイズをしたいと考えているのですが、自力では行き詰ってしまいました。
どなたかアドバイスをいただけないでしょうか。
<やりたいこと>
kintoneアプリのリマインダーで、繰り返し通知するようにしたいです。
レコード追加時に日付テーブルに「本日の日付+1週間おきの日付」を大量に設定すれば長期間繰り返しで通知されると思うのですが、どのように設定したらよいでしょうか。
1行目に「本日+7日目の日付」、2行目に「本日+14日目の日付」、3行目に「本日+21日目の日付」・・・というイメージです。
以下のコードで、特定の日付を初期値としてセットするところまではできたのですが・・・
~~~~~~~~~~~~~~~~~~~~~~~~
(function() {
‘use strict’;
kintone.events.on(‘app.record.create.show’, function(event) {
// 行の作成
var newRow1 = createValue_(‘’);
var newRow2 = createValue_(‘’);
var newRow3 = createValue_(‘’);
// table に初期値を定義する
event.record.table.value = [
newRow1,
newRow2,
newRow3
];
return event;
});
function createValue_(date1) {
return {
‘value’: {
‘日付’:{
‘type’:‘DATE’,
‘value’: date1
}
}
};
}
})();
~~~~~~~~~~~~~~~~~~~~~~~~
似たようなことができれば、他の方法でも結構です。
何卒よろしくお願いいたします。
N_okazaki さん
こんにちは!
やっつけで書いたコードで見苦しいかもですが、以下の処理でご希望の動作は可能でしょうか。
参考になれば嬉しいです。
※ moment.js を使ってます。
※ 変数 limit に指定した値の週分、サブテーブルを追加します。
※ bodyオブジェクト内には使用している日付フィールドのフィールドコードを指定してください。
(function () {
"use strict";
moment.locale("ja");
kintone.events.on(['app.record.create.show'], function (event) {
var record = event.record;
var newRow = new Array();
var body = new Object();
var limit = 10;
function createBody(date) {
for(var i = 0; i <= limit ; i++) {
date = moment(date).add(7, 'day').format("YYYY-MM-DD");
body = {
value: {
date: {
type: 'DATE',
value: date
}
}
};
newRow.push(body);
}
}
createBody(moment().format("YYYY-MM-DD"));
Object.keys(newRow).forEach(function(k) {
record['table']['value'].push(newRow[k]);
})
return event;
});
})();
文系男さん
早速コメントいただきありがとうございます!
思っていた通りの動きをしてくれたので、大変助かりました。
1つ質問なのですが、一番上の行だけ空欄になるのは仕様でしょうか?
リマインダーの動作には影響しない気がするのですが・・・
N_okazaki さん
おはようございます。
kintone では、レコードを登録する際、デフォルトで 1行目が挿入され、
挿入される 1行目の日付には、フィールドの設定の初期値が指定されるようですね。
私が書いた処理では、デフォルトの 1行目の後ろに行を追加していく動作になります。
1行目も不要なら、以下の処理でご希望の動作が可能か、
お確かめいただけますでしょうか。
(function () {
"use strict";
moment.locale("ja");
kintone.events.on(['app.record.create.show'], function (event) {
var record = event.record;
var newRow = new Array();
var body = new Object();
var limit = 10;
function createBody(date) {
for(var i = 0; i <= limit ; i++) {
date = moment(date).add(7, 'day').format("YYYY-MM-DD");
body = {
value: {
date: {
type: 'DATE',
value: date
}
}
};
newRow.push(body);
}
}
record['table']['value'].shift();
createBody(moment().format("YYYY-MM-DD"));
Object.keys(newRow).forEach(function(k) {
record['table']['value'].push(newRow[k]);
})
return event;
});
})();
以下の処理で、デフォルトの 1行目を削除できます。
※ “table” はアプリに設定されているテーブルのフィールドコードになります。
record['table']['value'].shift();
参考になれば、嬉しいです!^^
文系男さん
早速ご返信いただきありがとうございます。
デフォルトの値が空欄だったから、テーブルも空欄行があったのですね。
いただいたコードでうまく動作しました。
とても助かりました。ありがとうございます!