からめもぶろぐ。

SharePoint が得意なフレンズなんだね!すごーい!

Office 365 日本リージョンで Microsoft Graph Data Connect を実行するとエラーになる

ここ数日 Microsoft Graph Data Connect を試そうと思っていろいろやってみたのですがどうにもうまくいかないということで。

現在 OfficeDev の GitHub リポジトリにはセットアップの手順とサンプルの ARM Template が公開されています。

github.com

また microsoftgraph の GitHub リポジトリにはトレーニング用のコンテンツが公開されています。

github.com

頑張って英語を読み解きながらどちらの手順を試してみたもののできませんでした。発生したエラーについては以下の通り。Office 365 への承認までは通るのですがその後で固まってしまう感じ。

Error: Office365 data loading failed to execute. Failed to extract data from Office 365 for Tenant and dataset BasicDataSet_v0.Contact_v0 into AzureBlobStorage

仕方がないので開発チームにメールを投げてみることに。次の日には返事がきました。どうも Office 365 のリージョンと Blob Storage のリージョンの組み合わせが正しくないとエラーになるとのこと。

github.com

そして日本リージョンがない件。さらに突っ込んで聞いてみたところ、日本リージョンではまだサポートされておらず、2019 年前半には日本 (Office 365) - 東日本 (Azure) で使えるようになるそうです。それまではアジア太平洋 (Office 365) - 東南アジア (Azure) を使って欲しいとのことでした。とりあえず日本で試すことができるのはまだまだ先のようですね。

Microsoft Graph でも SharePoint リスト アイテムの複数の値を持つ列が更新できない件

SharePoint REST API の時代からですが複数の値を持つ列 (MultiChoice、UserMulti、LookupMulti) を更新できないという問題がありました。英語フォーラムの情報を見てもできるという情報もあったりできないという情報があったりして錯綜しているのですが、少なくとも私が試した限りでは解決できていません。

具体的には以下のようなリクエストを投げると

POST https://example.sharepoint.com/_api/web/lists('<ListId>')/items(<ItemId>)
Authorization: Bearer <AccessToken>
Accept: application/json; odata=verbose
Content-Type: application/json; odata=verbose

{
    "__metadata": {
        "type": "SP.ListItem"
    },
    "ChoiceField": {
        "results": [
            "Test Value"
        ]
    }
}

400 エラーが返ってきます。*1

Microsoft.SharePoint.Client.InvalidClientQueryException: A value without a type name was found and no expected type is available. When the model is specified, each value in the payload must have a type which can be either specified in the payload, explicitly by the caller or implicitly inferred from the parent value. *2

これ Microsoft Graph で改善してるのかなと思ってふと試したところ全然治っていないみたいです。

{
    "error": {
        "code": "-1, Microsoft.SharePoint.Client.InvalidClientQueryException",
        "message": "A value without a type name was found and no expected type is available. When the model is specified, each value in the payload must have a type which can be either specified in the payload, explicitly by the caller or implicitly inferred from the parent value.",
    }
}

まあ Microsoft Graph は SharePoint REST API をラップしているだけなので当たり前といえば当たり前なのですが、悲しい気持ちになりましたというお話。

*1:ちなみに例外として null を入れると 200 が返ってきます。つらい。

*2:型名のない値が見つかりましたが、使用できる必要な型がありません。モデルが指定されている場合、ペイロード内の値ごとに、ペイロードで指定できる型が必要です。その型は、呼び出し元による明示的な型か、親値から暗黙的に推定される型にすることができます。

Microsoft Ignite 2018 で Microsoft Graph のアップデートが発表されました

Microsoft Ignite 2018 でさまざまな発表がありましたが Microsoft Graph についてもアップデートがありました。詳細は Office 365 Blog で公開されています。

developer.microsoft.com

簡単にアップデートの内容を見ていきます。

Managed access to Microsoft Graph (preview)

Microsoft Graph に対する大規模なデータアクセスを行うようなアプリケーション (主に分析用を想定しているみたい) の場合に、セキュリティの問題が出てくるので、Azure Data Factory と Azure Managed Applications を使って管理されたアクセス (Microsoft Graph data connect) ができるようにしましょうというもの。Azure Data Factory と Azure Managed Applications が全然わからないのですが、いったん Microsoft Graph で取得できるデータを Blob にコピーしてアクセスさせるみたいですね。

Notifications (preview)

すべてのデバイス (Windows, iOS, Android) に通知を送るための API です。というか今まで通知 API はなかったんですね。

Dynamics is now in Microsoft Graph (preview)

Dynamics のエンドポイントが追加されました。これは恩恵を受ける人が多そうな感じがします。

Tools for IT pros & admins

PowerApps から Microsoft Graph を使うためのサンプルとテンプレートです。

Security & Identity

セキュリティまわりはよくわからないです…。

Intune

Intune の API がいろいろ増えていますよという話。

Microsoft Teams, Messages, Calendars, Files, and Folders

既存の API の拡張ですが大事なことが割とさらっと書いてあります。

Teams の新機能 タブ作成 API によりチームにタブを展開できる (preview)
通話とオンライン会議 API でボットが作成できる (preview)
SharePoint の新機能 ページ API によりページの管理ができる (preview)
リスト ビュー API によりビューの管理ができる (preview)
OneDrive の新機能 フォローしているコンテンツの管理ができる (preview)
ファイルの一括移動とコピーができる (preview)
Outlook の新機能 メッセージにカスタムヘッダーを追加できる (GA)
Mail Tips API によりメールの受信者情報の取得ができる (GA)
予定表の空き時間を取得できる (preview)

Tools & capabilities for developers (preview)

Microsooft Graph が OpenAPI (Swagger) に対応しました。これまでドキュメントを見なければならなかったので開発生産性が上がるかもしれません。

github.com

SharePoint Framework 1.6 がリリースされました

2018/09/05 に SharePoint Framework 1.6 がリリースされました。

developer.microsoft.com

大きなアップデートとしては、SharePoint Framework 1.4.1 で追加された、Microsoft Graph (MSGraphClient) および Azure Active Directory 認証で保護されたカスタム Web API (AadHttpClient) のサポートが GA (一般提供) になりました。MSGraphClient と AadHttpClient のいずれも @microsoft/sp-http に入っているようですね。
GraphHttpClient については過去の記事で紹介しています。

blog.karamem0.jp

PowerApps でパスワード マネージャーを作ってみた

パスワード管理に Enpass を使っていたのですが、ちょっと高機能すぎて使いこなせないのと、モバイルで使うときに有償になるので、PowerApps の勉強がてら自分でパスワード マネージャーを作ってみました。

データ ソース

OneDrive for Bussiness の Excel ファイルをデータ ソースにしました。本当は厳密にセキュリティを考えるならもうちょっと考えなければいけないのかもしれませんが、OneDrive for Bussiness がセキュアなので (うっかりファイルを公開していない限り) 問題ないとしています。Excel だと既定で 500 件までしか扱えないという問題もありますが、パスワードを 500 件も登録することもないので、こちらも大丈夫ですね。

一覧表示

テンプレートほぼそのままですがアイコンを上に置くとしんどいので下に移動しました。

アイテムの追加

セキュリティとして意味があるのかよくわかりませんが、第 2 認証を要求するサイトもあるので、パスワードは 2 つ入れられるようにしています。

アイテムの編集

最終更新日時は自動的に更新するようになっていますが、SubmitForm のあとに Patch を呼び出して現在時刻を突っ込むようにしました。

初期表示ではパスワードが見えませんが、ロック アイコンをクリックすることで、パスワードが見えるようになります。本当は、クリップボードにコピーするとか、テキストをすべて選択するとかしたいのですが、さすがに PowerApps の限界のようです。コピーに関しては PowerApps Community に Feedback がすでにあるようなので今後に期待したいと思います。

https://powerusers.microsoft.com/t5/PowerApps-Ideas/idi-p/32975

URL も Launch でリンクできるようにしたのですが、モバイルの場合、例えば Twitter だと、ブラウザが立ち上がるのではなく、アプリが立ち上がってしまいます。

パスワードの生成

パスワードを自動生成する機能もあります。さすがに PowerApps だけでは無理なので Flow でパスワード生成処理を実装しています。実装の詳細は @ さんにブログの情報を教えていただきました。さすが縄神様!ブログでは LogicFlow の中で長さを決めていますが、そこは PowerApps から渡すようにしています。

blogahf.blogspot.com

まとめ

簡単な業務アプリだったらモバイルの種類を問わずに簡単に開発できるのは便利だなと思いました。ちなみに調査も含めだいたい 1 日くらいで作れました。
しいて言えばできることとできないことの限界がもう少しわかりやすいといいんですけどね…。