9
3

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.

プリザンターの編集画面で前回との差分を表示する

Last updated at Posted at 2023-08-30

プリザンターのAPIを利用して変更履歴と現在の内容の差分を表示する

【追記】
こちらでは更新verを選択指定しての差分表示ができるようにしました!

差分表示について、こちらの記事を参考にさせて頂きました。
https://qiita.com/implem-noro/items/15c87be43f6b232c7303

変更履歴がAPIにて取得できる!

テーブルの種類を指定する事で取得できます。
TableType: 'History'
https://pleasanter.org/manual/script-api-get

必要なライブラリ

この2つをそれぞれgithubからダウンロードして、以下のコマンドでインストールします。
すると必要な.jsファイルが出力されます。
Node.jsが必要になります。

ファイルを保存、拡張htmlへの設定

...Implem.Pleasanter\wwwroot\scripts
ここに「diff」といフォルダを作って、必要なファイルを保存する。

  • diff2html.min.css
  • diff2html.min.js
  • diff2html-ui.min.js
  • diff.min.js

...Implem.Pleasanter\App_Data\Parameters\ExtendedHtmls
へこの内容でファイルを追加する。

HtmlBodyBottom.html
<script type="text/javascript" src="/scripts/diff/diff.min.js"></script>
<link rel="stylesheet" type="text/css" href="/scripts/diff/diff2html.min.css" />
<script type="text/javascript" src="/scripts/diff/diff2html.min.js"></script>
<script type="text/javascript" src="/scripts/diff/diff2html-ui.min.js"></script>

これを保存したら反映させるために、IISを再起動して準備OK!

追加したスクリプト

以下の内容をスクリプトに追加して「編集」のみにチェック。
編集画面を開いた時に処理されます。

$p.events.on_editor_load = function(){
    let beforeBody = '';
    let nowBody = '';
    $p.apiGet({
        id: $p.id(),
        data: {
            // 条件絞りたい場合は追記する
            // View: {
            //     ColumnFilterHash:{
            //         Ver: 1
            //     }
            // },
            // 現在と変更履歴のテーブルを取得するためにこの指定
            TableType: 'NormalAndHistory'
        },
        done: function(ret){
            // レコードが一つより多ければそれぞれ取得
            if (ret.Response.Data.length > 1){
                nowBody = ret.Response.Data[0];
                beforeBody = ret.Response.Data[1];
                diff2html();
            }
            else
            {
                return false;
            }
        },
        fail: function(data){
            console.log('API取得失敗');
        }
    });
    // APIで取得した内容からその差分を表示する
    function diff2html() {
        $('#diff2html').remove();
        $("#Editor").after('<div id="diff2html" style="display:inline-block;"></div>');
        $('#diff2html').css("width","calc(100% - 250px)");
        html = '<div id="app">';
        $('#diff2html').append(html);
        unifiedDiff = Diff.createPatch('内容', beforeBody.Body, nowBody.Body, 'ver' + beforeBody.Ver, 'ver' + nowBody.Ver);
        var targetElement = document.getElementById('app');
        // オプション設定内容はdiff2htmlのgithub参照
        var configuration = {
            drawFileList: false,
            fileListToggle: false,
            fileListStartVisible: false,
            fileContentToggle: false,
            matching: 'lines',
            outputFormat: 'side-by-side',
            synchronisedScroll: true,
            highlight: true,
            renderNothingWhenEmpty: false,
        };
        var diff2htmlUi = new Diff2HtmlUI(targetElement, unifiedDiff, configuration);
        diff2htmlUi.draw();
        diff2htmlUi.highlightCode();
    };
}
  • 取得する項目
    unifiedDiff = Diff.createPatch('内容', beforeBody.Body, nowBody.Body, 'ver' + beforeBody.Ver, 'ver' + nowBody.Ver);
    この部分を「.Body」にしているので「内容」の差分となる。
    ここを変えれば他の項目でも可能。

  • 表示結果
    image.png

かんしゃ

ついったで、APIで変更履歴取得できないのかな。ってつぶやいてたら公式の方が反応してくださり、今回の所のマニュアル更新して頂きました!
HAYATOくんさんありがとうございます!!!

9
3
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
9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?