前置き
Pleasanterにはテーブル間の親子関係をしていする、リンクという機能があります。
通常は、2つ以上のテーブルにおいての連携を指定するのですが、自テーブルにもリンクが設定できます。一見使いどころが無さそうですが、ちょっとマニアックな利用例です。
作るもの
見積もりの工数を管理するテーブルを作ってみます。イメージは以下。
ベースとなるアプリの構成としては、明細を束ねる親/見積もりテーブルと、タスクごとの見積明細を管理する子/見積明細テーブルです。
なお、見積もりテーブルと見積明細テーブルのリンクは通常のリンク設定をしています。
見積明細の仕様
明細を切り出します。(Excel)
合計については、子/見積明細テーブルから親/見積もりテーブルへのサマリ機能で簡単に実現は可能です。
明細の、「5.テスト実施の項目」について以下のような要件であったとします。
開発作業合算 × 0.3
示した明細例だと、開発作業は1.テーブル基本設定~4.一覧表示設定までの合算 × 0.3 つまり、
(16h + 23h + 24h + 8h) × 0.3 = 24h
となります。
これを、Pleasanterで実現します。
Pleasanterの設定
見積明細テーブルの詳細画面です。
「対象明細」に自分自身のサイトに対するリンクを設定しています。自レコードまで含めた自テーブルの内容が選択肢一覧に表示されます。
リンクの設定は以下のとおり(テーブルの管理>エディタ>項目「対象明細」の選択肢一覧の設定内容)
[
{
"SiteId": 314967,
"View": {
"Id": 0,
"ColumnFilterExpressions": {
"ClassA": "[@ClassA]"
},
"ColumnFilterSearchTypes": {
"ClassA": "ExactMatch"
},
"ApiColumnKeyDisplayType": 0,
"ApiColumnValueDisplayType": 0,
"ApiDataType": 0
}
}
]
特に難しいことは無く、リンクするサイトIDに自分自身のサイトIDを指定しています。また、親/見積もりテーブルに紐づく明細のみを表示させるため、選択肢一覧を他の項目で絞り込む機能で、絞り込みをします。ClassAに親サイトのリンクを設定しているため、この記述で”親サイトが自分のレコードを同じも出絞り込む”ことができます。
こうすることで、親/見積もりテーブルに紐づく明細が選択肢一覧から選択できるようになります。
選択した情報をもって、テスト実施の工数を計算し「作業工数(h)」へ設定します。(サーバスクリプト)
try{
//対象明細(ClassB)に選択がある場合、計算対象
if(model.ClassB){
let idList = JSON.parse(model.ClassB);
let total = 0;
if(idList.length > 0){
//選択肢をループして、各レコードの工数(NumA)を合算
for (let id of idList) {
let result = items.Get(id);
if(result.Length > 0){
total += result[0].NumA;
}
}
model.NumG = total;
//合算値に工数割合(NumF)をかけて作業工数を算出
model.NumA = total * model.NumF;
}
}
}catch{
context.Log(e.stack);
}
おわり
あまり、利用シーンは多くないかもしれませんが、こういった使い方もできる、という一例として投稿してみました。