kintone 제로 메우기 플러그인 제작기(후편)
*전편은 이쪽으로부터
실제 데이터를 사용한 JavaScript 사용자 정의
실제로 설정 화면에서 저장한 값을 읽어서 이용합니다.
customize.js(function(pluginId) {
"use strict";
// プラグインの設定情報を取得
let plugInConf = kintone.plugin.app.getConfig(pluginId)
if (!plugInConf) { return false; }
let config = {
'ZeroFillItem': JSON.parse(plugInConf.ZeroFillItem)
};
// 詳細画面 編集
kintone.events.on(['app.record.edit.show', 'app.record.create.show'], function(event) {
let myIndexButton = document.createElement('button');
myIndexButton.id = 'my_index_button';
myIndexButton.innerHTML = 'ゼロ埋めボタン';
myIndexButton.onclick = function() {
let record = kintone.app.record.get();
console.log(record);
config.ZeroFillItem.forEach(function(value){
// プラグインの設定値がオブジェクトの時
if ( Object.prototype.toString.call( value ) === "[object Object]" ) {
// SUBTABLEの場合
let objVal = Object.values(value);
let objKey = Object.keys(value)[0];
for (let values of record.record[objKey].value) {
for (let v of objVal[0]) {
if (!values.value[v].value) {
console.log("record.value is NULL or undefined");
values.value[v].value = 0;
} else {
console.log(values.value[v].value);
}
}
}
} else {
// SUBTABLE以外
if (!record.record[value].value) {
record.record[value].value = 0;
} else {
console.log(record.record[value].value);
}
}
});
kintone.app.record.set(record);
}
kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);
return event;
});
})(kintone.$PLUGIN_ID);
플러그인 동작 화면
새 레코드 작성.
제로 채우기 버튼을 누른 후. 설정 화면에서 체크한 필드를 0으로 채웁니다.
레코드 저장. 계산 결과의 #N/A! 에러 표시가 회피됩니다.
요약
이번에 처음으로 kintone 플러그인을 만든 소감.
(function(pluginId) {
"use strict";
// プラグインの設定情報を取得
let plugInConf = kintone.plugin.app.getConfig(pluginId)
if (!plugInConf) { return false; }
let config = {
'ZeroFillItem': JSON.parse(plugInConf.ZeroFillItem)
};
// 詳細画面 編集
kintone.events.on(['app.record.edit.show', 'app.record.create.show'], function(event) {
let myIndexButton = document.createElement('button');
myIndexButton.id = 'my_index_button';
myIndexButton.innerHTML = 'ゼロ埋めボタン';
myIndexButton.onclick = function() {
let record = kintone.app.record.get();
console.log(record);
config.ZeroFillItem.forEach(function(value){
// プラグインの設定値がオブジェクトの時
if ( Object.prototype.toString.call( value ) === "[object Object]" ) {
// SUBTABLEの場合
let objVal = Object.values(value);
let objKey = Object.keys(value)[0];
for (let values of record.record[objKey].value) {
for (let v of objVal[0]) {
if (!values.value[v].value) {
console.log("record.value is NULL or undefined");
values.value[v].value = 0;
} else {
console.log(values.value[v].value);
}
}
}
} else {
// SUBTABLE以外
if (!record.record[value].value) {
record.record[value].value = 0;
} else {
console.log(record.record[value].value);
}
}
});
kintone.app.record.set(record);
}
kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);
return event;
});
})(kintone.$PLUGIN_ID);
새 레코드 작성.
제로 채우기 버튼을 누른 후. 설정 화면에서 체크한 필드를 0으로 채웁니다.
레코드 저장. 계산 결과의 #N/A! 에러 표시가 회피됩니다.
요약
이번에 처음으로 kintone 플러그인을 만든 소감.
특히, 설정값의 데이터 구조는 최초로 결정해 두지 않으면 나중에 변경하는 것은 어렵다고 느꼈습니다.
이번에 먼저 테스트로 만든 플러그인에 서브 테이블 대응의 기능을 추가했을 때, 설정치의 데이터 구조를 변경해 그 변경의 디버그에 2일 걸렸습니다.
서브 테이블은 지금 익숙하지 않네요.
이번에 작성한 코드는 GitHub에 실려 있습니다. 코멘트도 디버그 코드도 그대로, 코드의 리팩토링도 할 수 없습니다만, 일단 움직이는 코드가 되고 있습니다.
향후 전망
지금까지 사용자 정의 코드를 플러그인으로 잘라내고 싶습니다.
참고 링크
이번 플러그인 작성에 관해서는, 공개되고 있는 플러그인의 샘플 코드를 참고로 하고 있습니다.
또, 플러그인의 개발 환경이나 툴에 대해서도 여러가지 참고로 했습니다. 감사합니다.
그리고 작년의 kintone Café Japan에서 앞으로 어떻게 갈까 고민하고 있던 내 이야기를 들어주고 플러그인을 만들어 보니 조언을 받은 아쿠아 비트 나가이 씨에게 감사드립니다.
그 말이 없었다면 플러그인을 만들어 보는 시도도 없었을까 생각합니다. 조금 과장될지도 모르지만.
참고 링크를 아래로 올립니다.
이번 플러그인 작성에 관해서는, 공개되고 있는 플러그인의 샘플 코드를 참고로 하고 있습니다.
또, 플러그인의 개발 환경이나 툴에 대해서도 여러가지 참고로 했습니다. 감사합니다.
그리고 작년의 kintone Café Japan에서 앞으로 어떻게 갈까 고민하고 있던 내 이야기를 들어주고 플러그인을 만들어 보니 조언을 받은 아쿠아 비트 나가이 씨에게 감사드립니다.
그 말이 없었다면 플러그인을 만들어 보는 시도도 없었을까 생각합니다. 조금 과장될지도 모르지만.
참고 링크를 아래로 올립니다.
나중에 추가합니다.
Reference
이 문제에 관하여(kintone 제로 메우기 플러그인 제작기(후편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sy250f/items/060b51edef4ad931da2f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)