カテゴリ「SharePoint 2010」の86件の投稿 Feed

2012年10月17日 (水)

SharePoint 2010 からSharePoint Web アプリケーションに認証モードが導入されました。

SharePoint Web アプリケーション作成時には、クラシック認証モードとクレームベース認証モードのいずれかを指定する必要があります。

SharePoint 2010 ではマイクロソフトの推奨はクレームベース認証モードではありますが、GUI (サーバー全体管理サイト)から作成する場合は既定値が クラッシック認証だったことや他のカスタム ソリューションとの関係もあり、実際にはクラシック認証モードにしているケースも多いようです。

SharePoint 2013では認証モードはクレームベース認証モードが主体であり、クラシック認証モードは基本的に使用しません。そうでないと Office Web Apps など、様々な機能が利用できません。 たとえば、SharePoint 2013 では OAuth 2.0 がサポートされていますが、このプロトコルを使うにはクレームベース認証モードになっていなければなりません。したがって、SharePoint 2013 で SharePoint Web アプリケーションをGUI から作成する場合、認証モードの選択画面がそもそもありません。最初からクレームベース認証モードです。

SharePoint 2013 の新規導入は別として、こうした観点から、今後既存環境をアップグレードをすることを視野に入れておく場合は、できるだけクレームベース認証にしておいた方がよいと言えます。特にカスタム ソリューションを構築しているのであればクレームベース認証モードで動作するよう十分に動作検証をし、アップグレードに備える必要があります。※ここで述べているのはあくまでも認証モードのことであり、認証方法ではありません。クレームベース認証モードでは、Windows 認証、フォームベース認証、SAMLトークンベース認証のいずれかを使用できます。

認証モードの確認

現在利用している SharePoint Web アプリケーションの認証モードを確認するには[サーバー全体管理]サイトから確認できます。ただし、切り替えは Windows PowerShell からしか行えません。そのため Windows PowerShellからの確認方法と認証モードの切り替え方法を整理しておくことは大切です。

設定を確認する

現在のSharePoint Web アプリケーションがクレームベース認証モードになっているかどうかは、次のコマンドを実行します。True になっていれば、クレームベース認証モードです。False の場合はクラシック認証モードです。

$webApp= Get-SPWebApplication http://sp2013 $webApp.UseClaimsAuthentication

SPWebApp-AuthMode

[SharePoint 2010 の場合] クレームベース認証モードに変更する (※クラシック認証にするには$false を設定する)

SharePoint 2013 に移行する前に先にSharePoint 2010上で認証モードを変更しておくには次のコマンドを実行します。

$webApp= Get-SPWebApplication http://sp2013 $webApp.UseClaimsAuthentication=$true; $webApp.Update()

[SharePoint 2013 の場合] クレームベース認証モードに変更する

SharePoint 2010 からの移行では、データベース アタッチを行います。先に SharePoint 2013 上でSharePoint Web アプリケーションを既定のクレームベース認証で作成したあと、SharePoint 2010 で利用していたコンテンツDBをアタッチします。その後、アタッチしたコンテンツDBがクラッシック認証モードとなっていた場合は、次のコマンドを実行します。

Convert-SPWebApplication -Identity "http://sp2013" -To Claims -Retain Permissions

詳細については下記の記事を参照してください。

2012年9月28日 (金)

Visual Studio 2010 によるSharePoint Web パーツ開発といったソリューション開発では SharePoint  サイトをホストする IIS サイト内の Web.Config を書き換える必要があります。Web.Config は SPWebCOnfigModification クラスを利用することで、コードから編集できます。通常はフィーチャー レシーバーを用いて、フィーチャーがアクティブ化された際に実行します。

 このオブジェクトはSPWebApplication オブジェクトまたは SPWebService オブジェクトのWebConfigModifications プロパティ経由で取得します。MSDN のサンプルコードを例を下記に転機します。

SPWebService myService = SPWebService.ContentService; SPWebConfigModification myModification = new SPWebConfigModification(); myModification.Path = "configuration/SharePoint/SafeControls"; myModification.Name = "SafeControl[@Assembly='MyCustomAssembly'][@Namespace='MyCustomNamespace'][@TypeName='*'][@Safe='True']"; myModification.Sequence = 0; myModification.Owner = WebConfigModificationFeatureReceiver.OwnerId; myModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode; myModification.Value = ""; myService.WebConfigModifications.Add(myModification); myService.Update(); myService.ApplyWebConfigModifications();

SPWebConfigModification オブジェクトに指定するプロパティは次の通りです。

  • Path プロパティ … 編集対象となるWeb.Config 内の親ノードを指定します。この例では SafeControlエントリーを追加する親ノードを示しています。
  • Type プロパティ … 追加するのが、子ノードなのか(EnsureChildNode)、属性なのか(EnsureAttribute)、セクションなのか(EnsureSection)を指定します。SafeControlsノードに追加したいのは子ノードなので、この例ではEnsureChildNode を指定しています。
  • Name プロパティ … Type で指定しているのが EnsureChildNode の場合はXPathで指定する必要があります。この例では、"SafeContorl[@Assembly=...." は対象となる子ノードを指定しています。
  • Value プロパティ …  Type で指定しているのが EnsureChildNode の場合は、指定した親ノードに追加する子ノードを表すXML文字列を指定します。TypeがEnsureSection の場合はセクション名を、EnsureAttributeの場合は属性に設定したい値を指定します。
  • Ownerプロパティ … どのコードで追加した変更内容なのかを追跡するための目印として使用します。
  • Sequrence プロパティ…変更内容を示す連番です。0から65536までを指定します。同じノードまたは同じ属性の型を編集する場合にのみ使用します。重複して適用される場合は、低い値の番号のものが先に適用されます。

この内容を最終的にはWebConfigModificationsコレクションオブジェクトに追加し、Update()メソッドとApplyWebConfigModifications()を呼び出して適用します。

なお、NameプロパティやValueプロパティには.NETアセンブリのFullNameと名前空間を指定する必要がありますが、コードから取得する場合は次のように記述することもできます。

... string assemblyValue = typeof(<クラス名>).Assembly.FullName; //アセンブリの完全名 string namespaceValue = typeof(<クラス名>).Namespace; //アセンブリの名前空間名 ...

上記のコードを実際に展開する際にたとえば Pathプロパティを間違ってしまっている場合には次のようなエラーメッセージが表示されます。

  SPWebConfigModificationError

エラーに従ってPathを正しく設定しなおして、再度このソリューションを展開しますが、場合よっては同じエラーが表示され Web.Config が編集されません。

WebConfigModificationsコレクションオブジェクトには、Addメソッドが呼ばれるたびにSPWebConfigModificationオブジェクトが追加されていきます。自動的に削除されることはありません。そのため、不正なPathを記載したままの状態でオブジェクトが追加されてしまっているため、何度ソースコードを修正してもエラーが修正されないということが起こりえます。

そのため、適切なタイミングでオブジェクトを削除するコードを実装しておく必要があります。削除時に活躍するのが Owner プロパティです。特定のコードから追加したエントリーのみを削除するために、Ownerプロパティで判定するとよいです。

... SPWebService contentService = SPWebService.ContentService; List modifications = new List(); foreach (SPWebConfigModification mod in contentService.WebConfigModifications) { if (mod.Owner == owner) { modifications.Add(mod); } } foreach (SPWebConfigModification delmod in modifications) { contentService.WebConfigModifications.Remove(delmod); } contentService.Update(); ...

SPWebConfigModification の利用については次のブログ記事が参考になりますので、一度目を通しておくと良いですよ。

http://didierdanse.net/blogs/dev_en/archive/2009/09/11/sharepoint-how-to-use-spwebconfigmodification-class.aspx

2012年9月27日 (木)

 半年ほど前にリリースした弊社オリジナル コース「OH-12-205 JavaScript を使ったサイト カスタマイズ入門」の内容をアップデートしました。この研修では SharePoint Designer 2010 のみのカスタマイズから一歩進んだカスタマイズ方法を習得できます。

コンテンツ エディタWebパーツをうまく利用し、ユーザーに利用しやすい簡単操作画面を提供するための基本を学べます。たとえば、以前のブログ記事でご紹介したクォータ状況情報取得コードの解説するだけでなく、サイト作成、リスト作成のパーツ作成や、リスト内の項目の表示非表示を制御したり、他のリストから選択肢の項目を取得する方法、フィールドの文字数カウントを表示する機能などの作成方法を体系立てて1日で学習できます。

SharePoint 2013 でも JavaScript によるカスタマイズは機能強化されている部分であるため、人材育成を考え、まずはSharePoint 2010をベースに基本機能は学習しておきたいところです。

ご参考まで。

[サイト作成]

ECMA-SiteCreation

[リスト作成]
ECMA-CreateList

[文字数カウント] 

ECMA-Count

2012年9月25日 (火)

SharePoint Designer 2010 で利用するアクションは、Visual Studio 2010 でカスタム アクションとして開発できます。ざっと流れを書くと次の通りです。

1. Worflow Activity クラスの継承クラスを作成する
2. クラス内には、必要に応じて依存プロパティ(dependency property) を実装する
3. Execute メソッドをオーバーライドする
4. ワークフロー アクションを定義するスキーマファイル (*.actions) を作成する
5. フィーチャー レシーバーを実装し、フィーチャーがアクティブ化されたら Web.Config を書き換える
6. ソリューションを展開する

ソリューション展開後に、SharePoint Designer 2010 でカスタム アクションを利用してワークフローロジックを生成し発行した際に次のエラーメッセージが表示されることがあります。

「ワークフローのコンパイル中にエラーが発生しました。ワークフロー ファイルは保存されましたが、実行することはできません。 ---   "クラス名" はアクセスできない保護レベルになっています。」

SPD-CustomAction-Error

このメッセージが現れたら、1 で定義したWorkflow Activity の継承クラスが public となっているかを確認しましょう。public を指定し忘れると、上記のようなエラーが発生します。

-------------------------------------------------------

オフィスアイ株式会社 関連研修
Microsoft SharePoint Server 2010 ワークフロー開発基礎Ⅱ

2012年9月20日 (木)

CEWP(コンテンツ エディタ Web パーツ) を使って、パーツを配置したページのサイド リンクバー(Quick Launchともいう)を非表示にするには、スタイルシートを記述するのが簡単です。


手順は次のとおりです(この例ではWikiページに配置します)。

  1. 任意のページにCEWPを追加します。
  2. [Webパーツの編集]メニューをクリックします。
    CEWP-01
  3. Webパーツの中にカーソルを挿入します。
    CEWP-02
  4. リボンメニューから[HTMLで編集]をクリックします。
    CEWP-03
  5. スタイルシートを記述し、[OK]をクリックします。
    CEWP-04
  6. Webパーツのツールパーツ内で、枠の表示を「なし」に変更し、[OK]をクリックします。
    CEWP-05
  7. リボンメニューから[編集を保存する]をクリックします。
    CEWP-07

  CEWP-06