スポンサーリンク

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

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

ズブズブの素人が挑むプリザンター。

エクセルのVLOOKUP、accessのテーブル連結のように、顧客番号をいれたら顧客名や住所などがでてほしいなあと思う。なぬ?できるらしい。プリザンターで「ルックアップ」という機能がある、ということで、これでVLOOKUPみたいなことができるのでは?とやってみました。

テーブル連結は「リンク」でやることができます。ルックアップはより便利な機能になるようです。
まず、テーブルのリンクもほぼ理解していないのでそこからやってみて、そのあとルックアップに進みます。

1.テーブルのリンク

こちらのマニュアルなどをみながらやってみました。
https://pleasanter.org/manual/table-management-choices-text-link
https://pleasanter.org/archives/1884

(1)使用するテーブルの仕様

例で使うテーブルの仕様を最初に説明します。親テーブル(マスターテーブル)と子テーブル(親テーブルの情報を使用するテーブル)を用意します。

●親テーブル:テーブル名「顧客情報」

親テーブルのエディタタブで以下の設定としました。
顧客番号:分類A
顧客名:説明A(スタイル=ノーマル)
電話番号:説明B(スタイル=ノーマル)
住所:説明C(スタイル=ワイド)
登録日:日付A
タイトル:顧客番号+顧客名(上記の項目を連結して使用)

親テーブルエディタ

タイトルは分類Aの顧客番号と説明Aの顧客名をつなげたものとしました。「)」で二つの項目を連結して「1234)山田花子」のように表示します。

タイトル

親テーブルの一覧画面のイメージ

一覧画面

親テーブルにタイトルは必須。この「タイトル」項目が「外部キー」というのでしょうか。子テーブルとの連結キーとなります。(正確には、連結キーはレコードID、選択肢で見える表示名がタイトルなのですが、見た目はタイトルがキーになっているように見える)

「分類A」をキーにしたい、という場合、リンクする際に「分類A」をキーとして選択することができないので、「分類A」をタイトルに設定する、等の対応が必要のようです。
なお、上記テーブルではタイトルに「分類A」と「説明A」を設定しています。

●子テーブル:テーブル名「販売記録」

親テーブルの顧客情報の顧客を選択して、その顧客に対する売り上げ記録を入力するテーブル、という設定です。

子テーブルはエディタタブで以下の設定としました。
タイトルは顧客番号と販売日を連結したものとしました。
★はキー項目、☆は親テーブルと同じ項目、◎は子テーブルのみの項目

★顧客情報:分類C(ここに親テーブルを連結する)
☆顧客番号:分類A
☆顧客名:説明A(スタイル=ノーマル)
☆電話番号:説明B(スタイル=ノーマル)
☆住所:説明C(スタイル=ワイド)
◎販売日:日付A
◎商品:分類B
◎個数:数値A
◎担当者:担当者
◎タイトル:顧客番号+販売日

子テーブルエディタ
タイトル

(2)テーブルをリンクする

さて、この時点ではテーブル同士はリンクしていません。
新規作成画面で顧客情報(分類C)をクリックしても選択肢が出るわけではありません。

いよいよ!リンクさせます!

方法1:テーブルをドラッグしてリンクさせる

①リンクさせるには=>子テーブルを親テーブルにドラッグして重ねる

私は「どっちをどっちにドラッグするんだっけ???」とわからなってしまいます。「子テーブル」を「親テーブル」に乗っける、が正解。子供を親におんぶさせる、子どもが親を見に行く、等とイメージで覚えるといいかもしれません。
そもそもどっちが親でどっちが子だかもわからなくなるのですが、顧客名、ID、住所等を管理するテーブルや商品ID・商品名・単価等を管理するテーブルなどの「〇〇マスタ」みたいなのが親、それを利用するテーブルの方が子。って感じ?

②「リンク」ボックスが出てくるので、子テーブルでリンクさせたい項目を選択する。
どっちがどっちかわからなくなるのですが、ここで選択するのは子テーブルの項目です。

③メッセージが出るので「OK」をクリックする

さて、リンクがちゃんとできたかどうか、子テーブルで試してみましょう。
子テーブル「販売記録」で「新規作成」をクリックします。
リンクさせた項目「顧客情報」をクリックすると、選択項目があらわれます。選択項目は親テーブルのタイトルの内容となっています!
わー!パチパチパチ

残念ながらこの設定だけでは「電話番号」や「住所」等の親テーブルの他の情報は自動で表示されることはありません。ほかの項目にはなんも設定してないからむしろ表示されたらびっくりだけど。

子テーブルの中身を見てみます。
子テーブル「販売記録」の管理>テーブルの管理>エディタタブで項目「販売情報」の詳細設定を開いてみてみます。
選択肢一覧に自動的に[[155]]等と、カッコでくくられて親サイトのIDがいつの間にか設定されています。ドラッグしてリンクさせると自動で入力されるようです。

方法2:親サイトIDを選択肢一覧に入力する

テーブルをドラッグしなくても、リンクはできるようです。
前の項目で、テーブルをドラックしてリンクさせた項目の選択肢一覧に[[親サイトID]]と自動で表示されていましたが、それを手入力でやるだけでもリンクができるようです。

別にサイトを二つを作成してやってみました。

①親サイトIDをメモっておく
ここでは親サイトのIDは167です。

②子テーブルを開き、管理→テーブルの管理→エディタタブを開く

③リンクさせたい項目を選択し「詳細設定」ボタンを押す。
※リンクさせる項目は「分類項目」のみ、設定可能です。

④選択肢一覧に二重角カッコでくくって親サイトIDを入力します。もちろん全部半角で。
「変更」ボタンをクリックして、詳細設定画面を閉じます。
「更新」ボタンクリックで変更を反映させます。

⑤「新規作成」ボタンをクリックして、エディタ画面を表示してみました。
「顧客番号」項目に親サイトのタイトルの内容が選択肢として表示されました!

テーブルのリンクはこんなに簡単にできるんですね。

2.ルックアップ

ほかの項目も親テーブルの内容を持ってきたい!という場合、ルックアップという機能が使えるそうです。
以下のサイトを見ながらやってみました。
https://pleasanter.org/blogs/function-guide-lookup

https://pleasanter.org/manual/table-management-lookup

https://www.ceccs.co.jp/archives/blog/%E3%80%90%E3%83%97%E3%83%AA%E3%82%B6%E3%83%B3%E3%82%BF%E3%83%BC%E3%80%91-%E7%AC%AC100%E5%9B%9E%EF%BC%89%E3%83%AB%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E6%A9%9F%E8%83%BD%E3%82%92%E4%BD%BF

ええ?コードを書くの?私にできるかしら。。。と思いましたが、コピペでできました。

(1)設定手順、コード

上述「方法1」の時に使ったサイトでやってみます。
テーブルの仕様は1(1)をご参照ください。

①まず、上記サイト等からコードをコピーし、自サイトの内容に合うように加除修正します。
SiteId は親サイトのIDを入力します。
Lookupsには転記したい項目を記述します。
Fromに親サイトの項目名、Toに子サイトの項目名を入力します。
日本語項目名とコードの項目名の対応はこちらのサイトが参考になります。
https://pleasanter.org/manual/dev-column-name
ザックリいうと「分類」がClass、「説明」がDescription、「日付」がDate、「数値」がNumです。
分類Aの場合はClassA、説明Bの場合はDescriptionB、日付Cの場合はDateC、数値Dの場合はNumDのように書きます。そのほかにも色々項目名があるので上記サイトをみながらやってます。

[
    {
        "SiteId": 155,
        "Lookups": [
            {
                "From": "ClassA",
                "To": "ClassA",
                "Type": 0
            },
            {
                "From": "DescriptionA",
                "To": "DescriptionA",
                "Type": 0
            },
            {
                "From": "DescriptionB",
                "To": "DescriptionB",
                "Type": 0
            },
            {
                "From": "DescriptionC",
                "To": "DescriptionC",
                "Type": 0
            }
        ]
    }
]

②子サイトを開き、管理→テーブルの管理→エディタタブでリンクさせたい項目(ここでは「顧客情報」、キーになる項目ですね)を選択し、詳細設定ボタンクリックで詳細設定画面を開きます。

③詳細設定画面の「選択肢一覧」のところに先ほど設定した親サイトとのリンク[[155]]が入力されています。それを消して、①のコードを入力します。選択肢一覧の欄は狭くて入力しづらいので、メモ帳か何かに入力ておいて、コピペするのがらくちんです。
「変更」ボタンで画面を閉じ、「更新」ボタンで変更を反映します。

④これでいいっぽいのですが、自分のPCの問題なのか、新規作成で試してみたところ、選択肢は表示されるがほかの項目に値が表示されない。「作成」を押しても「更新」をおしてもなんともならない。
「自動ポストバック」をオンにするとよいみたいなことが書いてあったので、コードを入力した「顧客情報」の詳細画面で「自動ポストバック」にチェックを入れた。

⑤すると!わおーステキ!
新規作成で試してみたところ、「顧客情報」を選択したらほかの項目の値も表示された!
感動!

「自動ポストバック」にチェックを入れる、というところで更新したい説明Aや説明Bなどの項目の「自動ポストバックにチェックを入れても全然変わらず「なぜいうことをきかぬ。。。私には一生できないのだろうか」と絶望しかけたところ、連結したキー項目(ここでは「顧客情報」)の「自動ポストバック」にチェックをいれたら、見事に反映された。
マニュアルが読み込めない体質のため、本当にちょこちょこしたところでいらぬ苦労をしがち。

(2)コードの説明

説明というほどではないですが、図解で。。。
基本的にコードをコピーし、親サイトIDと転記したい項目(ClassAとか)を修正し、転記したい項目名の数だけ下図の青枠部分を追加したり、削除したりする、とそれだけ直す感じです。
Lookupsの中のFromは親サイトのClassAなどの項目名、Toは子サイトの項目名を指定します。
親サイトと子サイトで転記したい項目について、項目名は同じでなくても大丈夫です。今回失敗したなと思ったのですが、分類Aなどの項目名がたまたま一緒になってしまい、例としていまいちなものになってしまいました。ClassAをDiscriptionDに転記、StatusをClassDに転記等もできます。
typeは転記先で値を表示したい場合は 0 、表示名を表示したい場合は 1 を指定します。省略した場合の規定値は0です。今回は親サイトで値のみの設定としているためTypeは0としています。

設定内容

No選択肢説明
1From転記元の「テーブル」の「データベースのカラム名」を指定します。
2To転記先の「テーブル」の「データベースのカラム名」を指定します。
3Type値を転記する場合には 0 を指定します。表示名を転記する場合には 1 を指定します。Typeは省略可能です。省略した場合の既定値は 0 です。
4OverwriteToで指定した項目に既に値が設定されている場合は上書きせず、値が設定されていない場合のみ転記したい場合は false を指定します。Overwriteは省略可能です。省略した場合の既定値は true です。
5OverwriteFormToで指定した項目に値を必ず転記したい場合はtrueを指定します。OverwriteFormは省略可能です。省略した場合の既定値は false です。なお、ユーザによる手動入力した場合であっても上書き転記します。
テーブルの管理:エディタ:項目の詳細設定:選択肢一覧:ルックアップ から
引用元:https://pleasanter.org/manual/table-management-lookup

Typeの詳しい説明や、ほかにもOverwriteなどの設定項目もありますので、公式マニュアルを参照してください。
https://pleasanter.org/manual/table-management-lookup

項目を追加する場合は青枠の { から } の部分をコピーして、追加します。次の項目との間には「,」が必要なので、気を付けてください。逆に一番最後の}の後は「,」は不要です。

3.最後に

いやー、なんと便利な機能だ。しかもぱっとみ難しそうだったけど、コピペで私にもできた!
これは今後いろいろな場面で使えそうだなあ。
つたない説明でしたが、お読みいただきありがとうございました。
なにか間違ってたり、もっといい方法がある、などがございましたら、コメントにてご指摘いただけると助かります!

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

コメント

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