4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pleasanterサイトのゴミ箱を作る

Posted at

前置き

Pleasanterでサイト構築の中で、とりあえずサイト作ってスクリプト組んでトライエラーを繰り返し、みたいなことやってると、動作確認検証用のサイトが無尽蔵に増えていきますせんか?(中の人はそうです)

こんな感じ↓↓
image.png

で、不要なサイト(複数)をまとめてきれいに消したいときは、

  1. 適当なフォルダを作成
  2. 作ったフォルダに不要なサイトを移動
  3. フォルダごとサイト削除

ってやると思います。フォルダ配下はまとめて削除できるので楽っちゃ楽なんですが、それでも繰り返しやっていると面倒に感じてきます。

そこで

サイトのごみ箱フォルダを作って、ごみ箱に格納したサイトをボタンクリックで削除するスクリプトを組んでみました。

作ったサイトはこんな感じ
image.png
「ごみ箱を空にする」ボタンで、フォルダ内のサイトをすべて削除します。

テーブル設定

なかなかマニアックな設定方法(?)、フォルダにスクリプトを設定します。
image.png

実装したスクリプト

ボタン追加

ごみ箱を空にするボタンを追加

$(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開発者にとってはちょっと便利になると思います。

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?