2026年11月 3日 (火)

SharePoint 内のHTMLページでリストのデータ取得の仕組みをDeep Dive する

SharePoint では HTMLページ/HTMLファイルがサポートされるようになりました。HTMLファイルを任意のライブラリにアップロードするとHTMLファイルと呼び表示する場合は他のライブラリ内のファイルと同様にビューアーで開くことになります。一方、サイトのページライブラリにアップロードするとHTMLページ呼び、SharePointのヘッダーやフッター、ナビゲーションも一緒に表示できます。

さて、HTMLファイル/ページではSharePointとExcelのデータを取得できるようになっています。今回は SharePoint リストのデータを取得するスクリプトがどうなっているのかを確認してみましょう。

スクリプトの理解

今回の検証に使っているのは部内の図書管理を想定しているサンプルのリストです。生成されているHTMLページは次の通りです。20261103_152903

ソースコードを見てみるとHTML内の body>main 内に script タグが用意されており、ここで接続する SharePoint リストを宣言しています。

20261103_153133

<script type="application/json" class="ka-livedata-manifest">

[

  {
    "kind": "list",
    "spItemUrl": "list:...",
    "webUrl": "...",
    "listId": "e81dfe67-92eb-40da-a6ed-889033dcbdd0",
    "select": [
      "Title",
      "ISBN",
      "Publisher",
      "Category",
      "Location",
      "OwnerDepartment",
      "LoanStatus",
      "Borrower",
      "LoanDate",
      "DueDate"
    ],
    "label": "図書管理"
  }

]

</script>
 
listIdはリストのGUIDです。selectは取得対象の列で内部列名で指定します。
 
ちなみに、ソースコードをみているとわかりますが、ka-html-viewer-refresh とあり、SharePoint側のホストは組み込みのHTML Viewer になっています。

20261103_154008

window.__LD_RESULTS__

実際にデータを取得するのは次の構文です。
 
var _resultsGlobal = window.__LD_RESULTS__ || {};
 
この window.__LD_RESULTS__ は SharePoint側のホストであるHTML Viewer (コード内での名称) が用意している独自のグローバルプロパティのようです。
 
事前指定した内容に応じてSharePointリストのデータをホスト側で取得して、window.__ID_RESULTS__ に格納し、これを HTML内の JavaScriptが参照してDOMに描写しているということでしょう。
 
次にHTML Viewr から取得した対象リストのデータを変数に格納しています。
 
var _spUrl = _items[_ri].spItemUrl;
var _data = _resultsGlobal[_spUrl]; 

20261103_155337

 

loadTablar()

取得したデータは loadTabular()に渡されます。

20261103_155140

loadTabular()ではリストのデータがJSON形式になっているためこれを解析しています。 

20261103_155731

 
データはJSON形式となっているためこれを JSON.parseして配列になっているアイテムを処理するようになっています。
 
次に、列名をヘッダー、行はアイテムとして取り出しています。
var headers = listData.headers;
var rawRows = listData.rows || [];
 
また、元のデータが一ベースの配列だった場合に次のように次のように列名をキーとして指定できるオブジェクトに変換しています。
 
keyedRow[headers[colIdx]] = cellValues[colIdx];

 

20261103_155932

render(results) 

render(results)で画面描写処理を行います。

20261103_161512

最後に次のコードでページ内に挿入しています。

_defaultContainer.innerHTML = _rendered;

20261103_161652

全体的な処理の流れは次の通りです。

Designer_25

まとめ

いろいろと制約があるHTMLページですが、SharePoint REST APIや Graph API を直接利用するアプローチとどのように異なっているのかに興味があったので、今回はCopilot in SharePointによって生成されたHTMLページを改めて調べてみました。

生成されたHTMLを実際に確認してみることで、SharePointのHTMLページでリストデータがどのように扱われているのかがわかってきました。HTML Viewer(コード内での呼称)がSharePointリストと独自のHTMLとの橋渡しの役割をしており、逆に言えばこれがリストとのやりとりの制約にもなってくるわけですね。

今後まだいろいろとアップデートされるでしょうから、あくまでも現時点での内容としてとらえてください。 

コメント