SharePointで作成したリストの情報をREST APIを使用して取得してみましょう。
今回は、APIで取得した情報を、headerにリンクとして差し込んでみます。サイト全体共通のナビでも、リストを使用すると、一か所で管理できるので便利です。
前提条件
- SharePoint Online
- モダンUI
- カスタムJSが使用できる(SPFx)
そもそもカスタムJSをどうやって使うの、という方は以下の記事をどうぞ
SharePointのモダンUIでカスタムCSS・カスタムJSを適用する方法
1.REST APIで情報を取得
では早速、カスタムJSにAPI情報を取得してみます。
REST APIは、以下のURLにアクセスすると取得できます。
REST APIのURL
1 2 3 4 5 |
//リスト /sites/{mySiteName}/_api/web/lists/getbytitle('{listName}')/items //例:8bitというサイトのcustomHeaderNavigationというリストの場合 /sites/8bit/_api/web/lists/getbytitle('customHeaderNavigation')/items |
このURLの、{mySiteName} にはサイト名を、{listName} にはリスト名を挿入します。
データを取得する処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// REST APIのURL var listUrl = "/sites/8bit/_api/web/lists/getbytitle('customHeaderNavigation')/items"; // リストデータの取得 fetch(listUrl, { method: 'GET', headers: { 'Accept': 'application/json;odata=nometadata' } }) .then(response => response.json()) .then(data => { // 取得したデータを書き換える処理をここに書く console.log(data); }) .catch(error => { console.error('エラー', error); }); |
コンソールにデータが表示されていれば成功です。
2.取得した情報をheaderに表示
次に、取得した情報をHTMLタグに整形し、headerに差し込んでみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
// REST APIのURL var listUrl = "/sites/8bit/_api/web/lists/getbytitle('customHeaderNavigation')/items"; // リストデータの取得 fetch(listUrl, { method: 'GET', headers: { 'Accept': 'application/json;odata=nometadata' } }) .then(response => response.json()) .then(data => { // 取得したデータを基にDOMを生成 if (data && data.value && data.value.length > 0) { //SiteHeaderのDOMを取得 var siteHeader = document.querySelector('[data-automationid="SiteHeader"]'); if (siteHeader) { var targetElement = siteHeader.querySelector('[class*="adjacentTitleSubcell-"]'); if (targetElement) { //ul要素を生成 var ulElement = document.createElement('ul'); //生成 ulElement.id = 'customHeaderNav'; //ulにidを付与 targetElement.appendChild(ulElement); //ulタグを挿入 //liタグを生成 data.value.forEach(item => { //アイテムの個数分処理 var listItem = document.createElement('li'); // var link = document.createElement('a'); //aタグを生成 link.textContent = item.Title || ''; //タイトルテキストを挿入 link.href = item.Link || '#'; //aタグのhrefを挿入(定義が無ければ#) if (item.newTabOpen) { //newTabOpenがtrueならblankで開く link.target = '_blank'; link.rel = 'noopener noreferrer'; link.setAttribute('data-interception', 'off'); } link.classList.add('headBtn'); //aタグにclassを付与 listItem.appendChild(link); //aタグをliタグに挿入 ulElement.appendChild(listItem); //liタグをulに挿入 }); } } } }) .catch(error => { console.error('エラー', error); }); |
このサンプルコードは、ul>li>aの構造で、リストアイテム分のナビを生成しています。
以下のように、配列から各リストデータを取り出しています。
・item.Title … Title列を取得
・item.Link … Link列を取得
・item.newTabOpen … newTabOpen列を取得
idとclassを付与しているので、カスタムCSSを使用すれば独自のスタイルも適用可能です。