カテゴリ「SharePoint Framework」の4件の投稿 Feed

2022年6月20日 (月)

ことの経緯は2021年の後半あたりから。気が付くと私が使っている Microsoft 365 テナントの1つでSharePoint 管理センターの API アクセスページが正常に表示されなくなる問題が起きていることに気が付きました。ここは SharePoint Framework で開発をする際に Microsoft Graph API を利用するときに使う大事な場所です。

エラーのメッセージは次の通り。

「Could not retrieve Global Service Principal ID Error: Error: {}」

2022-01-17_17-46-54

GUI がだめなら PowerShell から試してみようとアクセスするのですが「 Directory.AccessAsUser.All の OAuth アクセス許可が見つかりませんでした」というエラーメッセージが表示され、こちらからもアクセスできません。

2022-01-19_10-22-06

まず、アクセス許可を解決しないとどうにもならないのですが、なにをどうしたらよいものか。

色々と調べてみると同じような状況にあっている人が世界中に何人かいることがわかりましたが、解決できた人もいればそのままだったり。さて、同じような問題を抱えている方の多くがたどり着くのが下記の記事のようです。

SharePoint Online- Bad service principal breaks SharePoint Admin API Access “Global Service Principal ID Error: Error: {}” Resolved – Solving SharePoint Issues – Eric Schrader (eschrader.com)

残念ながらこの記事とは現象が異なっていたので、この方法では解決しなかったのですが多くのヒントを得ることがで来ました。

SharePoint 管理センターの APIアクセスのページと大きく関わりがあるのが Azure AD 側のエンタープライズアプリケーションであり、次の2つが関わってきます。

2022-05-26_17-19-01

  • SharePoint Online Client Extensibility Web Application Principal
  • SharePoint Online Client Extensibility Web Application Principal Helper

ちなみに、この2つのアプリは SharePoint 管理センターの API アクセスページにアクセスする際に、初回に基本的に自動生成されるもので本来は何も設定は必要ありません。

ということでこの2つにターゲットを絞りました。まず末尾に Helper とついているアプリを削除して、自動的に再作成するのを待ってみましたがこれでも状況は変わらず。

幸い、正常に動作している別のテナントが手元に3つほどあったのでこれと徹底的に比較しようと。でまずは、AccessAsUser.All を解決する必要があります。それぞれで API のアクセス許可の設定を比較してみます。すると、末尾に Helper とついている方がアクセス許可が全く構成されていません。

2022-06-19_15-29-46
正常な状態
2022-05-26_17-19-57
エラーが発生しているアプリ

ということで、このアプリのマニフェストを見てみるとエラーのあるアプリでは下記の部分がすっかり抜け落ちている。これを書き足すと正常に戻りました。

2022-05-26_17-24-58

この赤枠部分の signInAudience 属性に "AzureADMyOrg" という値が格納されていますが、これによって、現在のアプリケーションでサポートされるアカウントが決まります。

Azure Active Directory のアプリ マニフェストについて - Microsoft identity platform | Microsoft Docs

以上。なぜ、こうした状況になったのかは不明ですが、私の環境では何とかエラーを解決したので、この記事を共有することにしました。

同じ状況が発生する頻度は低いでしょうが、困っている人がいるかもしれない。もちろん、まったく同じ原因ではないかもしれないし問題解決できないケースもあるでしょうが、一縷の望みを託しておこうと。

参考になれば幸いです。

2019年11月21日 (木)

研修で遭遇したトラブル情報の備忘録です。

==================

SharePoint Framework (SPFx) 開発で Gulp を実行した際に、「primordials is not defined」というようなメッセージが表示されタスクが実行できないという状況に遭遇しました。私の環境は Gulp が実行できるのに、受講者の方のマシンだと実行できない。違いは?

そこで思い当たったのが Node.js のインストールバージョン。

現在 SPFx の開発環境でサポートされている Node バージョンは Node 8 または 10 で推奨は 10 。ですが、Node.js のサイトには TLS version 12 が公開されています。version 10 のダウンロードリンクを見つけられず、そのままインストールしてしまっていたという状況です。

ということで、いったん Node をアンインストールし、サポートされているバージョンをインストールしなおし。

ちなみに、Node.js の過去の公開バージョンは下記のリンク先に公開されています。

https://nodejs.org/en/download/releases/

皆様、お気をつけください。。。

ちなみに、同じ現象に遭遇した事例がフォーラムにも上がっていました。

SPFx | GULP Error primordials is not defined ao executar o comando gulp --tasks

2019年3月 4日 (月)

たまには、バリッと開発寄りの記事を書きます。

SharePoint Framework を使うとモダンサイトはもちろん、クラシックな SharePoint サイトでもクライアント サイド実行の Webパーツを独自に作成できます。

この Framework は現在はSharePoint Framework 1.7 (2018年11月リリース)が最新で、もうすぐ v 1.8 がリリースされるところまで来ています。v 1.7で追加された目玉機能の一つがプレビュー機能ではあるものの、"SharePoint Framework for Teams Tabs" のサポートです。

SharePoint Webパーツを Teams のタブとしても利用できるようにするというもの。

2019-03-04_16-39-25

作り方の大まかな流れは次の通りです。

  1. Yeomanジェネレータ実行時に --plusbeta オプションを指定してスキャッフォルディングする
  2. Teams フォルダーが生成される
  3. 通常通り Webパーツコードを記述していく
  4. Gulp bundle --ship および Gulp package-solution --ship を実行する
  5. Teams フォルダー内のファイルを Zip 化し、Teams 側へアップロード
  6. アプリをタブとして追加

では、分かりにくいであろうところを少し補足していきましょう。

まず Yeoman ジェネレータですが、v1.5 から --plusbeta オプションが追加されました。このオプションを追加することでプレビュー段階の機能を試せるようになっています。Teams タブとして利用するにはこの --plusbeta オプションが必要です。

>yo @microsoft/sharepoing --plusbeta

ソリューションパッケージを Ship モードで作成すると下図の通り Teams フォルダー内に manifest.json と Teams内で使用する既定のアイコンが2つ用意されます。

SPFxTeamsTabSolutionInVSC

このフォルダー内のファイルを手動で単純に ZIP化します。

これをTeamsのチーム所有者が下記の場所からアップロードするだけです。

2019-03-04_16-19-07

アップロードが終わると、アプリ一覧に SPFx アプリが表示されます。

2019-03-04_16-19-47

あとは、SharePoint サイト上で Webパーツが動作し、同じものがTeams内でも動作することを確認してみましょう。ちなみに、デモのアプリはカレント SharePoint サイト内のライブラリ一覧を取得するようにしています。Teams 内で動作させているように見えるこのアプリですが、実体となるコードは SharePoint側でホストされることになるため、同一サイトを利用しているTeamsのチーム上でも同じ結果が得られます。

2019年2月16日 (土)

完全に自分の備忘録として書きます。

*********************************************

SharePoint Framework 開発ではNode.js を使い、ローカルのWebサーバーを立ち上げ Workbench ページを使ってデバッグ実行などするわけですが、このとき https エンドポイントを使うため証明書が必要。そのため 開発者用証明書をインストールするために次のコマンドを実行します。

>gulp trust-dev-cert

これでインストールがすんなりできるのですが、アンインストールしたいことも在るわけです。たとえば、私の場合は、SPFx の開発をおととしから行っていますが、Chromeの仕様が変わり証明書を変えなくてはいけなくなった。関連情報は下記に書かれています。

SharePoint Framework の既知の問題とよくあるご質問

そこで、実行するのが次のコマンド

>gulp untrust-dev-cert

と上記リンクに書かれているのですが、なんだかうまくいかない。エラーになってしまう。

2019-02-16_19-33-29

一般的な証明書と同じくユーザー証明書としてインストールされたのかなと MMCを立ち上げて確認するもない。で、探したところ下記のパスにありました。

<ユーザープロファイル>\.gcb-serve-data

ここに、gcb-serve.cer と gcb-serve.key がある。

2019-02-16_19-35-44

ということで、このディレクトリ (gcb-serve-data)を削除して再び gulp trust-dev-cert を実行。

[参考] https://sharepoint.stackexchange.com/questions/206389/cannot-test-spfx-webparts-on-my-sharepoint-tenancy/206399#206399