LoginSignup
1
1

More than 1 year has passed since last update.

kintone_アクションボタンを自作してみた件

Last updated at Posted at 2020-02-10

kintoneのアクションボタンを作ってみた

kintoneにはアクションボタンという必要項目だけをコピーして、
新しいレコードを作成する便利機能がありますが、年度や月度をプラス1したいなぁ~
と思ったときに、、、うん。できないね。
じゃあ作るしかないかぁ~(;´Д`)といった流れで作ってみました。

さっそくJS書いていく

※なんとなくsessionStorageを使えばできるだろ。くらいの考えでsessionStorageを使っています。

action.js

const APP_ID = 123; /* アプリの番号 */
let _s_storage = window.sessionStorage;

(function() {
    'use strict';
    kintone.events.on("app.record.detail.show", function(e) {
        /* まずsessionStorageを綺麗にする */
        _s_storage.clear();

        /* ボタン増殖バグ回避 */
        if (document.getElementById("actionBtn") !== null) {
            return event;
        }

        /* ヘッダー要素 */
        const header = kintone.app.record.getHeaderMenuSpaceElement()

        /* ボタン作成 */
        const actionbtn = document.createElement("button"); 
        actionBtn.id = "actionBtn";
        actionBtn.innerHTML = "来年度";
        actionbtn.onclick = function() {
            /* クリックイベント */

            /* +1した年度を格納する */
            const year = Number(e.record["年度"].value) + 1;
            _s_storage.setItem("年度", year);

            /* レコード作成画面を開く */
            window.open("https://{ドメイン}.cybozu.com/k/" + APP_ID + "/edit", "_blank");

            /* リロードしてsessionStorageの中身を削除 */
            location.reload();
        };

        /* ヘッダーにボタン要素を付加 */
        header.appendChild(actionBtn);
    });
})();

/* 別アプリにコピーしたい場合は以下をコピー先のアプリに反映する。 */
let _s_storage = window.sessionStorage;
(function() {
    'use strict';
    kintone.events.on("app.record.create.show", function(e) {
        if (!_s_storage.getItem("年度")) {
            const record = e.record;
            record["年度"].value = _s_storage.getItem("年度");

            /* キャンセルした時の処理 */
            const cancelBtn = document.getElementsByClassName("gaia-ui-actionmenu-cancel");
            cancelBtn[0].addEventListener("click", function() {
                window.close();
            }, false);

            /* 反映したあとはsessionStorageの中身を削除 */
            _s_storage.clear();
        }
        return e;
    });
})();

これでいい感じに動きました。
同じような悩みがある方は、是非ご参考程度に使ってやってくださいm(__)m

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1