日報アプリを作成しています。日報アプリで直接入力とスケジュールアプリからその日のスケジュールを連動させたい。
JavaScriptを書いて修正を重ねていますが、エラーが解消されません。
直接入力をした後追加ボタンを押すと、日報のテーブルに必要項目が入るようにしているのに、開始日時と終了日時を入れていても”「開始時間」「終了時間」が入っていない”とか、追加したとメッセージが出てもそのメッセージを閉じるとエラーが出ます。また、日報連動を行うと連動したとメッセージが出ますが閉じると同じエラーが表示されます。
(エラー)
カスタマイズ用のJavaScriptの実行時にエラーが発生しました。アプリの管理者にお問い合わせください。
-
- event.record[‘日報’].value[1][‘開始’].type が不正です。
-
- event.record[‘日報’].value[1][‘終了’].type が不正です。
-
- event.record[‘日報’].value[1][‘内容’].type が不正です。
-
- event.record[‘日報’].value[1][‘備考’].type が不正です。
-
- event.record[‘日報’].value[1][‘所要時間’].type が不正です。
-
- event.record[‘日報’].value[1][‘計算’].type が不正です。
どなたかご教授お願い致します。
実行したコードをコピー&ペーストしましょう
(function () {
"use strict";
const tableFieldCode = "日報";
const inputFields = {
date: "日付",
start: "開始時間",
end: "終了時間",
content: "内容テーブル転記用",
customer: "顧客名",
partner: "面談者名",
training: "研修名"
};
function getFieldValue(record, code) {
if (!record[code] || record[code].value === null || record[code].value === undefined) {
return "";
}
return String(record[code].value);
}
function addRowToTable() {
const record = kintone.app.record.get().record;
const startVal = getFieldValue(record, inputFields.start);
const endVal = getFieldValue(record, inputFields.end);
const contentVal = getFieldValue(record, inputFields.content);
if (!startVal || !endVal) {
alert("開始時間・終了時間を入力してください。");
return;
}
if (!contentVal) {
alert("内容を入力してください。");
return;
}
const newRow = {
value: {
開始: { value: startVal },
終了: { value: endVal },
内容: { value: contentVal },
備考: { value: "" },
所要時間: { value: null },
計算: { value: null }
}
};
record[tableFieldCode].value = record[tableFieldCode].value || [];
record[tableFieldCode].value.push(newRow);
kintone.app.record.set({ record });
alert("日報テーブルに追加しました。");
}
async function linkSchedule() {
const record = kintone.app.record.get().record;
const dateVal = getFieldValue(record, inputFields.date);
if (!dateVal) {
alert("日付が未入力です");
return;
}
const appId = 126;
const startDateTime = `${dateVal}T00:00`;
const endDateTime = `${dateVal}T23:59`;
const query = `開始日時 >= "${startDateTime}" and 開始日時 <= "${endDateTime}" order by 開始日時 asc`;
try {
const resp = await kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: appId,
query: query,
fields: ["開始日時", "終了日時", "日報表示"]
});
if (!resp.records || resp.records.length === 0) {
alert("当日のスケジュールが見つかりませんでした。");
return;
}
const newRows = resp.records.map(sch => {
const startTime = sch["開始日時"].value.split("T")[1]?.slice(0, 5) || "";
const endTime = sch["終了日時"].value.split("T")[1]?.slice(0, 5) || "";
const contentVal = getFieldValue(sch, "日報表示");
return {
value: {
開始: { value: startTime },
終了: { value: endTime },
内容: { value: contentVal },
備考: { value: "" },
所要時間: { value: null },
計算: { value: null }
}
};
});
record[tableFieldCode].value = (record[tableFieldCode].value || []).concat(newRows);
kintone.app.record.set({ record });
alert("スケジュール連動が完了しました。");
} catch (err) {
console.error(err);
alert("スケジュール取得エラー: 入力内容が正しくありません。");
}
}
kintone.events.on('app.record.create.submit', function (event) {
const record = event.record;
let totalMinutes = 0;
record[tableFieldCode].value.forEach(row => {
const start = row.value.開始.value;
const end = row.value.終了.value;
if (start && end) {
const [sH, sM] = start.split(":").map(Number);
const [eH, eM] = end.split(":").map(Number);
totalMinutes += (eH * 60 + eM) - (sH * 60 + sM);
}
});
if (totalMinutes < 450) {
alert("合計時間が就業時間の7時間30分に満たないため確認してください。\n問題なければそのまま申請にすすんで下さい。");
}
return event;
});
kintone.events.on(['app.record.create.show', 'app.record.edit.show'], function () {
const spaceElem = kintone.app.record.getSpaceElement('addScheduleSpace');
if (!spaceElem) return;
const addBtn = document.createElement('button');
addBtn.textContent = "追加";
addBtn.style.backgroundColor = "#4CAF50";
addBtn.style.color = "#fff";
addBtn.style.borderRadius = "8px";
addBtn.style.padding = "6px 12px";
addBtn.style.marginRight = "10px";
addBtn.onclick = addRowToTable;
const linkBtn = document.createElement('button');
linkBtn.textContent = "スケジュール連動";
linkBtn.style.backgroundColor = "#2196F3";
linkBtn.style.color = "#fff";
linkBtn.style.borderRadius = "8px";
linkBtn.style.padding = "6px 12px";
linkBtn.onclick = linkSchedule;
spaceElem.appendChild(addBtn);
spaceElem.appendChild(linkBtn);
});
})();