スポンサーリンク

【pleasanter】リンクとルックアップ③ルックアップ

プリザンター
スポンサーリンク
※当サイトは広告を含みます

※おことわり
2025年8月時点の情報です。プリザンターのバージョンは 1.4.18.1 です。Google Chrome でやっています。
javascript,html,cssともに初心者です。調べながら、やってみながら、きっとこうすればいいんだ!という感じで書いていますので、間違っている、または効率的な書き方ではない可能性が大いにあります。間違ってるよ!とか、こうしたほうがいいよ!ということがありましたら、コメント等で教えていただけると大変ありがたいです。

1.はじめに

(2025.8.13:2023年1月の記事をリライトしています)

前回までの2回はプリザンターのリンクについてやりました。
【pleasanter】リンクとルックアップ①リンクの基本
【pleasanter】リンクとルックアップ②フィルタ、ソート

今回は!いよいよルックアップをやります!いやー、これはなくてはならないとっても便利な機能です。

プリザンターの「リンク」は、別のレコードや別のテーブルをつなぐ道のようなものです。
そして「ルックアップ」は、その道の先にあるレコードから必要な情報を自動で持ってくる機能です。

ざっくり言うと、リンクが「つながり」、ルックアップが「情報の持ち運び役」。
イメージとしては、Excelの「VLOOKUP関数」とよく似ています。
例えば、案件テーブルに顧客コードを入力すると、顧客テーブルから自動的に顧客名や住所を表示させることができます。

リザンターの「リンク」は、別のレコードや別のテーブルを連結して関係づける機能です。
そして「ルックアップ」は、その連結を利用して、リンク先の情報を自動で取り込む機能です。

ざっくり言うと、リンクが「連結の橋」、ルックアップが「橋を利用して情報を持ってくる役割」。
イメージとしては、Excelの「VLOOKUP関数」とよく似ています。ルックアップ、だけに。
例えば、顧客テーブルを案件テーブルにリンクさせている場合、案件テーブルに顧客コードを入力すると、顧客テーブルから自動的に顧客名や住所を表示する、といったことがルックアップを利用するとできるようになります。

ちょっとプログラムっぽいことを「選択肢」欄に入力することが必要ですが、コピペで行けます!

2.どうやってやるか

選択肢欄で Lookups で指定します。
たとえば、サイト1414の分類Aの値を、子テーブルの分類Bに持ってきたいときは以下のように書きます。
Fromは親サイトの項目、Toは子サイトの項目。
ここでは指定していますが、Typeについては省略可能です。選択肢項目の場合、Type:0 は 値を持ってきます、Type:1 にすると表示名を持ってきます。

[
    {
        "SiteId": 1414,
        "Lookups": [
            {
                "From": "ClassA",
                "To": "ClassB",
                "Type": 1
            }
     }
]

詳しくは、公式マニュアルに書いてあります。
テーブルの管理:エディタ:項目の詳細設定:選択肢一覧:ルックアップ

下表、公式マニュアルから設定値とその説明です。

引用元:https://pleasanter.org/ja/manual/table-management-lookup

選択肢説明
From転記元のテーブルデータベースのカラム名を指定します。
To転記先のテーブルデータベースのカラム名を指定します。
Type値を転記する場合には 0 を指定します。表示名を転記する場合には 1 を指定します。Typeは省略可能です。省略した場合の既定値は 0 です。
OverwriteToで指定した項目に既に値が設定されている場合は上書きせず、値が設定されていない場合のみ転記したい場合は false を指定します。Overwriteは省略可能です。省略した場合の既定値は true です。
OverwriteFormToで指定した項目に値を必ず転記したい場合はtrueを指定します。OverwriteFormは省略可能です。省略した場合の既定値は false です。なお、ユーザによる手動入力した場合であっても上書き転記します。

3.やってみる

(1)使用するサンプルテーブル

前回に引き続き、「商品マスタ」と「販売記録」でやってみます。

■商品マスタ【親】(サイトID:1414)

項目表示名メモ
タイトル商品名これがキーとなります!リンク先のテーブルに表示される項目です。
分類A商品区分100,食品/200,雑貨/300,その他
数値A単価
状況状況100,有効/900,無効
日付A販売開始日
チェックAキャンペーン対象
分類B販売エリア選択肢:関東、関西
内容補足事項

■販売記録【子】

項目表示名メモ
タイトルタイトル
日付A受注日
分類A商品名ここを「商品マスタ」テーブルと連結させます!
数値A個数
分類B商品区分
数値B単価
数値C金額
説明A補足事項
チェックAキャンペーン対象
説明B販売エリア
状況状況100,有効/900,無効

4.ルックアップを設定してみる

(1)やりたいこと

前回から引き続き、子テーブルの商品名と親テーブルの商品名をリンクさせます。
そして、商品に応じた「単価」を親テーブルから持ってきます。
個数を入力すると、個数×単価の計算結果を金額欄に表示するようにします。

(2)ルックアップの設定

子テーブル「販売記録」の「商品名」の選択肢に以下のコードを入力します。

[
    {
        "SiteId": 1414,
        "Lookups": [
            {
                "From": "NumA",
                "To": "NumB"
            }
        ]
    }
]

SiteIDには親テーブルのIDを指定します。
持ってきたい項目を Lookups に指定します。
From に親テーブル(「商品マスタ」テーブル)の持ってきたい項目名、
To に子テーブル(「販売記録」テーブル)の表示したい項目名を指定します。

(3)自動ポストバック

「商品名」を選択後、すぐに「単価」が表示されるようにしたいので、子テーブル「商品名」(分類A)の「自動ポストバック」にチェックを入れます。

「自動ポストバック」とは、編集画面で項目を変更した直後にサーバへ送信して、その結果をすぐに反映する仕組みです。「送信」+「結果反映」の一連の処理をポストバックと言い、「自動ポストバック」をオンにすることにより、「更新」ボタンを押さずとも、当該項目の変更により自動でポストバック処理が行われるようになります。
自動ポストバックについては、以下の記事内でグダグダ書いています。
【pleasanter】計算式拡張で日付の計算をやってみた

編集画面の項目数が多い場合は、「自動ポストバック時に返却する項目」を指定しておくと、パフォーマンスが向上します。

自動ポストバックはルックアップや計算式で使用することが多くあります。

(4)エディタの設定イメージ

子テーブル「販売記録」のリンク項目「商品名」の設定のイメージです。

(5)計算式の設定

「販売記録」テーブルの項目「金額」(NumC)に「個数」(NumA)×「単価」(NumB)の計算式を設定します。

「計算式」タブで新規作成し、下図のように計算式を入力します。
[対象] には計算結果を表示したい「金額」を指定します。
[計算方法] は「規定」。
[計算式] に個数×単価の計算式を入力します。
個数 * 単価 でも、 NumA * NumB と指定してもOKです。
計算方法が「規定」の場合、項目名、計算記号の間には半角スペースを空けることが必須です。

計算結果もすぐに反映したいので、「個数」にも「自動ポストバック」を設定します。自動ポストバックを返却する項目も指定してみました。

(6)動作イメージ

さて、実際に販売記録テーブルにレコードを追加してみましょう。

「商品名」から商品を選択します。
すると、その商品の「単価」が表示されます。
「個数」を入力します。
すると、「金額」欄に 個数 × 単価 の計算結果が表示されます。

なお、「自動ポストバック」をオンにしない場合は「更新」ボタンでルックアップ結果や計算結果が表示されます。

5.ルックアップを各種項目で設定してみる

(1)複数項目をルックアップ設定する

ほかの項目にもルックアップで親テーブルから情報を持ってくるように設定します。
「販売記録」テーブルの「商品名」の選択肢を以下のコードに変更します。
Lookup の [] 内に、カンマでつなげて複数の項目を指定することができます。
[]と{}の何が違うんじゃ、というと []は配列なので、複数の値をカンマ区切りで指定することができます。{}内ではJSON形式で “項目”:”値” のように値を指定します。

[
    {
        "SiteId": 1414,
        "Lookups": [
            {
                "From": "NumA",
                "To": "NumB"
            },
            {
                "From": "ClassA",
                "To": "ClassB",
                "Type": 1
            },
            {
                "From": "ClassB",
                "To": "DescriptionB"
            },
            {
                "From": "Status",
                "To": "Status"
            },
            {
                "From": "CheckA",
                "To": "CheckA"
            },
            {
                "From": "Body",
                "To": "DescriptionA"
            }
        ]
    }
]

せっかくなので、[自動ポストバック時に返却する項目]も設定してみました。

(2)動作イメージ

子テーブルで新規作成して、商品名を選択します。
すると、選択した商品の情報が反映され複数の項目が更新されます。自動ポストバックをオンにしているので、すぐに反映されます。
チェック項目もちゃんと入るし、説明項目の改行なんかもちゃんとそのままだし、マークダウンで書いた表もちゃんと持ってくるし、画像も持ってきてくれるんですね!すごい!

(3)分類項目における Type について

「分類項目」と「状況」におけるTypeについて、ちょっと見てみます。

● 「商品区分」について

「商品区分」は 選択肢を 値と表示名 で設定しています。

子テーブル「販売記録」で 値の100等を持ってくるのではなく、「食品」などの表示名を持ってきたい。そんな時は Lookup で指定する際に Type を 1 と指定します。

{
     "From": "ClassA",
     "To": "ClassB",
     "Type": 1
}

Type を 0 、または省略で値の100を持ってきます。分類項目、状況以外では関係ないので省略ですね。

● 「販売エリア」について

販売エリアについては、Typeを省略しています。そもそも親テーブルでの選択肢の指定が、値,表示名としていないので、そのまんま文字列が表示されます。
なお、文字列が表示されるだけなので、説明項目に持ってきてみたりしています。

● 「状況」について

「状況」については、Typeの指定を省略し、値を持ってくるようにしています。
子テーブル「販売記録」の「状況」の選択肢にも同様に値,表示名の指定をしているためです。

(4)Overwrite について(上書きの制御)

オプション、Overwrite, OverwriteForm については、上記の例では設定していませんでした。

Overwrite, OverwriteForm この二つの違いはなに?となりますね。。。

どちらも上書きする?しない?の制御ですが、
上書きしたくない場合は ”Overwrite”: false とし、
何かしらの入力があっても強制的に上書きしたい場合は ”OverwriteForm”: true とする、
と覚えておくといい感じっぽいです。

公式マニュアルや、CCS様のサイトで分かりやすく説明されています。
【プリザンター】 第157回)ルックアップで転記先を上書きする方法

(5)ソートやフィルターなども一緒に設定してみた例

前回までにやった、フィルターやソート等もルックアップと一緒に設定できます!

[
    {
        "SiteId": 1414,
        "NoAddbutton": true,
        "View": {
            "ColumnFilterHash": {
                "Status": "[\"100\"]"
            },
            "ColumnSorterHash":{
                "ClassA":"asc",
                "NumA":"desc"
            }
        },
        "Lookups": [
            {
                "From": "NumA",
                "To": "NumB"
            },
            {
                "From": "ClassA",
                "To": "ClassB",
                "Type": 1
            },
            {
                "From": "ClassB",
                "To": "DescriptionB"
            },
            {
                "From": "CheckA",
                "To": "CheckA"
            },
            {
                "From": "Body",
                "To": "DescriptionA",
                "Overwrite": false
            }
        ]
    }
]

6.最後に

選択肢、奥が深い。まだまだ、書き足りないので、続編を予定しています。

7.参考文献、記事

公式マニュアル
テーブルの管理:エディタ:項目の詳細設定:選択肢一覧:ルックアップ
テーブルの管理:エディタ:項目の詳細設定:選択肢一覧:リンク
テーブルの管理:リンク
応用編:リンク
選択肢一覧で設定可能なJSONパラメータ

参考にさせていただいた記事
【プリザンター】 第157回)ルックアップで転記先を上書きする方法

内部リンク:リンクとルックアップシリーズ
【pleasanter】リンクとルックアップ①リンクの基本
【pleasanter】リンクとルックアップ②フィルタ、ソート
【pleasanter】リンクとルックアップ③ルックアップ

内部リンク
【pleasanter】テーブル間のリンクとプルダウンリスト~項目間の連携~
【pleasanter】テーブル間のリンクとプルダウンリスト~Sort、Filter~
【pleasanter】ユーザー、組織、グループあたりをあれこれやってみた②~プルダウンリストのフィルター、ソート
【pleasanter】ユーザー、組織あたりをあれこれやってみた③~ルックアップ

もう読みました?プリザンターの概要、インストール方法から基本操作方法、導入事例、サンプル等役に立つ情報が満載!

コメント

タイトルとURLをコピーしました