実験あるのみ
こんにちわ。こんばんわ。かえるのクーの助手の「井戸中 聖」(いとなか セイ)でございます。
今日からしばらくの間、SharePointのリストの実験をして記録していきます。
たぶん内容が薄いのとゆっくり実験するので、1~2週間かけて書いていきます。
自分でもつまらない内容だと思うので、読む方はもっと詰まらないはずです。
たんなる実験記録なのでご容赦ください。
dBに関しては結構詳しいんですが
(dBデシベルは音圧の単位です)
SQLを駆使してこの道300年レベルMAXです。(これが言ってみたかっただけ)いえ、嘘です。SQL文を毎日10行、365日×300年やったわけではありません。が、商売がら(技術的へき地のIT技術者とはいえ)そこそこのスキルはある「はず」です。
SharePointはRDB(リレーショナル型データベース)ではないので、リスト同士の関連付けは非常に貧相な感じがします。リスト項目の「参照」として定義するようなのですが、ネットを調べても「これ!」といった記事がないため、実験をしてみることにしました。
とりあえず分かっていること
- SharePointはある項目に対して「インデックス」をつけることができる
- SharePointは別のリストのある単一値項目に対して「参照」による結合をすることができる。
- 複数列への複合「参照」はできないらしい。
- リレーションシップのオプション設定で「制限削除」と「連鎖削除」が選べるらしい。これらの参照整合性がないリレーションシップも定義できるらしい(意味はわからない)
- 1つのリスト内には最大12個まで参照列を持てるらしい
以上より下記パターンの可否実験を考えました。(できるかな)
リスト実験
下記名称は今回の実験だけのためだけに考えたものです。一般名称ではないのでご注意ください。
単純(SIMPLE)結合
あるリストAの項目aをリストBが「参照」して結合する
自己単純カスケード(SELF/CASCADE)結合
あるリストAの項目aを同一のリストAの別の行が「参照」して結合する
単純カスケード(SIMPLE/CASCADE)結合
あるリストAの項目aをリストBが「参照」し、リストBの別の項目bをリストCが「参照」する
ブリッジ(BRIDGE)結合
あるリストAの項目a、あるリストCの項目cがある場合、かつ項目aと項目cをそれぞれ「参照」するリストBがある場合:リストBによりリストA、Cは結合される「はず」
ブリッジカスケード(BRIDGE/CASCADE)結合
あるリストAの項目a、あるリストCの項目c1, c2、あるリストEの項目eがある場合、かつ項目aと項目c1を「参照」するリストB、および項目c2と項目eを参照するリストDがある場合:リストB、DによりリストA、C、Eはカスケード結合される「はず」
グルー(一連糊付け)(GLUE)結合
あるリストAの項目a、あるリストBの項目b、あるリストCの項目cがある場合、かつ項目aと項目bと項目cを「参照」するリストGがある場合:リストA、B、Cはグルー結合される「はず」
ループ結合
あるリストAの項目aをリストBが「参照」し、リストBの項目bをリストCが「参照」し、リストCの項目cをリストAが「参照」する場合、「参照」がループするが、そのような参照は許容されるのか?
階層ツリー(HIERARCHY TREE)結合
第一階層リストAの1行あたりにリストBの複数行が対応し、リストBの1行あたりにリストCの複数行が対応するような結合
上記結合ができ1つのリストとしてビューできるかどうかを実験するのが今回のお題です。
経過
※仮想環境が絶不調(Server2019のWindowsUpdateが延々終わらない&強制リセットしたらSharePointに接続できない。。。)により実験停滞中。いくら仮想サーバだからといって、2日間もWindowsUpdateにかかるのはおかしい。。。NVMe.SSDの容量が足りないので、仮想サーバをアーカイブ用HDDに作ったのが敗因のような気がします。
PC内の引っ越しを考えています。
NVMe.SSDを整理して、VMをそちらに引っ越しました。超絶遅い原因はWSL2をインストールしていたため、サービスが起動しVMWareからのIntel VT-xが使えなかったのが原因だったようです。WSL2のサービスを起動しないようにしました。
非常に快適に動作するようになり、実験を再開します。
実験結果
今回、できる/できないの評価だけなので、定義などは貼りません。
単純(SIMPLE)結合
結果:可能(あたりまえですが)
LIST01_A(製品をイメージしたリスト)
参照定義のないリストAからはリストBを参照できない
LIST02_B(製品ごとの価格をイメージしたリスト)
ref_a項目がitem_a項目を参照している。ref_a:ではじまる項目がLIST01_Aから参照してきた項目。
自己単純カスケード(SELF/CASCADE)結合
結果:自リストへの参照は可能。参照の参照をリストで行うことは不可能。
LIST02_A(製品とその置き換え旧製品の関連をイメージしたリスト)
※参照できるのは実項目のみで、参照された項目はさらに参照することはできない。
※リストとしては直接カスケードできないが、ロジックを介在させればおそらくデータをたどれると思う。
※「管理されたメタデータ」というやつを使えばできそうな感じ(野生の勘)がするが、そもそもメタデータがなんなのか、操作はどうやればいいかが全くわかりません。
単純カスケード(SIMPLE/CASCADE)結合
結果:参照のカスケードは不可能。参照テーブルの参照データは取得できないためデータをたどれない。
リストCからリストBは参照できるが、リストBを介在したリストAは参照できない。
自己単純カスケードと同様にロジックを介在させれば可能な予感はする。
ブリッジ(BRIDGE)結合
結果:ブリッジからならアクセス可能。参照される側から結合をたどることはで不可能。
LIST04_A
参照定義のないリストAからはリストB、リストCを参照できない
LIST04_B
ブリッジのリストBからはリストAもリストCも参照可能(あたりまえですが)
LIST04_C
参照定義のないリストCからはリストB、リストAを参照できない
ブリッジカスケード(BRIDGE/CASCADE)結合
結果:ブリッジカスケードされたリストを単独のリストとして参照することは不可能。
参照された項目からさらに参照はできない&参照元を遡れないため。
リストBからリストA、Cが参照できる。リストDからリストC、Eが参照できる。
しかし、これらの構造で、A、C、Eに同時にアクセスすることはブリッジのカスケードではできない。リストBとDは結合されていない。仮にBとDをブリッジで結合しても参照の参照はできないため、A、C、Eへ同時アクセスはできない。
グルー(一連糊付け)(GLUE)結合
結果:可能(あたりまえですが)
LIST06_A
LIST06_B
LIST06_C
LIST06_G
※イメージ画像の参照はできなかった(結合方法によらず一般的にそうなのだと思う)
ループ結合
結果:可能。ただし他と同様に参照の参照は不可能。
よってループ結合している一連の情報を1つのリストで表示することはできない。
LIST07_A
LIST07_B
LIST07_C
階層ツリー(HIERARCHY TREE)結合
結果:可能。ただし他と同様に参照の参照は不可能。
LIST08_A
LIST08_B
LIST08_C
まとめ
全くの初心者ですが、初心者ながらの観点、感想をまとめます。
- 参照の参照は定義できない。(できると便利なのになぁ)
- データ構造として基本的な結合を定義することができる。(へんな制約はなさそう)
- 1つのリストへ表現できなくても、複数のリスト表示をするなど工夫をすれば、やや複雑なデータ構造でも表現が可能と思われる。(とはいえあまり複雑なのはやらいほうがよさそう)
- 3階層以上の階層構造を単一リスト化したければ、3階層のリストから2階層・1階層リストへそれぞれ参照を定義すれば、問題ないとおもわれる。(これは未実験だが有用と思われる)
- データ構造を参照でちゃんと定義したあと、必要に応じてフィルタ機能で絞る使い方が適しているような気がする。
疑問点
- ビューレベルの定義でも結合できそうな気がするが、操作がまったくわからない。(気のせいでした。ビューは項目の選択と並びとフィルタリングが基本のようです。)
- Formを介在させれば、単一のリスト/ビューだけではできないことができそう(気のせいかも)
- PowerAppsと組み合わせればいろいろ応用できるのかも(例えば、英語のサイト情報ではPowerAppsをつかえばカスケードLookup(参照を階層構造的にフィルタリングするような動作?)ができるみたい:これも何のことかさっぱりわからない。)
- カスタムWebパーツというのを作れば「なんでもあり」な気配がある(英語でそれっぽい記事があった)が、そもそも「カスタムWebパーツ」とは何なのか全くわからない。
- SharePointは10年以上前からそこそこ使われているソフトのようですが、欲しい情報(できる/できない、応用に関するHowTo、裏技的手法、etc)がほとんど検索できません。(英語情報も含めて結構少ない気がします)MS製のソフトですが、あまり人気がないのかもしれません。