初めまして!
入社2年目のヒラ社員と申します!
有益な情報を共有していけたらと思っております、よろしくお願いします!
・・─・・─・・─・・─・・─・・─・・─・・─・・─・・─・・─・・・・─・・─・・─・・─・・─・・─・
今回は私が実務の中で苦戦した
kintoneのコメント機能をJSで最初から閉じた状態にする方法について
お話しできればと思っています!
コメント機能とは?
そもそもコメント機能とはなにか...と思われる方のために説明します。
コメント機能とは、各レコードのデータでコミュニケーションを取ることができる機能
のことです。
メンション機能等もついており、通知を飛ばすこともできます!
通常はレコード詳細画面が開かれた際にコメントウィンドウが開いた状態で
表示されるような仕様になっています。
↓以下の部分がコメント機能に該当します。
・・─・・─・・─・・─・・─・・─・・─・・─・・─・・─・・─・・・・─・・─・・─・・─・・─・・─・・
コメントウィンドウのせいで見づらい…?
コメント機能は大変便利な機能ですが、コメントウィンドウが開いている状態だと、
上記の画像のように全体のフィールドが見えない場合があります。
↓以下は先ほどのコメントウィンドウを閉じた際の画像です。
・・─・・─・・─・・─・・─・・─・・─・・─・・─・・─・・─・・・・─・・─・・─・・─・・─・・─・・
URLに注目!
実は、レコード詳細画面表示時、レコード詳細画面コメントウィンドウ閉鎖時、
レコード詳細画面コメントウィンドウ再表示時ですべてURLが異なっているんです!
↓レコード詳細画面表示時
↓レコード詳細画面コメントウィンドウ閉鎖時
↓レコード詳細画面コメントウィンドウ再表示時
・・─・・─・・─・・─・・─・・─・・─・・─・・─・・─・・─・・・・─・・─・・─・・─・・─・・─・・
実装方法
↓ひとまずJSの全体をお見せし、以下1行ずつ解説していきます!
(function($) {
'use strict';
kintone.events.on('app.record.detail.show', function(event) {
var hashParam = location.hash.substr(1).split('&');
var paramList = {};
hashParam.forEach( (value, index) => {
var paramSplit = value.split('=');
paramList[paramSplit[0]] = paramSplit[1];
});
if (paramList.tab == 'comments') {
paramList.tab = 'none';
location.hash = $.param(paramList);
} else {
paramList.tab = 'none';
location.hash = $.param(paramList);
}
});
})(jQuery);
まずはこちら!
kintone.events.on('app.record.detail.show', function(event) {
var hashParam = location.hash.substr(1).split('&');
var paramList = {};
コメント機能はレコード詳細画面で使用するため、
レコード詳細画面表示時を表すイベントである
app.record.detail.showが入ります。
var hashParam = location.hash.substr(1).split(‘&’);で
URLのハッシュ部分を取得し、先頭の#を除いて&で分割します。
するとhashParamは以下の要素を含む配列になります。
[‘record=1’, ‘l.view=20’, ‘l.q’, ‘l.next=0’, ‘l.prev=0’]
var paramList = {};でhashParamを格納する配列を初期化します。
続いてこちら!
hashParam.forEach( (value, index) => {
var paramSplit = value.split('=');
paramList[paramSplit[0]] = paramSplit[1];
});
hashParam.forEach( (value, index)で
各ハッシュパラメータを処理するループ処理を書きます。
var paramSplit = value.split(‘=’);で
hashParamをキーと値に分割します。
paramList[paramSplit[0]] = paramSplit[1];で
分割したキーと値をparamListオブジェクトに格納します。
続いてこちら!
if (paramList.tab == 'comments') { // ハッシュパラメータの'tab'が'comments'の場合
paramList.tab = 'none'; // 'tab'パラメータを'none'に変更する
location.hash = $.param(paramList); //
}
if (paramList.tab == ‘comments’)で
ハッシュパラメータの‘tab’が‘comments’の場合の処理を書きます。
paramList.tab = ‘none’; で
tabパラメータをnoneに変更する処理を加えます。
location.hash = $.param(paramList);で
paramListを文字列に変換し、URLのハッシュを更新します。
これでコメントウィンドウ閉鎖状態の画面になります。
最後にこちら!
else {
paramList.tab = 'none';
location.hash = $.param(paramList);
}
});
})(jQuery);
else { で ‘tab’が‘comments’以外の場合の処理を書きます。
paramList.tab = ‘none’; で
tabパラメータをnoneに変更する処理を加えます。
location.hash = $.param(paramList); で
paramListを文字列に変換し、URLのハッシュを更新します。
これでコメントウィンドウ閉鎖状態の画面になります。
・・─・・─・・─・・─・・─・・─・・─・・─・・─・・─・・─・・・・─・・─・・─・・─・・─・・─・・
確認しよう!
JSを該当のアプリに読み込ませ、レコード詳細画面を開いてみると…
レコード詳細画面表示時のURLがtab=noneとなっており、
コメントウィンドウが閉じた状態になっています!
フィールドを一目で見ることができ、
コメントウィンドウをいちいち閉じる必要が無くなりました!