2
0

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にはテーブル間の親子関係をしていする、リンクという機能があります。

通常は、2つ以上のテーブルにおいての連携を指定するのですが、自テーブルにもリンクが設定できます。一見使いどころが無さそうですが、ちょっとマニアックな利用例です。

作るもの

見積もりの工数を管理するテーブルを作ってみます。イメージは以下。

親/見積もりテーブル
image.png

子/見積明細テーブル
image.png

ベースとなるアプリの構成としては、明細を束ねる親/見積もりテーブルと、タスクごとの見積明細を管理する子/見積明細テーブルです。

なお、見積もりテーブルと見積明細テーブルのリンクは通常のリンク設定をしています。

見積明細の仕様

明細を切り出します。(Excel)
image.png
合計については、子/見積明細テーブルから親/見積もりテーブルへのサマリ機能で簡単に実現は可能です。

明細の、「5.テスト実施の項目」について以下のような要件であったとします。

開発作業合算 × 0.3

示した明細例だと、開発作業は1.テーブル基本設定~4.一覧表示設定までの合算 × 0.3 つまり、
(16h + 23h + 24h + 8h) × 0.3 = 24h
となります。

Excelの関数で実現すると以下のとおり
image.png

これを、Pleasanterで実現します。

Pleasanterの設定

見積明細テーブルの詳細画面です。
image.png
「対象明細」に自分自身のサイトに対するリンクを設定しています。自レコードまで含めた自テーブルの内容が選択肢一覧に表示されます。

リンクの設定は以下のとおり(テーブルの管理>エディタ>項目「対象明細」の選択肢一覧の設定内容)

[
  {
    "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);
}

おわり

あまり、利用シーンは多くないかもしれませんが、こういった使い方もできる、という一例として投稿してみました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?