サイトテンプレートによるモダンサイトのテンプレート化とサイト作成 その2:サイトテンプレートの作成と登録

はじめに

モダンサイトのサイトテンプレート機能により、サイトの構造をテンプレート化して横展開することが可能となります。 このサイトテンプレート機能の使い方を複数回に分けて紹介します。

今回はサイトテンプレートの作成と登録ということで、サイトテンプレートの作り方などを記載します。

サイトテンプレートとサイトスクリプトの正体

サイトスクリプトは、サイトの設定やリストの設定に関する定義情報です。 このサイトスクリプトを複数組み合わせて、ひとつのセットにしたものをサイトテンプレートと呼びます。 サイトスクリプトの実体は JSON データです。 JSON データとして定義情報を書き、これをサイトテンプレートとしてまとめて、サイトテンプレート単位でサイトに適用します。 前の記事でサイトテンプレートを適用する流れを記載しましたが、その際に使ったサイトスクリプトはこちらになります。

{
"$schema": "https://developer.microsoft.com/json-schemas/sp/site-design-script-actions.schema.json",
"actions": [
{
"verb": "createSPList",
"listName": "サイトスクリプトで作成したリスト",
"templateType": 100,
"subactions": [
{
"verb": "setDescription",
"description": "サイトスクリプトで作成したリストです。"
},
{
"verb": "addSPField",
"id": "4c35f233-238a-473b-8b68-a13805631932",
"fieldType": "Note",
"displayName": "本文",
"internalName": "Body",
"isRequired": false,
"addToDefaultView": false
},
{
"verb": "addSPField",
"id": "c97e1afa-f634-4c74-8fbd-977b1c994078",
"fieldType": "DateTime",
"displayName": "有効期限",
"internalName": "ExpireDate",
"isRequired": false,
"addToDefaultView": false
}
]
}
]
}

docs にもサイトスクリプトのサンプルが掲載されています。 サイトスクリプトの記述の仕方は docs に記載があるので詳細は割愛します。

読了時間: 2分

サイトテンプレートの種類を表す「サイトテンプレート ID」

はじめに

サイトデザインを作成する場合、サイトテンプレート ID を指定する必要があります。 ところがこのサイトテンプレート ID が特にどこにも一覧化されておらず指定する値が分かりづらいため、プログラムを作って調べてみました。 調べるためのサンプルコードと現時点のサイトテンプレート ID の一覧をまとめました。

サイトテンプレート ID 取得のサンプルコード

CSOM を使って、サイトテンプレート ID を取得するコートは以下の通りです。

using System;
using System.IO;
using Microsoft.SharePoint.Client;
using OfficeDevPnP.Core;
namespace EnumSPTemplate
{
class Program
{
static void Main(string[] args)
{
try
{
var file = new StreamWriter(args[1]);
var auth = new AuthenticationManager();
using (var context = auth.GetWebLoginClientContext(args[0]))
{
var templates = context.Site.GetWebTemplates(1041, 15);
context.Load(templates);
context.ExecuteQuery();
file.WriteLine("ID\tDisplayCategory\tTitle\tName\tDescription\tIsRootWebOnly\tIsSubWebOnly\tIsHidden");
foreach (var item in templates)
{
file.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}",
item.Id, item.DisplayCategory, item.Title, item.Name, item.Description, item.IsRootWebOnly, item.IsSubWebOnly, item.IsHidden);
}
file.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
}

サイトテンプレート ID の一覧

今後追加される可能性もありますが、現時点のサイトテンプレート ID の一覧は以下の通りとなります。

読了時間: 4分

サイトテンプレートによるモダンサイトのテンプレート化とサイト作成 その1:サイトテンプレートとサイトスクリプト

はじめに

モダンサイトのサイトテンプレート機能により、サイトの構造をテンプレート化して横展開することが可能となります。 このサイトテンプレート機能の使い方を複数回に分けて紹介します。

サイトテンプレート、サイトスクリプトとは

サイトテンプレートは、docs に記載がある通り、クラシックサイトのサイトテンプレートに似たモダンサイト用の機能です。 サイトテンプレートには、サイトに適用するテーマや自動生成するリスト等を含めることができ、新規サイト作成時や作成済みのサイトに対して適用することができます。 サイトテンプレートは複数のサイトスクリプトで構成されています。 サイトスクリプトは、JSON で記述する定義情報で、この中にテーマやリストの情報を含めることができます。 サイトテンプレートを適用すると、サイトテンプレートに紐づく全てのサイトスクリプトが実行されて、サイトのテーマの変更やリストの追加が行われます。 サイトスクリプトは、既存のサイトやリストを元に作成することができるため、既存サイトと同じ構成のサイトを作成するといったこともできるようになります。 サイトテンプレートを使用することでモダンサイトをテンプレート化して複製するようなことが可能になりますが、サイトテンプレートを使ってできることは現時点では限定的なため、クラシックサイトのサイトテンプレートやリストテンプレートと比べると機能的には劣ります。 それでも、モダンサイトのテンプレート化が全くできないという状態よりはだいぶ良いと思うので活用していきたいところです。 なお、「サイトテンプレート」は以前「サイトデザイン」と呼ばれていました。 そのため、マイクロソフトの公式ドキュメントでは一部「サイトデザイン」と記載されている箇所があります。 また、サイトテンプレートを取り扱う PowerShell コマンドレットも「サイトデザイン」時代の名残があります。

読了時間: 1分

SharePoint Framework ライブラリコンポーネントの開発

はじめに

SharePoint Framework v1.9.1 で GA となったライブラリコンポーネントの開発について、docs を参考に docker 環境で実際に開発をしてみました。

ライブラリコンポーネントとは

ライブラリコンポーネントは、SharePoint Framework で開発されたコードを複数のプロジェクトで共有するための仕組みです。 あらかじめライブラリコンポーネントとして開発しておいたパッケージファイルをアプリカタログにアップすることで、SharePoint Framework で開発された他のコンポーネントから参照することが可能となります。

ライブラリコンポーネントの開発

docker で SharePoint Framework の開発環境を構築している場合の手順を含めながら、ライブラリコンポーネントを開発し参照する流れを記載します。

読了時間: 3分

SharePoint Framework での SharePoint REST API 呼び出し (async/await 編)

はじめに

別記事にて、 SharePoint Framework の SPHttpClient による SharePoint REST API 呼び出しで Promise を使った場合のパターンについて記事を書きましたが、今度は Promise を使わず、TypeScript の async/await を使ったパターンについて書きたいと思います。

async/await を使った SharePoint REST API 呼び出しのサンプル

GET 処理

概ね以下のようなコードになるかと思います。 ちなみにこの例は、指定のリストの指定のアイテム ID のアイテムについて列を指定してデータを取得するものとなります。

読了時間: 2分

SharePoint Framework での SharePoint REST API 呼び出し (Promise 編)

はじめに

SharePoint Framework にて SharePoint REST API を呼び出す方法について、Promise チェーンを書く際にあまりにも煩雑に感じた部分があったので、その点を解消するための自分なりのやり方をメモしました。

Promise を使った SharePoint REST API 呼び出しのサンプル

GET 処理

概ね以下のようなコードになるかと思います。 ちなみにこの例は、指定のリストの指定のアイテム ID のアイテムについて列を指定してデータを取得するものとなります。

読了時間: 2分

SharePoint REST API の $select に指定する列名について

はじめに

SharePoint の REST API を使ってアイテムを取得する際に $select を付けて特定の列名のみピックアップすることができますが、$select に指定する列名を取得する方法についてまとめました。

$select に指定する列名

$select には、列のタイトルではなく内部名と言われるものを指定する必要があります。 列のタイトルと内部名はそれぞれ以下で確認可能です。 列のタイトル:リストのビューや設定ページに表示される列名(赤枠内) 列の内部名:リストのビューで列でフィルタやソートをした際のURLに含まれる値(赤字箇所) https://[サイトのURL]/Lists/List1/AllItems.aspx?sortField=LinkTitle&isAscending=true&viewid=e1824b1e%2D97a3%2D4ea7%2D9524%2D1f088f5210a2 SharePoint 標準の列や自分で追加した英語名の列であれば上記の内部名を確認し $select に指定すればよいのですが、日本語名で列を作成した場合や極一部の標準の列は、以下の URL のように $select に内部名を指定してもエラーとなり列の値を取得することができません。 /_api/web/lists/getbytitle(‘お知らせ’)/items?$select=[日本語名で作成した列の内部名/極一部の標準の列の内部名]

読了時間: 1分

リストの種類を表す「リストテンプレート ID」

はじめに

SharePoint Framework 拡張機能のコマンドセットを開発する際に、どのリストにカスタムアクションを紐づけるのかを elements.xml の RegistrationId 属性で指定します。 RegistrationId にはリストテンプレート ID を指定するのですが、このリストテンプレート ID とはいったい何者なのか、SharePoint オンプレ時代から SharePoint に関わっていない限り何だかよく分からないと思うので、この記事で簡単に解説します。

リストテンプレート ID とは

リストテンプレート ID は、SharePoint のリストの種類ごとに割り当てられた ID です。 この ID を見ることで、リストがどのテンプレートから作成されたのかを識別することができます。 既存リストの リストテンプレート ID は、プログラムを通じて確認することが可能です。 PowerShell の場合、以下のようなコードで確認できます。

読了時間: 1分

SharePoint Web Service API の一部が廃止されます

はじめに

SharePoint Server の初期の頃から実装されていた、Web Service API の一部が遂に廃止されるようです。 既に大部分が移行済みかと思いますが、もしまだこの API を利用している場合は、移行が必要となります。 Microsoft 365 管理センターにアクセス可能な方は以下のリンクから公式メッセージを確認してください。 https://admin.microsoft.com/AdminPortal/Home#/messagecenter?id=MC221387&MCLinkSource=MajorUpdate

廃止される API

Microsoft.SharePoint.SoapServer.WebPartPagesWebService クラスの以下のメソッド

廃止時期

2020年10月初~中旬

読了時間: 1分

SharePoint Framework で開発したアプリのバージョンアップ

はじめに

SharePoint Framework で開発した Web パーツなどのアプリのバージョンアップに伴う更新手順をまとめました。

バージョンアップの手順

/config/package-solution.json の書き換え

package-solution.json ファイルの 6 行目にある version 属性の値を新しいバージョン番号に変更します。 なお、バージョン番号は「メジャー.マイナー.リビジョン.ビルド」という 4 つのブロックで構成されています。 それぞれの数字が大きいほどバージョンが新しいということになります。

{
"$schema": "https://developer.microsoft.com/json-schemas/spfx-build/package-solution.schema.json",
"solution": {
"name": "LinkListWebPart",
"id": "9bd62b12-131b-47e9-bdbb-426b48a5c004",
"version": "1.3.0.0",
"includeClientSideAssets": true,
"isDomainIsolated": false,

/package.json の書き換え

package.json の 3 行目にある version 属性の値を新しいバージョン番号に変更します。 なお、package.json のバージョン番号は「メジャー.マイナー.リビジョン」の 3 つのブロックしかありません。 これら 3 つのブロックの値は、分かりやすさのためにも package-solution.json の version 属性の値と同じにすることをお勧めします。

読了時間: 1分