一覧のコピーについて

設定画面にて一覧作成時に同じ並びの一覧を都度項目を設定して作成していくのが大変だったので、一覧画面にて一覧をコピーするjavascriptを作成しました。

一覧表示時にテキストボックスとボタンが表示されるようになり、テキストに名前を入力してボタンを押すと現在表示している一覧がコピーされます。また、絞り込みボタンで絞込条件が設定されている場合、その条件でコピーされます。

……が、よくよく調べたら絞り込みボタンで条件指定して保存ボタン押したら普通に同じことが出来ました。

javascriptを改造すれば一覧の一括登録とか利用できなくはないのではないかと思うので、車輪の再発明行った残骸としてご覧ください。

jQuery.noConflict();
(function ($) {

// レコード一覧画面表示イベント
kintone.events.on("app.record.index.show", function (event){

let textCopyName = document.createElement('input');
textCopyName.setAttribute("id", "textCopyName");
textCopyName.type = 'text';

let buttonCopy = document.createElement("button");
buttonCopy.type = "button";
buttonCopy.textContent = "一覧コピー";
buttonCopy.setAttribute("id", "buttonCopy");
buttonCopy.onclick = function() {

new kintone.Promise(function(resolve, reject) {

params = {
app:kintone.app.getId()
}

if(event.viewName === "(すべて)"){
reject("「(すべて)」はコピーできません。");
}

// 一覧取得
kintone.api("/k/v1/app/views","GET",params).then(function(resp){

let views = resp["views"];

let newViewName = $("#textCopyName").val();

// 名称存在チェック
if(views[newViewName] !== undefined){
reject("すでに存在する名前です。");
}

// 最終行
let viewNames = Object.keys(views)
let lastIndex = Math.max.apply(null, viewNames.map(function(x){
return views[x].index;
}));
// コピー作成
let copyView = jQuery.extend(true, {}, views[event.viewName]);
// 名設定
copyView.name = newViewName;
// インデックス設定
copyView.index = lastIndex + 1;
// クエリ情報を取得
let query = kintone.app.getQueryCondition();
// クエリを設定
copyView.filterCond = query;
// コピーしたビューを一覧に追加
views[newViewName] = copyView;

params = {
app:kintone.app.getId(),
views:views
}

// 一覧更新
return kintone.api("/k/v1/preview/app/views","PUT",params);

}).then(function(resp){
// アプリ更新
return kintone.api("/k/v1/preview/app/deploy","POST",{apps:[{app:kintone.app.getId()}]});
}).then(function(resp){
setTimeout(function(){resolve();}.bind(this),3000);
}).catch(function(error){
// エラー時
reject("エラーが発生しました。" + JSON.stringify(error));
});

}).then(function(resp){
// 終了処理(再描画)
location.reload();
}).catch(function(error){
window.alert(error);
});

};

kintone.app.getHeaderMenuSpaceElement().appendChild(textCopyName);
kintone.app.getHeaderMenuSpaceElement().appendChild(buttonCopy);

});

})(jQuery);

使ってみました。ばっちり動きます(笑)。
一覧deploy系のAPI実サンプルってなかなか見かけないので、すてきだと思います。

kintone Café 浜松 の運営をしています。

ちょうど一覧画面の作成に苦労していたので、利用させていただきました。

フィールド数が200を超えるアプリの一覧画面作成を、こちらを参考に、プログラムからフィールド指定で一覧画面を作ることができました。

ありがとうございます。今後ともよろしくお願いします。

 

※追加したコードは次の1行です。

copyView.fields = [“フィールド1”, “フィールド2”, … “フィールド200”];