サイトコアはユーザーインタフェースを使用することで、ログインしているユーザーが自分のサイトコアデスクトップにアプリケーションやコンテンツツリー上のアイテムへのショートカットを作成することができます。今回は任意のユーザーのサイトコアデスクトップにアイテムへのショートカットをプログラムを使用して作成する方法をご紹介します。
検証環境
- Sitecore CMS 7.1
確認していませんが Sitecore CMS 6.6 でも動作すると思います。サイトコアデスクトップに配置したショートカットの情報はサイトコアユーザーのレジストリ に格納されています。レジストリといっても Windows のレジストリとは異なります。サイトコアユーザーのレジストリ情報は サイトコアユーザーのプロファイル情報として格納されています。
1.任意のユーザーのサイトコアデスクトップにアイテムへのショートカットを作成する
任意のユーザーのサイトコアデスクトップにアイテムへのショートカットを作成するサンプルメソッドは次の通りです。引数に指定したユーザー(例:extranet\Test1)のサイトコアデスクトップに /sitecore/content/home アイテムへのショートカットを作成するプログラムとなっています。
private void CreateShortOfHomeItem(string username)
{
if (Sitecore.Security.Accounts.User.Exists(username))
{
Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName(username, true);
using (new Sitecore.Security.Accounts.UserSwitcher(user))
{
string path = string.Format("/{0}/Desktop/Links", "Current_User");
string str = Registry.GetString(path);
DesktopLinkCollection desktopLinks = new DesktopLinkCollection(str);
Item item = Sitecore.Context.Database.GetItem("/sitecore/content/home");
if (item != null)
{
DesktopLink link = new DesktopLink()
{
DatabaseName = item.Database.Name,
Icon = item.Appearance.Icon,
Path = item.ID.ToString(),
LanguagesAndHeaders = new List<DesktopLink.LanguageAndHeaderContainer>
{
new DesktopLink.LanguageAndHeaderContainer
{
Header = item.DisplayName,
Language = Sitecore.Context.Language.ToString()
}
}
};
desktopLinks.Add(link);
}
Registry.SetString(path, desktopLinks.ToString());
}
}
メソッドの引数で指定されたユーザーのデスクトップにショートカットを作成するため、 UserSwitcher を使用して ユーザーを切り替えます。そのあと ユーザーのデスクトップリンク情報のレジストリ (/Current_User/Desktop/Links)値を読み取ります。読み取った文字列から DesktopLinkCollection オブジェクトのインスタンスを作成します。あとは DesktoipLink 型のインスタンスを作成して、既存のデスクトップのコレクション DesktopLinkCollection に新しく作成したアイテムへのショートカットを表す DesktopLink オブジェクトを追加します。最後にRegistry.SetString メソッドを呼び出してレジストリの値を更新します。
仕組みを理解していないとプログラムを作成するのは難しいですが、コード自体はシンプルです。ちなみにアイテムへの読み取り権限のないユーザーのデスクトップのショートカットのリンクを作成すると、そのユーザーがサイトコアデスクトップにログインしてもショートカットは表示されないので注意してください。
2.まとめ
簡単ですが説明は以上となります。指摘点や誤りなどありましたらご連絡ください。
説明は以上です。