LoginSignup
16
25

More than 5 years have passed since last update.

kintone JavaScript cheatSheet

Posted at

JavaScriptを使用したkintoneのカスタマイズを行う際、良く利用する記述をチートシートとして纏めました。
私自身の備忘録も兼ねています。

kintone_cheatSheet.js

/**
 * イベント
 */
(function() {

    "use strict";

    kintone.events.on([
        'app.record.index.show',
        'app.record.index.edit.show',
        'app.record.index.delete.submit',
        'app.record.create.show', 'app.record.edit.show',
        'app.record.create.submit', 'app.record.edit.submit',
        'app.record.create.submit.success', 'app.record.edit.submit.success',
        'app.record.index.edit.submit',
        'app.record.detail.show',
        'app.record.detail.delete.submit',
        'app.record.detail.process.proceed',
        'app.record.index.edit.change.<フィールドコード>',
        'app.record.create.change.<フィールドコード>', 'app.record.edit.change.<フィールドコード>'
    ], function(event) {

        var record = event.record;

        // 増殖バグ回避
        if (document.getElementById ('my_index_button') !== null) {
            return event;
        }

        // レコード詳細画面を取得
        var menu = kintone.app.record.getHeaderMenuSpaceElement();

        // レコード一覧のメニューの下側の空白部分の要素を取得する
        var header = kintone.app.getHeaderSpaceElement();

        // レコード一覧画面を取得
        var headerMenu = kintone.app.getHeaderMenuSpaceElement();

        // スペースを取得
        var space = kintone.app.record.getSpaceElement("スペースID");

        // ボタンの設置
        var myIndexButton = document.createElement('button');
        myIndexButton.id = 'my_index_button';
        myIndexButton.innerHTML = '一覧のボタン';
        myIndexButton.className = "button-simple-cybozu geo-search-btn";
        myIndexButton.onclick = function() {
        // クリック処理
        };
        space.appendChild(myIndexButton);

        // ボタンの設置(jQuery)
        $(space).append($('<button id="btnId" class="btn-class">ボタン</button>'));
        $("#btnId").click(function() {
            // クリック処理
        });


        // アプリIDを取得
        var appId = kintone.app.getId();

        // レコードIDを取得
        var recordId = kintone.app.record.getId();

        // 関連レコード一覧の参照先のアプリIDを取得
        var related = kintone.app.getRelatedRecordsTargetAppId('フィールドコード');

        // ルックアップフィールドの参照先のアプリIDを取得
        var looked = kintone.app.getLookupTargetAppId('フィールドコード');

        // フィールド非表示
        kintone.app.record.setFieldShown("フィールドコード", false);

        // フィールドを編集不可へ
        record.フィールドコード.disabled = true;

        // ルックアップ取得を自動で行う
        record.ルックアップ.lookup = true;

        // フィールド要素を取得
        var elements = kintone.app.getFieldElements('フィールドコード');

        // フィールドにエラー表示
        record.フィールドコード.error = 'このエラーメッセージを表示';

        // レコードにエラーを表示
        event.error = 'エラーです!';

        // グループの開閉(true: 開く, false: 閉じる)
        kintone.app.record.setGroupFieldOpen("グループID", true);

        // チェックボックスの比較
        if(record['フィールドコード'].value.indexOf('チェック') > -1){
           alert("チェックOK");
        }

        // チェックボックスの比較(jQuery)
        if(!($(':input[id*=_52655951]')[0].checked)){
           alert("jQueryで比較する際、IDは部分一致で比較");
        }

        // ステータス変更時にステータスを取得する方法
        var status = event.nextStatus.value;

        // Rest API
        var params = {
            app: kintone.app.getId(),
            id: kintone.app.record.getId(),
            query: 'フィールドコード="abc" order by "フィールドコード" asc limit 1'
        };
        kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params).then(function(resp) {
            // 成功時
            alert(resp.records.レコード番号.value);

            // レコードに値をセット
            var record = kintone.app.record.get();
            record.record.フィールドコード.value = '書き換えた文字列';
            kintone.app.record.set(record);

        }, function(error) {
            // 失敗時
            var errmsg = 'レコード取得時にエラーが発生しました。';
            if (error.message !== undefined) {
                errmsg += '\n' + error.message;
            }
            alert(errmsg);
        });

        // Promiseを利用したモダンなアプリの全レコード取得の書き方
        var fetchRecords = function(appId, opt_query, opt_offset, opt_limit, opt_records) {
            var offset = opt_offset || 0;
            var limit = opt_limit || 500;
            var allRecords = opt_records || [];
            var query = opt_query || '';
            var params = {app: appId, query: query + ' order by レコード番号 asc limit ' + limit + ' offset ' + offset};
            return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params).then(function(resp) {
                allRecords = allRecords.concat(resp.records);
                if (resp.records.length === limit) {
                    return fetchRecords(appId, offset + limit, limit, allRecords);
                }
                return allRecords;
            });
        };
        fetchRecords(<アプリID>).then(function(records) {
            console.log(records);
        });

        return event;
    });

})();


/**
 * レコード詳細画面へボタンを設置
 */
(function() {

    "use strict";

    // レコード詳細画面へボタンを設置
    kintone.events.on('app.record.detail.show', function(event) {

      // 増殖バグ回避
      if (document.getElementById ('send_mail_button') != null) {
          return;
      }

      //ボタン作成
      var sendMailButton = document.createElement('button');
      sendMailButton.id = 'regist_comment_button';
      sendMailButton.style.height = '50px';
      sendMailButton.style.width = '200px';
      sendMailButton.style.margin = '0px 10px';
      sendMailButton.innerHTML = ' メール送信 ';
      sendMailButton.className = 'kintoneplugin-button-normal'; // kintone標準のスタイルを反映するためには、右記CSSファイルを読み込むこと https://github.com/kintone/plugin-sdk/blob/master/stylesheet/51-current-default.css

      //ボタン押下イベント
      sendMailButton.onclick = function() {
         if(confirm("メールを送信します。\nよろしいですか?")){
           send_mail(event);
         }else{
          return;
        }
      }

      //ボタン設置
      kintone.app.record.getHeaderMenuSpaceElement().appendChild(sendMailButton);

    });
})();


16
25
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
16
25