"ソリューション開発" にカテゴリー登録されている6 投稿

[SharePoint 2013] JSLinkの「ダウンロード最小化戦略対応」

SharePoint 2013 からリストの表示に関するカスタマイズは、従来の SharePoint Designer と データビュー Webパーツを使った XSLTベースのカスタマイズ以外に、JSLink と呼ばれる JavaScript ベースのカスタマイズが可能になっています。

これを利用する際に、サイトのフィーチャーである「ダウンロード最小化戦略」対応を考慮する必要があります。以前の記事では、相性が悪いのでこのフィーチャーを非アクティブ化する方がよいという記載をしました。

[以前の記事] ダウンロード最小化戦略 (Minimal download Strategy)

しかし、RegisterModuleInit メソッドを利用することで、このフィーチャーにも対応が可能です。詳しくは下記 MSDN 記事に記載がありましたので、共有しておきます。

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

[関連情報]

9月以降に実施する、弊社オリジナル研修コースである「Microsoft SharePoint Server 2013 ソリューション開発基礎」も内容を若干改訂し、JSLink の基本的な利用方法についても演習を交えて解説します。

 


カスタム タイマージョブ展開時の注意事項

カスタム タイマージョブ開発を行う場合の、SharePoint 2010 および 2013 共通の注意事項について記載しておきます。

カスタム タイマージョブの登録は、サイト コレクションなどのフィーチャーの Activated イベントなどを使って行いますが、当該フィーチャーを非アクティブ化した後で再びアクティブ化しようすとるとエラーが発生してアクティブ化できなくなることがあります。

ULSログを確認すると、次のような「アクセスが拒否されました」というエラー情報のエントリーが確認できます。

2014-06-26 17-38-56

この事象については、マイクロソフト社の KB に情報が公開されていますので詳細は下記を確認してください。

SharePoint 2010 から導入された新しいセキュリティ機能の影響で、Microsoft.SharePoint.Administration 名前空間内の SPPersistedObject から派生したオブジェクトへのあらゆる変更はブロックされ、コンテンツを保持するWebアプリケーション側から構成データベースを更新することは許可されないようになっています。この新しい機能は、SPWebServie.RemoteAdministratorAccessDenied プロパティで制御されています。

そのため、こうしたエラーが発生した場合は、必要に応じてWindows PowerShell などを使って、このプロパティ値を false に変更し、IISReset を行います。

[SharePoint管理シェルの例]


#RemoteAdministratorAccessDenied プロパティを確認する
>$contentService=[Microsoft.SharePoint.Administration.SPWebService]::ContentService
>$contentService.RemoteAdministratorAccessDenied
#この機能をオフにする
>$contentService.RemoteAdministratorAccessDenied=$false
>$contentService.Update()
>IISRESET


[SharePoint 2013] Health Analyzer で検出される MissingSetupFile への対応

昨日の記事では、Health Analyzer で検出される「サーバー側の依存関係がありません」というエラー内の、MissingWebPart に対する対処方法の一つをご紹介しました。

今回は関連する内容としてWebパーツ開発時に起こりがちな「サーバー側の依存関係がありません」というエラー内に表示される MissingSetupFile への対応方法の一つをご紹介します。

この問題は次のように検出されます。

2014-06-12 12-34-09

ユーザーがWebパーツを利用するためには、サイト コレクション内のWebパーツギャラリーに *.webpart ファイルが必要であり、Visual Studio 2012 または 2013 の Office Developer Tools を使うとこのファイルを自動生成してくれます。しかし、ソリューションアンインストール時にこうした情報が削除されないことがあります。これにより、上記のメッセージが表示されます。どのサイトにこのファイルが残っているかを確認するには、これもSQL Serverにアクセスし、次のSQLクエリを実行します。

SELECT * FROM AllDocs WHERE SetupPath='セットアップファイルパス'

2014-06-12 12-33-40

SQLクエリの実行結果内の DirName をたどれば、目的のサイトのURLがわかります。このWebパーツギャラリーから*.webpart ファイルを手動で削除します。この時も必ずサイト コレクションのごみ箱から完全に削除するようにします。

[関連情報]

弊社オリジナルコースである「Microsoft SharePoint Server 2013 ソリューション開発基礎」にて、Webパーツ開発の基本手法をご案内しています。

 


[SharePoint 2013] Health Analyzer で検出される MissingWebPart への対応

サーバー全体管理サイトの [問題とソリューション確認] ページで、 Health Anaylzerが サーバー側の依存関係がありません というエラー情報を出すことがあります。特に、Visual Studio を使ったSharePoint ソリューション開発をしている環境などではよくあります。

2014-06-12 10-30-55

内容を確認すると次のようなメッセージが表示されます。

2014-06-12 11-39-35

この中に [MissingWebPart] というセクションがありますが、Visual Studio ではソリューションの取り消しを行っているものの、Webパーツを追加してテストしたページが残ったままになっている際などに、このメッセージが表示されます。しかし、肝心のどのページに配置したのかは、このメッセージからは推測できません。

解決方法としては、SQL サーバー上の当該コンテンツDBに対して次のようなSQLクエリを実行することです。これにより、どのページに配置していたかがわかります。

select d.DirName, d.LeafName, * from AllWebParts wp join AllDocs d on wp.tp_PageUrlID = d.Id where tp_WebPartTypeId = 'WebパーツクラスのID'

2014-06-12 11-57-21

なお、テストページの場合は削除してしまえば、このメッセージは表示されなくなりますが、削除は必ずサイト コレクションのごみ箱からの削除を行わないといけません。ページを削除後、上記のクエリを再度実行し、エントリーが表示されないことを確認します。

[参考]

http://social.technet.microsoft.com/Forums/sharepoint/ja-JP/484c138d-0ca4-486c-9602-8e4767878671/sharepoint-configuration-missingwebpart-webpart-class-xxx-is-referenced-6-times-in-the

 


Lync 2013 Silverlight アプリケーション開発時の注意

Lync 2013 ベースの Silverlight アプリケーション開発を行う際に localhost サーバー上では Lync コントロールが表示されるのに、それ以外のサイト上でホストすると正しく表示されません。

Lync 2013 から仕様が変更されており、Silverlight アプリケーションをホストするWebサイトを信頼するサイトとして登録するために、クライアント側のレジストリーを追加しないと、任意のWebサーバー上で Lync コントロールが表示されないようになっています(IEの信頼済みゾーンへの追加ではありません)。

レジストリに関する情報は下記のURLにある "Application trusted site list" に記載されています。

具体的には、まず、Lync 2013 クライアントが実行されているコンピュータに次のレジストリキーを追加します。たとえば、SharePointサイトのURLが https://sp2013-a.contoso.com である場合は次の通りです。

HKEY_CURRENT_USER\Software\Microsoft\Office\Lync\Security\Trusted Sites\sp2013-a.contoso.com

このキーに次の値を追加します。

  • HTTPSでアクセスする場合 : "https" = dword:1
  • HTTPでアクセスする場合 : "http" = dword:1

2014-06-06 16-26-38

こうしたレジストリ情報はActive Directory のグループポリシーで配布可能です。マイクロソフト社の安納さんが書かれている次の記事が参考になります(ちょっと古い記事ですが)。