前置き
Pleasanterでサイト構築の中で、とりあえずサイト作ってスクリプト組んでトライエラーを繰り返し、みたいなことやってると、動作確認検証用のサイトが無尽蔵に増えていきますせんか?(中の人はそうです)
で、不要なサイト(複数)をまとめてきれいに消したいときは、
- 適当なフォルダを作成
- 作ったフォルダに不要なサイトを移動
- フォルダごとサイト削除
ってやると思います。フォルダ配下はまとめて削除できるので楽っちゃ楽なんですが、それでも繰り返しやっていると面倒に感じてきます。
そこで
サイトのごみ箱フォルダを作って、ごみ箱に格納したサイトをボタンクリックで削除するスクリプトを組んでみました。
作ったサイトはこんな感じ
「ごみ箱を空にする」ボタンで、フォルダ内のサイトをすべて削除します。
テーブル設定
なかなかマニアックな設定方法(?)、フォルダにスクリプトを設定します。
実装したスクリプト
ボタン追加
ごみ箱を空にするボタンを追加
$(document).ready(function() {
$('#MainCommands').append('<input type="button" class="button button-icon ui-button ui-corner-all ui-widget applied" id="submit" value="ごみ箱を空にする" class="btn" onclick="EmptyTrash()">');
});
サイト削除
ボタンクリックでサイトを削除するスクリプト
//ボタンクリックで呼び出される関数
async function EmptyTrash() {
let data = await ExecuteSql();
DeleteSite(data.Response.Data.Table);
}
//ごみ箱フォルダ配下のサイト一覧を取得
async function ExecuteSql(){
//APIから拡張SQLを実行、フォルダ配下に登録されているサイトのサイトIDを取得します --- ポイント①
let id = Number($p.id());
let data = {
"ApiVersion": 1.1,
"Name": "GetSites",
"Params": {
"ParentId": id
}
}
let uri = new URL(window.location.href);
let url = `${uri.origin}/api/extended/sql`;
let response = await fetch(url, {
method: 'POST',
body: JSON.stringify(data),
headers: {
'Content-Type': 'application/json'
},
});
return response.json();
};
//取得できたサイト一覧よりサイトを削除
function DeleteSite(table){
for (let data of table) {
//サイト削除APIでサイトを削除します。 --- ポイント②
$p.apiDeleteSite({
id:data.SiteId
});
};
$p.setMessage('#Message', JSON.stringify({
Css: 'alert-success',
Text: 'ごみ箱を空にしました'
}));
}
実装のポイント
ポイント①
今回の肝となるのが、フォルダ配下に登録されているサイト一覧を取得する方法。APIから拡張SQLを実行するという機能を利用します。javascriptからAPIで拡張SQLを発行、フォルダ配下に登録されているサイトのサイトID一覧を取得します。
GetSites.json.sql
SELECT [SiteId]
FROM [Sites]
WHERE [ParentId] = @ParentId
※ParentIdが親サイトIDが設定されており、javascriptから自身のサイトID(=サイトごみ箱のサイトID)が渡されます。親サイトIDがごみ箱サイトのサイトIDと一致するもの (=サイトごみ箱に配置されているサイト) を取得対象としています。
GetSites.json
{
"Name": "GetSites",
"Api": true
}
→マニュアルを参考に設定
これらをFetchでAPI発行、SQLを実行しています。
ポイント②
取得できたサイト一覧をループさせて、$p.apiDeleteSiteでサイトを削除しています。
おわりに
利用シーンはあまり多くは無いかもしれませんが、Pleasanter開発者にとってはちょっと便利になると思います。