kintone 제로 메우기 플러그인 제작기(후편)

전 9회에 걸쳐 쓴, 플러그인 작가가 되기 위해 기사 「플러그인 개발 메모 그 1~그 9」까지의 정리 기사 후편입니다.
*전편은 이쪽으로부터

실제 데이터를 사용한 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 플러그인을 만든 소감.
  • 설정 화면의 코드를 작성하는 것이 어렵습니다
  • 설정값의 데이터 구조를 먼저 정해 두는 것이 중요

  • 특히, 설정값의 데이터 구조는 최초로 결정해 두지 않으면 나중에 변경하는 것은 어렵다고 느꼈습니다.

    이번에 먼저 테스트로 만든 플러그인에 서브 테이블 대응의 기능을 추가했을 때, 설정치의 데이터 구조를 변경해 그 변경의 디버그에 2일 걸렸습니다.
    서브 테이블은 지금 익숙하지 않네요.

    이번에 작성한 코드는 GitHub에 실려 있습니다. 코멘트도 디버그 코드도 그대로, 코드의 리팩토링도 할 수 없습니다만, 일단 움직이는 코드가 되고 있습니다.
  • htps : // 기주 b. 코 m / sy250 / 제로 푸 l

  • 향후 전망



    지금까지 사용자 정의 코드를 플러그인으로 잘라내고 싶습니다.

    참고 링크



    이번 플러그인 작성에 관해서는, 공개되고 있는 플러그인의 샘플 코드를 참고로 하고 있습니다.
    또, 플러그인의 개발 환경이나 툴에 대해서도 여러가지 참고로 했습니다. 감사합니다.
    그리고 작년의 kintone Café Japan에서 앞으로 어떻게 갈까 고민하고 있던 내 이야기를 들어주고 플러그인을 만들어 보니 조언을 받은 아쿠아 비트 나가이 씨에게 감사드립니다.
    그 말이 없었다면 플러그인을 만들어 보는 시도도 없었을까 생각합니다. 조금 과장될지도 모르지만.

    참고 링크를 아래로 올립니다.
  • 샘플 플러그인
  • 플러그인 개발

  • 나중에 추가합니다.
  • kintone 제로 메우기 플러그인 제작기(전편)
  • 좋은 웹페이지 즐겨찾기