からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

Microsoft Teams でアプリ バーに表示されるアプリのピン留めを組織で固定する

Microsoft Teams の左側にあるアプリ バーは個人で任意のアプリをピン留めすることができますが、組織として特定のアプリを使ってもらいたい場合、ポリシーとして組織全体または任意のユーザーに対して展開することができます。これは Microsoft Teams 管理センターで行います。

Microsoft Teams 管理センターの [Teams のアプリ] - [セットアップ ポリシー] で任意のポリシーを選択します。[ピン留めされたアプリ] にアプリを追加することで、アプリ バーのアプリを追加することができます。試しに Yammer のアプリを追加して一番上に表示させるようにします。

f:id:karamem0:20200623142256p:plain

反映には最大 24 時間かかるそうなので気長に待ちましょう。うまくいくとアプリ バーのところに [コミュニティ] というアプリが追加され、Yammer を Microsoft Teams のタブとして表示することができます。Yammer と Microsoft Teams は機能が似ているので、Microsoft Teams を使っていると Yammer の利用率が下がってしまうことがあるのですが、これによって Yammer の利用を促進することができると思います。

f:id:karamem0:20200623142814p:plain

組織で展開しているカスタム アプリもピン留めできますので、組織として使ってもらいたいアプリを固定することで、Microsoft Teams をより進化したポータル アプリとして使ってもらえるようになると思います。

SharePoint Framework で共通のプロパティを利用する

SharePoint Framework ではテナントまたはサイト コレクション単位で共通の読み取り専用のプロパティを使用することができます。

docs.microsoft.com

値の設定は Office 365 CLI または PnP PowerShell を使って行うことができます。SharePoint Framework では REST API または pnpjs を使って値を読み取ることができます。

実際に試してみたいと思います。まずは PnP PowerShell でプロパティを追加します。

Set-PnPStorageEntity -Key "Copyright" -Value "Copyright (c) 2020 karamem0"

確認のために PowerShell で REST API を呼び出します。*1

Invoke-WebRequest -Uri "https://{{tenantname}}.sharepoint.com/_api/web/getstorageentity('Copyright')" -Method Get -Headers @{ "Accept" = "application/json"; "Authorization" = "Bearer eyJ0eXAi..." } | select -ExpandProperty Content

結果として JSON が取得できます。

{
  "odata.metadata": "https://{{tenantname}}.sharepoint.com/_api/$metadata#SP.ApiData.StorageEntitys/@Element",
  "odata.type": "Microsoft.SharePoint.ClientSideComponent.StorageEntity",
  "odata.id": "https://{{tenantname}}.sharepoint.com/_api/web/getstorageentity('Copyright')",
  "odata.editLink": "web/getstorageentity('Copyright')",
  "Comment": null,
  "Description": null,
  "Value": "Copyright (c) 2020 karamem0"
}

内部実装としてはテナントのアプリ カタログ サイトまたはサイト コレクションのアプリ カタログ サイトの Web.AllProperties の storageentitiesindex に JSON 形式で値が格納されます。SharePoint Framework では他のサイト コレクションのデータを読み込むことはできませんが、getstorageentity のメソッド呼び出しにより読み込むことができるようになります。テナントとサイト コレクションで同じキーの設定がある場合はサイト コレクションが優先されるようです。

SharePoint Framework のアプリケーション カスタマイザーなどの拡張機能では読み取り専用のプロパティを持つことができますが、プロパティは埋め込まれているため、値を変更するためにはデプロイを行う必要があります。テナントのプロパティとして持っておけば変更が簡単になると思います。

*1:メソッド呼び出しなのに GET なのが気持ち悪いですね。POST でもできますけど。

SPClientCore 3.10.0 を公開しました

SPClientCore 3.10.0 を公開しました。

SPClientCore は PowerShell Core 向けの SharePoint Online 管理モジュールです。

www.powershellgallery.com

ドライブおよびクライアント コンポーネントのプロパティに関するコマンドレットを追加しました。
ドライブについては Microsoft Graph の Drive API で取得できるものと同じものになります。

提供されているコマンドレットの数は 265 になりました。

SPFxCalendar 1.4.1 を公開しました

SPFxCalendar 1.4.1 を公開しました。

SPFxCalendar はモダン UI で予定表リストをカレンダー表示するための Web パーツです。

github.com

変更点は以下の通りです。

  • イベントの編集ができるようになりました。ただし繰り返しイベントには対応していません。
  • 複数の日にまたがるイベントが正しく表示されるようになりました。

Microsoft 365 Virtual Marathon に登壇しました

日本時間では 2020/5/28 に行われた Microsoft 365 Virtual Marathon の Japanese Dev トラックに「SharePoint Framework の実践的な開発における 10 のヒント」というテーマで登壇しました。80 名以上の方にご参加いただきました。ありがとうございます。

ウェビナー形式で話をするのははじめてでしたがなんとかしゃべりきることができました。実はこの日のために iPhone を Web カメラにできるように EpocCam のアプリを購入したり iPhone を立てるための三脚を買ったり地味な散財をしてしまいました。たぶん綺麗に映っていたと思うのですがまあだからどうしたって気もしなくはないです。

内容としては珍しくデモなしのひたすら話し続けるという内容だったのですが、SharePoint Framework 開発をはじめる上でのエッセンスをすべて詰め込みましたので、スライドだけでもぜひ見ていただければと思います。書いてあることに気を付ければそうそう失敗はしないと確信しています。