一覧の表示名を印刷時のヘッダーに表示したい

背景・実現したいこと

複数の一覧を持つアプリの一覧印刷をするとき、印刷する一覧の名前をヘッダーに表示したいです。

 

下記のソースコードを用いて

 if(e.viewName !== ‘名簿’) 

のように一覧の名前を条件にヘッダーを変更することはできるようになりましたが、

この場合一覧を追加したらその通度ソースを変更しなければいけません。

 

ソースコードに一覧の名前を直接入力しなくてもヘッダーに表示させ、

かつ一覧を別の一覧に切り替えたときヘッダーの表示名も自動で変更させるようにしたいです。

 

ご教授いただけますよう

よろしくお願いいたします。

 

利用したソースコード

(function() {
   "use strict";
    kintone.events.on("app.record.index.show", function(e) {
        if(e.viewName !== '名簿') return;
        var appId = kintone.app.getId();
        var viewName = e.viewName;
        var query = kintone.app.getQueryCondition();
        var query2 = kintone.app.getQuery();
        var sort = query2.split(/by|limit/);
        //列名取得
        kintone.api(kintone.api.url('/k/v1/app/views', true), 'GET', {app: appId}, function(resp) {
            var fields = resp.views[viewName].fields;
                // 全件取得関数
            function fetch(opt_offset, opt_records) {
                var offset = opt_offset || 0;
                var records = opt_records || [];
                var params = {
                    app: appId,
                    query: query + ' order by' + sort[1] + ' limit 500 offset ' + offset,
                    fields: fields
                };
                return kintone.api('/k/v1/records', 'GET', params).then(function(resp) {
                    records = records.concat(resp.records);
                    if (resp.records.length === 500) {
                        return fetch(offset + 500, records);
                    }
                    return records;
                });
            }
             //関数実行、{列名:値}になるよう組み替える
            fetch().then(function(resp){
                var records = resp;
                var data = [];
                for(var i = 0; i < records.length; i++){
                    var record = {};
                    for(var key in records[i]){
                        if(records[i][key].value === null){
                            records[i][key].value = ''; //nullを文字として表示しないようにする
                        }
                        record[key] = records[i][key].value;
                    }
                    data.push(record);
                }

                var print_button = document.createElement('button');
                print_button.id = 'pb';
                print_button.innerHTML = '印刷';
                print_button.onclick = function(){
                    printJS({
                              printable: data,
                              properties: fields,
                              type: 'json',
                            //見出し
                            header: '名簿',
                            headerStyle: 'font-weight: 100; color: #3498db;text-align: center',
                            gridHeaderStyle: 'font-size: 11px;background-coler:#3498db; border: 1px solid #3498db;',
                            gridStyle: 'font-size: 11px; border: 1px solid #3498db; margin-bottom: -1px; white-space: nowrap;',
                              repeatTableHeader: false  
                              
                    });
                };
                if (document.getElementById('pb') !== null) {
                    var element = document.getElementById("pb");
                    element.parentNode.removeChild(element);
                }
                kintone.app.getHeaderMenuSpaceElement().appendChild(print_button);
                return;
            });
        });
    });
})();

渡辺様

初めまして!pekoと申します。

三ヶ所修正することで対応できると思いますので、よかったら参考にしてください。


①名簿以外の一覧で印刷ボタンが使えなくなってしまうため、以下のコードを削除します。

if(e.viewName !== '名簿') return;

②一覧を選択していないときにエラーが表示されてしまうため、一覧を選択している時のみ印刷ボタンを使えるようにします。
以下の箇所にコードを追加します。

kintone.api(kintone.api.url('/k/v1/app/views', true), 'GET', {app:appId}, function(resp) {
// ↓下記のコードを追加
  if (!resp.views.hasOwnProperty(viewName)) return;

  var fields = resp.views[viewName].fields;

③見出しのheaderが固定値「‘名簿’」になっているため、可変で一覧の名前を設定するように修正します。
以下のようにコードを修正します。

header: '名簿',
↓
header:viewName,

 

hasOwnPrperty関数については以下のリンクをご参照ください*

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty 

pekoさん

ありがとうございます!

無事印刷できるようになりました。

関数についてもリンク先から勉強してみます。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。