2014年5月

2014年5月30日 (金)

Windows PowerShell を使ってコンテンツ データベースを取得する場合、Get-SPContentDatabase を使います。

[参考] http://technet.microsoft.com/ja-jp/library/ff607828(v=office.15).aspx

ですが、このコマンドを使って取得できるのは、コンテンツ データベースのうち "準備完了(開始済み)" となっているデータベースのみです。オフライン (停止中) となっている場合は取得できないので注意する必要があります。

データベースの状態は [サーバー全体管理サイト]>[アプリケーション構成の管理]>[コンテンツ データベースの管理]から確認できます。データベース一覧からは、データベースの状態は "開始済み" または "停止中" となっていますが、状態を変更する際は、開始済み→「準備完了」、停止中→「オフライン」と指定します。

2014-05-30 12-48-48

ちなみに、オフライン となっているコンテンツ データベースは、誤解されがちですが、ユーザーが利用できないようロックされているわけではありません。そのコンテンツ データベースに対して新しくサイト コレクションを作成できないように制限している状態になっているだけです。オフラインになっていても、そのデータベースに存在するサイト コレクションは引き続き利用可能です。

[関連情報]

  • 「ひと目でわかる SharePoint Server 2013」の P525~ P527 にも関連情報を記載しています。
  • Windows PowerShellの基本的な使い方、コンテンツ データベースやサイト コレクションに関する基本的なアーキテクチャーについての説明は、弊社「SharePoint Server 2013 と周辺技術基礎」研修でも扱っております。
2014年5月28日 (水)

SharePoint 2013 では各サイトに対して Minimal Download Strategy (MDS) 機能が利用できるようになっています。この機能はに日本語では「ダウンロード最小化戦略」という名前で、サイトの機能として実装されています。チーム サイトのテンプレートからサイトを作成すると、既定でこの機能がアクティブ化されます(※サイト テンプレートによります)。

2014-05-28 14-25-03

MDS により、サイトにアクセスする際には次のルールの URL にリダイレクトされるようになります。

  • <サイトのURL>/_layouts/15/start.aspx

このURLの start.aspx ページに次に表示しようとしているページの情報が渡されて現在のページとの差分が非同期に更新される仕組みとなっており、これによってページの表示をスムーズにしようという試みです。動作イメージとしては、違いのある部分のみを送信するという動画配信と似ています。

たとえば、ホームページにアクセスすると "<サイトのURL>/_layouts/15/start.aspx#/SitePages/ホーム.aspx" というように # の後に表示するページの相対パスが渡されます。

ただし、この機能は SharePoint 2013 から導入されこなれていないこともあるのか、様々な不具合をもたらしています。たとえば、次のような問題があります。

  • リボン メニューの Outlook 連携などのメニューがグレーアウトしてしまい使えない
  • JavaScript を使ったUIカスタマイズの新手法である "JSLink" を利用する場合に、うまくこれが機能しないことがある

ということで、あまりこの機能をアクティブ化しておくことは現状お勧めしません。この機能を非アクティブ化したからと言って、ユーザーに対して大きなデメリットはありません(この機能を無効にしても、ページの表示速度が劇的に遅くなるわけではありません)。弊社の研修環境もサイト作成時には非アクティブ化しています。

なお、この機能は、発行ページに対しては適用されません。そのため、発行ポータル サイト テンプレートから作成したサイトなどではほとんどのページがこの機能がアクティブ化されていても事実上使用されません。

 

2014年5月27日 (火)

SharePoint 2013 ワークフローを SharePoint Designer で作成する際、ワークフローを実行するユーザー権限に依存しない処理を行いたい場合はアプリステップ内で処理します。

SharePoint 2010 まではこのような場合に、代理ステップを使用していました。代理ステップ内の処理はワークフローの作成者の権限で動作するというものでした。そのため、ワークフローの作成者のアカウントをサイト コレクションから削除するとワークフローが動作しなくなることもあります。また、代理ステップ内で処理すると当該アイテムの更新者がワークフロー作成者名になってしまいます。

しかし、SharePoint 2013 ワークフローで新たに導入されたアプリステップは SharePoint 内の特殊なアカウント(ID)を使って動作するためこうした心配はなくなっています。

アプリステップ内の処理権限

既定ではアプリステップ内の処理は、サイト内のコンテンツに対する読み取りおよび書き込み権限が付与されます。投稿アクセス許可レベルが付与されているアカウントが内部的に使われているとイメージするとよいでしょう。したがって、アプリステップ内からサブサイトを作成したり、リストやライブラリを作成することはできません。しかし、これは既定の状態であり、アプリステップの権限は昇格できます。

昇格の方法について説明する前に、データベースを含め順を追って詳細を確認してみましょう。

アプリステップを利用する前の事前準備

アプリステップを利用するにはサイトの拡張機能の一つである「ワークフローでアプリの権限を使える」をアクティブ化する必要があります。

AppStep01

このフィーチャーのアクティブ化後にサイトの設定ページを確認すると、[ユーザーと権限]セクションに サイト アプリの権限 というメニューが利用できるようになります。

2014-05-09 18-34-36

このリンクをクリックすると下記の画面が表示されます。この画面上の ワークフロー という名前のアプリ ID がアプリステップで使用されるものです。

2014-05-09 18-36-17

このアプリIDはコンテンツ データベースの dbo.AppPrincipals テーブルに格納されています。下記の図は、先頭の SiteId 列が サイト コレクションを一意に表す GUID であり、Name列に アプリ IDが表示されています。私の環境では ID が 2 となっています。

2014-05-27 13-24-48

コンテンツ データベースにはアプリIDに関するテーブルとしてもう一つ dbo.AppPrincipalPerms テーブルがあります。このテーブルにアプリIDに付与されている権限が格納されています。下記の図では、同じサイト コレクションの SiteId に対して Id 2 となっているレコードが 2件あることがわかります。このテーブルの Perm 列がアクセス権限を表す列です。Perm は 2…Read, 3…Write, 4…Manage, 5… FullControl というように対応しており、既定値は 3 です。

2014-05-27 13-33-21

2つのレコードがあるのは、アプリID の権限には、サイト レベルとサイト コレクションレベルがあるためです。WebId 列が 0 になっているのがサイト コレクションで使用される権限です。上の図ではサイト コレクションおよびサイトでともに Perm が 3 になっています(既定値)。

権限を変更する

ワークフロー アプリID の権限を変更する方法は次の2つです。

  • Windows PowerShell を使用して変更する
  • Webブラウザーから変更する

Windows PowerShell から変更する場合は、次のようなスクリプトを使用します。


Add-PSSnapin Microsoft.SharePoint.PowerShell
$url = "http://sp2013-a/sites/wfpractice" #目的のサイトのURL
$web=Get-SPWeb $url #-nameidentifierは ワークフローのアプリID
$AppID="bbe8037e-8b2d-4cb0-b052-3cc6c05edf09@94723cbc-836b..." #IDが長いので略します
$appworkflow=Get-SPAppPrincipal -site $url -nameidentifier $AppID
#***スコープ : サイト *****
Set-SPAppPrincipalPermission -AppPrincipal $appworkflow -Site $web -Right Write -scope Site
#***スコープ : サイト コレクション*****
Set-SPAppPrincipalPermission -AppPrincipal $appworkflow -Site $web -Right Write  -Scope SiteCollection

たとえば、上記のスクリプトを使ってサイト コレクション レベルの権限をフル コントロールにするには次のように記述します。


Set-SPAppPrincipalPermission -AppPrincipal $appworkflow -Site $web -Right FullContro -Scope SiteCollection

このスクリプトを実行するとdbo.AppPrincipalPerms テーブルのレコードが変化し、Perm が 5 になります。

2014-05-27 13-45-40

Web ブラザーから変更する場合は、まず、SharePoint サイトの「サイト アプリの権限」ページからアプリIDの "|" より後ろから "@" までの ID をコピーしておきます。

2014-05-27 13-48-33

続いて、次のURLにアクセスします (※下記は https でアクセスしていますが、SSLを使用していない場合は http でアクセスします)。

  • https://サイトのURL/_layouts/15/appinv.aspx

ページが表示されたら、先ほどコピーしたアプリIDを貼り付け [参照] ボタンをクリックすると、タイトルおよびアプリドメイン、リダイレクト先のURLが自動的に表示されます。

2014-05-27 13-56-18
 

権限の要求 XML フィールドに変更したい権限を記述します。たとえば、サイト コレクション レベルでフル コントロール権限を割り当てたい場合は、次のように記載します。





2014-05-27 14-39-52

最後に[作成]ボタンをクリックすると、次の画面が表示されます。

2014-05-27 14-41-20

[信頼する]ボタンをクリックします。以上で設定は完了です。

※既定の設定に戻す場合は権限の要求 XML フィールドに次のように記載します(Rightの値を Write に書き換える)。





こうした処理によって、ワークフロー内でサイト コレクションの管理者でないとアクセスできない情報へのアクセス、サブサイト作成、リスト作成などが可能になります。なお、サブサイト作成やリスト作成は REST サービスを使います。

詳しくは弊社のオリジナル コースである 「Microsoft SharePoint Server 2013 ワークフロー開発実践演習」 研修で扱っていますので、こちらも併せてご利用ください。


 

 

2014年5月16日 (金)

Lync Server 2013 をオンプレミス環境で構築する際の備忘録です。

Lync Server (Standard Editon もしくは Front End Server) を構築し、しばらくすると Register サービスが 開始の保留中 となり(UserServerも同様)、一向に開始されなくなることがあります。

Lync2013-01

一つの原因として、データベースのインストールが正常に行われていないことが挙げられます。この場合は、トポロジー ビルダーを使って、改めてデータベースのインストールを行います ([操作]>[データベースのインストール])。

Lync2013-03