Category: SharePoint

SharePoint Add-ins 2013 (オンプレミス; on-premise) にTenant Scopeでリリース時にエラーになる

はじめに SharePoint Add-insにテナント(Tenant) Scope で、権限の追加時に、以下のエラーが出る場合があります。 英語 Sorry, only tenant administrators can add or give access to this app 日本語 申し訳ございません。このアプリへのアクセス許可を追加または付与できるのは、テナント管理者のみです。 その場合には、ファーム管理者に追加する必要があります。 詳細 例)AppManufest に テナント(tenant)に[Full Control]を設定します デバック実行すると以下のメッセージが表示されます。 「申し訳ございません。このアプリへのアクセス許可を追加または付与できるのは、テナント管理者のみです。」 [SharePoint全体管理]の[セキュリティ]をクリックする [Farm Administratore(ファーム管理者)]にVisual Studioを実行しているユーザを追加します。 IISをリセットする [PowerShell]を[管理者として実行する] [Iisreset]コマンドを入力する 再度[Visual Studio]で[デバック実行]する Farm Administratorの権限が付与されているので、メッセージが以下に代わります 「すべてのサイトコレクションのフルコントロールを許可します。」 結果、以下のように SharePoint Provider-hosted からSharePointにアクセスできています 参考 Apps using tenant scope permissions in a local site      

SharePoint Add-ins 2013 (オンプレミス; on-premise) とVisual StuidoでのProvider-hosted アプリデバックの環境(enviroment)

はじめに [SharePoint2013] on-premiseで[SharePoint Add-ins]を動作させるためには 「SharePoint-hosted」か「high-trust な Provider-hosted(高信頼アプリ)」のどちらかになります。 「SharePoint-hosted」の場合は hostedされるURLが別名になります(実際にはSharePointです)ので、DNSやSharePointの「アプリ URL の構成」をする必要があります。 はまる、App for SharePoint 2013 (オンプレミス; on-premises) とVisual Stuidoでのsharepoint hoted apps アプリデバックの環境(enviroment) 「high-trust な Provider-hosted(高信頼アプリ)」の場合は [自己証明書 or 商用証明書]を使用してProvider-hosted(WebSite)を信頼済み(SecurityTokenService)にしなければいけません。信頼済みにしないとエラーになります。 詳細(high-trust な Provider-hosted(高信頼アプリ)) 自己署名入り証明書の作成する。 証明書のフレンドリ名を指定する 証明書をエクスポートする ※pfx :後でVisual Studioにpfx(秘密キー入り証明書)を読み込ませます 例) 場所  [C:\Certs\HighTrustSampleCert.pfx] password [password] .cer(秘密キーのない証明書)も作ります。 ※.cer :後で、[SharePoint Security Token Service]に秘密キーのない証明書を読み込ませます 作成した証明書をダブルクリック 詳細タブのファイルコピーをクリックする 秘密キーをエクスポートしません。 保存します。 例) 場所  [C:\Certs\HighTrustSampleCert.cer] 結果以下のようになります。 SharePoint Security Token Service の構成を行います。 注意:specificIssuerId はGUIDを自分で生成する必要があります。 以下を[SharePoint2013 管理シェル]を管理者から起動して実行します。 例 $publicCertPath = “C:\Certs\HighTrustSampleCert.cer” $certificate = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($publicCertPath) New-SPTrustedRootAuthority -Name “HighTrustSampleCert” -Certificate $certificate $realm = Get-SPAuthenticationRealm $specificIssuerId = “11111111-1111-1111-1111-111111111111” $fullIssuerIdentifier = $specificIssuerId + ‘@’ + $realm New-SPTrustedSecurityTokenIssuer -Name “High Trust Sample Cert” -Certificate $certificate -RegisteredIssuerName $fullIssuerIdentifier –IsTrustBroker iisreset $serviceConfig = Get-SPSecurityTokenServiceConfig $serviceConfig.AllowOAuthOverHttp = $true $serviceConfig.Update() […]

Tokyo ComCamp 2016 powered by MVPs で登壇しました。

予約ページ  Tokyo ComCamp 2016 powered by MVPs – connpass 株式会社gloopsさんにて、Office365 の開発について登壇を行いました。 Office365の開発は、ユーザ数が増えて、開発者も増えてきました。 機能が多いので、開発手法についてデモを交えながら、説明しました。 詳しい方もいたので、Office365について知識が深まりました。     スライド  

SharePoint AccessToken/RefreshToken

この記事は書きかけです。 いくつかSharePoint Add-insを作成していて、気が付いた点をメモします。 SharePoint AccessToken/RefreshToken いくつかポイントがあるのですが、わかる範囲で記載しておきます。 Access Tokenの種類 参考 Inside SharePoint 2013 OAuth Context Tokens ACS 00000001-0000-0000-c000-000000000000 Exchange 00000002-0000-0ff1-ce00-000000000000 SharePoint 00000003-0000-0ff1-ce00-000000000000 Lync 00000004-0000-0ff1-ce00-000000000000 Workflow 00000005-0000-0000-c000-000000000000   AccessTokenの有効期限は1時間 実際にテストをする約1時間(2015/08/10時点)でした。 AccessTokenが期限切れになりましたら、RefreshToken(おそらく有効期限が長いはず)でAccessTokenを再取得します。   参考 松崎さんBlog Native Application (Mobile App) で Azure Active Directory に Login するプログラミング (OAuth 紹介) また、Access Token の有効期限は、約 1 時間です。Access Token が期限切れになった場合にも、上記の通り Refresh Token を使って Access Token を取得しなおします。 補足 : refresh token は最大 14 日使用可能で、再取得することで、さらに 14 日間使用できます。(最大で 90 日まで使用できます。)   Micrsosft Sample Office 365 API Tools を使用したプログラミング Access Token と Refresh Token アプリケーションが Exchange のサービスに接続する際、内部で Access Token と呼ばれる文字列が使用されています。この Access Token を使用して、アプリケーションは、その他の処理も継続して実行できます。 また、Access Token には有効期限があり、1 時間で使用できなくなりますが、この場合は Refresh Token と呼ばれるものを使用して、再度、Access Token を取り直します。 上記の AcquireTokenSilentAsync では、こうした面倒なトークンの扱いも自動化してくれています。 また、Access Token や Refresh Token をキャッシュしてアプリケーション終了後もこの値を保持することで、同じアカウント情報で継続して利用することが可能です。(上記のサンプルでは、このキャッシュの処理はおこなっていません。)   野呂清二

Making SharePoint Add-ins + Azure Session

こんにちは野呂です。 SharePoint Add-insのSession(セッション)管理でクラスの一部でシリアル化がうまく出来ない問題がありますので、解決策を一番下にリンクしました。 解説 SharePoint Add-ins でアプリを作成してリリースすると、そのままテンプレートを使用すると下記のエラーがでます。 セッション状態をシリアル化できません。’StateServer’ および ‘SQLServer’ モードでは、ASP.NET はセッション状態オブジェクトをシリアル化します。その結果、シリアル化できないオブジェクトまたは MarshalByRef オブジェクトは許可されません。’Custom’ モードのカスタム セッション状態ストアによって類似したシリアル化が実行される場合、同一の制限が適用されます   Web.config のSession は、なにも記述されていないので、”InProc” になっています。 なので、”Azure Redis Cache” 、”SQL Server”, “ASP.NET Universal Providers and Session State”等を使用してセッションを保持する仕組みを設定する必要があります。 しかしながら、SharePoint のToken/RefreshToken 管理クラスである。 いくつかのAccessToken管理クラス(SharePointContext他)は標準ではSeriazaibleではありませんので、InProc以外のセッションのSQL Azure, Redis Cache、等はクラスをシリアル化しなければならないです。 しかしながら、いくつかのクラスはライブラリ(dll)の中に定義してありシリアル化の定義ができないので、プログラムを別途作る必要があります。 MSDNにサンプルがありました。私も、実際に Universal Providers でテストしてOKでした。 参考までにどうぞ Making SharePoint Apps Scale with Azure Redis Cache 野呂清二

SharePoint 一覧ツール to EXCEL

SharePoint でサイトコレクションから、全てのサブサイトとリストをExcelに出力するツールです。 WSS3, MOSS2007, 2010, 2013のオンプレミスにて出力できます。 ・※Online(Office365)については開発テスト中 ・※Form Based Authentication(フォーム認証)については開発テスト中 イメージ   出力されるExcelの項目 項目名 意味 WebSite サブサイト WebSiteCount サブサイトの数 ListCount リストの数 Title リストのタイトル BaseType リストのタイプ ServerTemplate リストのテンプレート ItemCount リストのアイテム数 ID リストのID Description リストの詳細 DocTemplateUrl DefaultViewUrl MobileDefaultViewUrl FeatureId Created リストの作成日 LastDeleted Version

SharePoint2013  開発メモ

前回はSharePoint2013アプリの登録に関して記載いたしましたが 今回は開発にあたり、はまりそうな所を記載していきます。 ファイルの情報を取得するまでの流れ SharePoint2013は サイト(サブサイト含む) リスト(ドキュメント・マイクロフィードなど) リストアイテム(フォルダ・ファイルなど) のような感じで情報が管理されており、ファイル等のリストアイテムを取得したい場合は 1から順番に情報を取得する必要があります。 それぞれ対応するクラスは下記になります。 サイト WebCollectionクラス リスト ListCollectionクラス リストアイテム ListItemCollectionクラス Exceed One Explorer ※SharePointのアイコンの階層がサイト、「サイトのページ」などの階層がリスト、その他はリストアイテムから取得できます。   リストアイテムを見ないとファイルの場所がわからない? リストには階層情報を保持していないため、ファイルの場所が分かりません。 リストからファイルがある場所を知りたい場合は以下のようなルールになっている模様なので、参考にしていただければと思います。 foreach(List list in (ListCollection)){ if(!String.IsNullOrEmpty(list.DocumentTemplateUrl)){ /* list.DocumentTemplateUrlを「/」で分解してForms階層の上の階層にファイルがある */ } if(list.EntityTypeName.IndexOf(“List”)!=-1){ /* エンティティ名の後ろにListが含まれているときは Lists/(Listを除去したエンティティ名)/ にファイルがある。 list.EntityTypeNameは、スペースなどの文字を「_x0020_」で保持しているため、必要に応じて変換する。*/ } } SharePoint上にあるOfficeファイルをOfficeOnlineで編集させたい Office2013がインストールされているWindowsPCであれば、Office2013用ファイルがあるURLにアクセスした際Office2013がSharePoint2013と通信して作業することが可能ですが、 Web上で編集したい場合OfficeOnlineで読み込めるものであれば、OfficeファイルURLの後ろに ?d=w(ハイフンを抜いたファイルの固有ID)にアクセスすると、OfficeOnlineが起動しWeb上で操作ができます。   アプリを起動して放置していたらJSON通信を行うアプリでエラーが出る SharePointContextFilterを使用している場合はデフォルトでセッションが20分で切れ、コンテキストトークン値がセッションから破棄されます。 セッションが切れた場合、アクセストークン及びリフレッシュトークンが有効期間内でもエラーになりますので、 あらかじめ下記のようにセッションの有効期限を設定します。 Web.configのsystem.web項目に <sessionState timeout=”(有効期限/分)”/> を追加すると解決します。 ※C#でセッション有効時間を確認したい場合、HttpContextBase.Session.Timeoutで確認できます。 ※Azure websitesでは、sessionStateがInProcモードの場合、指定した時間前でもセッションが破棄されるケースがありますので注意してください。

SharePoint2013+VisualStudio2013 配置手順 ‘IIS アプリケーション プールのリサイクル’ でエラー

SharePoint2013+VisualStudio2013(Deploy)配置手順 ‘IIS アプリケーション プールのリサイクル’ でエラーが出力される場合の対処方法 1.Visual Studio 2013で以下のメッセージが表示される。 配置手順 ‘IIS アプリケーション プールのリサイクル’ でエラーが発生しました: ローカル SharePoint サーバーを使用できません。サーバーが実行されており、SharePoint ファームに接続されていることを確認してください。 2. また、SharePoint管理シェル(PowerShell)起動時に、以下のメッセージが表示される。 ローカルファームにアクセスできません。Feature DependencyIDが指定されたコマンドレットは登録されていません 対処方法 現在のログインユーザでデータベースに権限を追加する。 例 SQL Serverのsaもしくは管理者権限のあるWindowsログインユーザにてSQL Server Manegement Studioにログインする。 SQL ServerにVisual Studio(もしくはPowerShell)を実行したいWindowsログインユーザを追加する。 追加したWindowsログインユーザに以下のサーバロールを追加する。 dbcreator public securityadmin sysadmin SharePoint_Config 等のDatabaseにアクセスできるようになり、それによって表題のエラーも解消されます。

プロバイダー向けのホスト型のSharePoint2013SharePointアプリ登録方法

SharePoint2013とMicrosoft Azureを連携させたアプリを開発するにあたり、連携部分において嵌りやすいので、 SharePointアプリをサイトコンテンツに設定するまでの方法をまとめてみました。 手順 サイトコレクションを作成 作成したサイトコレクションで新しいアプリの登録 Microsoft Azureの設定 VisualStudio2013 プロジェクトの設定 WebのパッケージをMicrosoft Azureに配置 SharePoint2013用アプリの発行 1.サイトコレクションを作成 SharePoint2013 /Office365(SP2013)でサイトコレクションを作成する。 の「Office365(SharePoint2013)の場合」の方法で作成します。 2.作成したサイトコレクションで新しいアプリの登録 SharePointアプリをVisualStudio2013上で起動したときはクライアントIdが固定ではないため、 固定のクライアントIDとクライアントシークレットを生成する必要がある。 https://(サイトコレクションのアドレス)/_layouts/15/AppRegNew.aspx にアクセスすると次の画面が表示される。 アプリの種類 Webサーバーで実行中のアプリ クライアントID 「生成」ボタンを押下すると自動で値が入る クライアントシークレット 「生成」ボタンを押下すると自動で値が入る タイトル 登録するアプリケーションのタイトル アプリドメイン アプリを配置するドメイン(Webのパッケージを配置するドメイン) リダイレクト先のURI SharePointから呼び出すURI(Webのパッケージを配置している場所を指定。HTTPS必須) 「作成」ボタンを押下すると、正常に作成された場合は作成された情報が画面に表示される。 作成完了の画面は一度きりの表示で後で確認できないため、記載されている情報は必ずメモを取ること。 3.Microsoft Azureの設定 アプリ登録で生成したクライアントIDとクライアントシークレットの登録を行う。 この画面からタブの「構成」を押下して「アプリケーション設定」項目までスクロールする。 初期ではWEBSITE_NODE_DEFAULT_VERSIONだけ入っているので、 ClientIdと、ClientSecretの2行を追加し、 アプリの登録で作成したクライアントIDとクライアントシークレットをそれぞれ設定する。 設定後は画面下にある「保存」ボタンを押下し、Microsoft Azureに反映させる。 4.VisualStudio2013プロジェクトの設定 SharePoint側、Web側の設定をそれぞれ行う。 AppManifest.xml <Properties> <Title>TITLE</Title> <StartPage>https://localhost:44302/?{StandardTokens}</StartPage> </Properties> <AppPrincipal> <RemoteWebApplication ClientId=”*” /> </AppPrincipal> StartPageの「https://localhost:44302/」をアプリ登録で指定したリダイレクト先URIに変更する。 次にClientIdにアプリの登録で作成したクライアントIDを登録する。  Web.config <appSettings> <add key=”webpages:Version” value=”3.0.0.0″ /> <add key=”webpages:Enabled” value=”false” /> <add key=”ClientValidationEnabled” value=”true” /> <add key=”UnobtrusiveJavaScriptEnabled” value=”true” /> <add key=”ClientId” value=”********-****-****-****-************” /> <add key=”ClientSecret” value=”********+**********/********************+**=” /> </appSettings> ClientIdと、ClientSecretの欄に アプリの登録で作成したクライアントIDとクライアントシークレットをそれぞれ設定する。   5.WebのパッケージをMicrosoft Azureに配置 VisualStudio2013のソリューションエクスプローラWebアイコンを右クリックし、 ポップアップメニューから「発行」を選んだ後 配置先を適切に指定し、画面右下にある「発行」ボタンを押下する。 6.SharePoint2013用アプリの発行 VisualStudio 2013のソリューションエクスプローラのSharePointアイコンをクリックし、 プロパティのWebプロジェクトを「なし」に設定する。 VisualStudio2013のソリューションエクスプローラのSharePointアイコンを右クリックし、ポップアップメニューから「発行」を選んだ後 「アプリをパッケージ化する」ボタンを押下する。押下すると生成先のフォルダが表示される。 生成された拡張子がappのファイルをSharePoint用アプリにアップロードを行う。 正常に登録されるとアプリがサイトコンテンツに追加される。 追加されたアプリ(赤丸)をクリックし、リダイレクト先のURIへ遷移してエラーが出なければ完了。

How to get Tenant SiteCollection on SharePoint online(Office365)

SharePointOnline(Office365) の テナントレベルのサイトコレクション等をアプリで操作する方法 ポイントはこんな感じ 詳細   プログラムピックアップ using Microsoft.Online.SharePoint.TenantAdministration; using Microsoft.Online.SharePoint.TenantManagement;   //Open Tenant Tenant tenant = new Tenant(adminContext); SPOSitePropertiesEnumerable siteProp = tenant.GetSiteProperties(0, true); adminContext.Load(siteProp); adminContext.ExecuteQuery(); //– Site Collection foreach (SiteProperties sp in siteProp) { Uri spUri = new Uri(sp.Url); }