個人用サイトのリンクとお気に入り、タグのアイコンを消す

SharePoint2010のページ右上には、デフォルトで個人用サイトへアクセスするためのリンクと、お気に入り及びタグのアイコンが表示されています。 お気に入りとタグのアイコン personal1 個人用サイトを作成&参照するためのリンク personal2 これらのリンクとアイコンを削除する方法は以下の通りとなります。 1.プロファイルサービスの管理ページへ移動サーバーの全体管理サイトへアクセスし、[サービスアプリケーションの管理]→[User Profile Service アプリケーション]をクリック。 [プロファイルサービスの管理]ページを開きます。 personal3 2.User Profile Service アプリケーションの権限ページを開く[プロファイルサービスの管理]ページにて、[ひと]セクションの[ユーザー権限の管理]をクリック。 [User Profile Service アプリケーションの権限]ページを開きます。 3.権限を編集[User Profile Service アプリケーションの権限]ページ中段のリストボックスから、リンクとアイコンを消したいユーザーを選択します。 デフォルトでは、ActiveDirectoryで認証されたユーザーすべてを指す「すべての認証されたユーザー」がリストアップされています。 リストアップされたユーザーを一つ選択し、下段の権限一覧のチェックをオン/オフすることで機能をオン/オフすることができます。 個人用サイトのリンクを消すには、[個人用サイトの作成]のチェックを外します。 お気に入りとタグのアイコンを消すには、[ソーシャル機能の使用]のチェックを外します。 以下のページは、「すべての認証されたユーザー」に対して、権限を外した場合のイメージになります。 personal4 4.結果ここまでの操作の結果、個人用サイトのリンクとお気に入り、タグのアイコンが表示されなくなります。 お気に入りとタグのアイコンが消えています。 personal5 個人用サイトのリンクが消えています。 personal6 一つ注意点です。 権限を外すことで、個人用サイトのリンクやお気に入り、タグのアイコンが表示されなくなりますが、同時に機能そのものも利用できなくなってしまいます。 ページ右上からリンクを消したいだけとかであれば、マスターページを編集するなどして、リンクだけ消すようにしてください。

読了時間: 1分

ワークフロー実行中の「フォームをレンダリングできません」エラー

現象: ワークフローを実行中に下図の通り「フォームをレンダリングできません・・・」というエラーが発生し、アイテムを開くことができない。 troublestateservice 原因: メッセージの通り、State Serviceが構成されていないことが原因。 **対処法:**以下のリンクの通り、State Serviceを構成することで、ワークフローが動くようになる。 [State Service アプリケーションを構成する](http://sharepoint.orivers.jp/reference/SitePages/State Serviceサービスアプリケーションを構成する.aspx)

読了時間: 1分

リボンのカスタマイズ方法

リボンのカスタマイズ方法が記載されたサイトを集めました。

日本語サイト カスタムのSharePointリボンの作成方法

英語サイトタブ、グループ、コントロールの作り方

タブ、グループへのリボンアイテムの追加方法

ドロップダウンの作り方、クライアントオブジェクトモデルとJavaScript

プログラムによるリボンのカスタマイズ方法

読了時間: 1分

絶対URLからSPViewを取得する

絶対URLからSPViewを取得する方法です。 SPViewはSPListと同様、http://から始まる絶対URLで取得することができません。 SPViewはホスト名からの相対URLで取得します。管理パスとかサブサイトとかで階層がどんなに深くなっていても、ホスト名からの相対URLを指定します。 従って、以下のコードのように何らかのやり方でホスト名までの部分を削除し、その値をSPWebのGetViewFromUrlメソッドに渡します。

1: Uri uri = new Uri("http://test.co.jp/test/Lists/List1/AllItems.aspx");
2: SPSite site = new SPSite(uri.AbsoluteUri);
3: SPWeb web = site.OpenWeb();
4: string targetUrl = uri.AbsoluteUrl.Replace(string.Format("{0}{1}", uri.GetLeftPart(UriPartial.Scheme), uri.Host), "");
5: SPView view = web.GetViewFromUrl(targetUrl);

指定の絶対URLでSPViewが取得できない場合、SPExceptionが発生します。 SPWebやSPListが取得できないときは、FileNotFoundExceptionが発生するのに、SPViewだけはSPExceptionなので、注意が必要です。

読了時間: 1分

絶対URLからSPListItemを取得する

絶対URLからSPListItemを取得する方法です。 SPListItemの取得方法は、対象がファイルまたはフォルダか、リストアイテムかで若干異なります。 ファイル、フォルダの取得 ファイルまたはフォルダのSPListItemを取得する場合、SPListと同様、ホスト名からの相対URLで取得します。 以下のコードでは、Documentsドキュメントライブラリの直下のtestフォルダ内のmemo.txtのSPListItemを取得します。

1: Uri uri = new Uri("http://test.co.jp/Documents/test/memo.txt");
2: SPSite site = new SPSite(uri.AbsoluteUri);
3: SPWeb web = site.OpenWeb();
4: string targetUrl = uri.AbsoluteUrl.Replace(string.Format("{0}{1}", uri.GetLeftPart(UriPartial.Scheme), uri.Host), "");
5: SPListItem file = web.GetListItem(targetUrl);

次は、Documentsドキュメントライブラリの直下のtestフォルダのSPListItemを取得するコードです。

読了時間: 1分

絶対URLからSPListを取得する

絶対URLからSPListを取得する方法です。 結論から言うと、SPListはhttp://から始まる絶対URLで取得することができません。 SPListはホスト名からの相対URLで取得します。管理パスとかサブサイトとかで階層がどんなに深くなっていても、ホスト名からの相対URLを指定します。 従って、以下のコードのように何らかのやり方でホスト名までの部分を削除し、その値をSPWebのGetListメソッドに渡します。

1: Uri uri = new Uri("http://test.co.jp/test/Lists/List1/DispForm.aspx?ID=1");
2: SPSite site = new SPSite(uri.AbsoluteUri);
3: SPWeb web = site.OpenWeb();
4: string targetUrl = uri.AbsoluteUrl.Replace(string.Format("{0}{1}", uri.GetLeftPart(UriPartial.Scheme), uri.Host), "");
5: SPList list = web.GetList(targetUrl);

これで問題なさそうですが、SPWeb.GetListメソッドは一つだけ注意点があります。 SPWeb.GetListメソッドは、引数として渡されたURLのファイル名の部分まで意味を持ちます。 例えば、リスト名までは合っていてもファイル名の部分に間違いがあると、SPListを取得することができません。 以下のコードは、DispForm.aspxがDisp.aspxと間違えているため、SPListは取得できません。

読了時間: 1分

絶対URLからSPWebを取得する

絶対URLからSPWebを取得する方法です。 SPWebを取得するには、まずSPSiteを取得する必要があります。 SPSiteの取得は、別の記事にも書いた通り、SPSiteのコンストラクタの引数に、絶対URLを渡して取得します。 その後、続けてOpenWebメソッドを引数なしで呼び出すことで、SPWebを取得できます。 以下のコードでは、testというサブサイトを指定しています。 このコードの結果は、testサブサイトが取得できます。

1: SPSite site = new SPSite("http://test.co.jp/test/Lists/List1/DispForm.aspx?ID=1");
2: SPWeb web = site.OpenWeb();

SPSiteと同様、サイトが特定できれば、後半のURLは存在しないコンテンツを指していても問題ありません。 以下のコードでは、test2という存在しないサブサイトを指しています。 このコードの結果は、http://test.co.jpのトップサイトが取得できます。

読了時間: 1分

絶対URLからSPSiteを取得する

絶対URLからSPSiteを取得する方法です。 SPSiteのコンストラクタの引数に、絶対URLを渡すとSPSiteが取得できます。

1: SPSite site = new SPSite(http://test.co.jp/test/Lists/List1/DispForm.aspx?ID=1);

管理パスを定義している場合は、SharePointが自動的に管理パスかどうかを判断し、適切なSPSiteを返してくれます。 例えば、http://test.co.jp直下のサイトコレクションの下位にtest1という管理パスを定義し、そこにサイトコレクションを作成した場合、以下のコードではtest1のサイトコレクションを取得します。

1: SPSite site = new SPSite("http://test.co.jp/test1/Lists/List1/DispForm.aspx?ID=1");

サイトコレクションが特定できれば、後半のURLは存在しないコンテンツを指していても問題ありません。 以下のコードでは、test2という存在しないサブサイトを指しています。 このコードの結果は、http://test.co.jpのサイトコレクションが取得できます。

1: SPSite site = new SPSite("http://test.co.jp/test2/Lists/List1/DispForm.aspx?ID=1");

指定の絶対URLでSPSiteが取得できない場合、FileNotFoundExceptionが発生します。

読了時間: 1分

SharePoint API で web.config を変更する

SharePoint API には、web.configを変更するためのクラスが用意されています。 このクラスを使うことで、たとえばFeatureのインストール時に自動的にweb.configを変更するということができるようになります。 web.configの変更には、SPWebConfigModificationクラスとSPWebServiceクラスを利用します。 例として、web.config内のappSettingsに値を追加する処理を書いてみます。 **1.変更内容をSPWebConfigModificationクラスにセットする。**SPWebConfigModificationクラスは、web.configに加える変更情報を保持するクラスです。 web.configを変更したい場合には、このクラスに変更内容をセットすることになります。

1: SPWebConfigModification appSetting = new SPWebConfigModification();
2: appSetting.Path = "configuration/appSettings";
3: appSetting.Name = "add[@key='NewKey']";
4: appSetting.Owner = "orivers";
5: appSetting.Sequence = 0;
6: appSetting.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
7: appSetting.Value = "<add key='NewKey' value='NewValue'/>";

  各プロパティの詳細はヘルプを見ていただくとして、ここでは簡単に説明します。 Pathプロパティに変更対象となるノードを指定し、Valueプロパティに変更内容を指定します。 Nameプロパティは、この変更を一意に識別するための値です。 Ownerプロパティも、Nameプロパティと合わせて、変更を一意に識別するために使用します。 Typeプロパティは、変更内容に合わせたタイプを指定します。 **2.変更を実行する。**SPWebConfigModificationクラスの作成が完了したら、web.configのアップデートをしたいWebアプリケーションで変更を実行します。

読了時間: 1分