概要:現在のアイテムがコンテンツツリー上の位置を特定する際によく使用するGetAncestorsと paths.LongIDの比較

検証環境は次の通りです。

  • Sitecore

 

サイトを構築して行くうちによく現在のアイテムがコンテンツツリーの位置を特定する場合あります。よく使われるのはGetAncestorsまたpaths.LongIDとなります。同僚にどれが早いのかと聞かれ、いい質問だねと思って、比較をしてみました。

下準備

下記のサンプルアイテムを作成します。

GetAncestors

サイトコアのコンテンツ API クックブックによりますと、GetAncestorsメソッドにて祖先にアクセスができると書かれています。

上記の例でLevelDアイテムの先祖をGetAncestorsで取得するとSitecore.Data.Items.Itemオブジェクト配列が返される

Sitecore.Data.ItemPath.LongID

上記の例でLevelDアイテムのSitecore.Data.ItemPath.LongIDプロパティが Sitecore.Data.Items.ItemのオブジェクトIDの文字列を返されます。

コードの比較

さて、どちらか早いのかを知るにはコードを見てみましょう。両方のコードを見る限りでは両方とも、“Sitecore.Data.Managers.ItemManager” クラスを使用し、同じようなループが
使用されています。

検証

コードみるには同じようなループが使用していますが、返り値がオブジェクト配列に対して、文字配列を返す方が早いはずです。実際に検証してみましょう。。。下記のコードで同じ開始するアイテムから祖先にマッチするアイテムを見つけることをループに入れて、かかる時間を比較します。

その結果、Paths.LongIDの方がGetAncestorsより8倍も早かった。これは使用されるサーバーのリソース、メモリ、CPUなどにも影響されますが、ただ、Paths.LongIDの方早いのは間違いがないようです。。。

Test

GetAncestors

Paths.LongID

1

136ms

14ms

2

131ms

12ms

3

149ms

22ms

4

152ms

16ms

5

140ms

21ms

平均:

142ms

17ms

GetAncestorsItemPath 続きを読む

概要:サイトコアサイトのパフォーマンスのサイトコアサイトパフォーマンスのトラブルシューティングのために一時的にアナリティクスを無効にする設定に関する説明

検証環境は次の通りです。

  • Sitecore 5
  • Sitecore 6
  • Sitecore 7
  • Sitecore 8

 

きっかけ

サイトがライブしてから、またライブする前にサイトのパフォーマンスに関するトラブルシューティングのテクニックとして、一時的にアナリティクスを無効にし、問題を特定することがあります。その際にアナリティクスを無効にする方法はいくつかがありますので、それを理解したいです。

アナリティクスを一時的に無効にする方法

もし、Googleで検索をかけると一時的にアナリティクスを無効にする方法のブログが沢山とあります。ただ、どれも基本的に下記の三つの方法になります。

  1. site エレメントの enableAnalytics 属性を変更。
  1. Sitecore.Analyticsプレフィックスのファイルの名前を変更し、コンフィグレーションを無効にする
  1. Sitecore.Analytics.config Analytics.Enabled と Analytics.DisableDatabase属性を変更

 

質問その1

続きを読む

タグ:

こちらの記事はSitecore Advent Calender 2014の12月17日の記事です。

今日は”テンプレートから挿入”について書いてみたいと思います。

”テンプレートから挿入”がバージョン7となって、テンプレートの”検索”タブが追加され、ユーザーに使いやすさを提供した一方で適切でないテンプレートを選択し、問題となる可能性が出てきます。

サイトコアの管理者また、CMSユーザが下記のアイテムへのアクセス権限を持っていればこの”テンプレートから挿入”が表示されます。

基本的にテンプレートを作成する際にスタンダードバリューにて挿入オプションを設定するのはお勧めですが、忘れたりする場合を考えてこの”テンプレートから挿入”を隠す場合もあります。これを対処するにはいくつかの方法を書いてみたいと思います。

サイトコアの設定のみ対応する

コードを使用せず、設定のみで対応するにはサイトコアのCoreデーターベースにてこの

続きを読む

タグ:

概要:コールアウトに使われるデータソースの継続についてのメモ書きです。

 

サイトの構築の際にコールアウトがよく使われます。

特定のページに同じコールアウトのサブレイアウトを使用し、データソースを変えたりするにはSitecoreのルールエンジンおよびコンディションによってレンダリング レンダリングのデータソースを設定したりします。ただ実際にこのルールエンジンを使うお客さんこれまでの作業でそれほど多くない。

よく、お客さんから、デフォルトのコールアウトを設定しれくれという要求があります。たとえば、サービスーというサイトコアのフォルトがあり、その下数重レベルのサブアイテムフォルダがあって、さらにその下に数千のアイテムがあります。スタンダード値にてデフォルトのデータソースを設定する方法もありますが、もし、既存アイテムにデーターソースがない場合は、もっとも近いアンセスターのアイテムのデーターソースを使用という方法があります。もし、近いアンセスターがデーターソースが設定されていないなら、ツリーを従って上の方へ繰り返しでデーターソースを探します。

コールアウトのデータソースの取得もGoogleで検索を書けば下記のように簡単に取得することができます。

ただ、レンダリングにてデーターソースを取得する記事があまり見つからなかったので、それをついて書いてみようと思った。

まず、下準備します。

1.三つのページと三つのコールアウトを用意します。

2.それぞれのページにそれぞれのデータソースを指定します。

3.ページを表示します。

ここで、もし、Levle3のデーターソースを削除します。

Level3のページにて、コールアウトが最も近いアンセスターがデーターソースが設定されているかどうかを確認し、この場合Level2にてデータースースが設定されているので、それを使用します。

もし、Level2もデーターソースが設定されていない場合、

Level3のページにて、コールアウトが最も近いアンセスターがデーターソースが設定されていないので、引き続き上のアイテムを確認し、
この場合Level1にてデータースースが設定されているので、それを使用します。

さて、コードを見てみましょう。
Callout.ascx

Callout.ascx.cs

  続きを読む

最近のサイトがすべてレスポンシブWEBデザインとなったことでファイルを使用するようになりました。ファイルをメディアライブラリへ追加するには下記のメディアタイプを追加する必要があります。これはそのメモ書きです。

SVGのイメージファイルをメディアライブラリにて追加すると下記のように表示されません。

Web.Configにて下記をメディアタイプを追加すればいいです。

*\App_Data\MediaCacheをクリアします。

*MIME Types has SVG

*AppRecycle or IISRESET

再度イメージをアップロードします。

*注意ししてほしいのはIE8はSVGをサポートしていません。

参考サイト:
http://stackoverflow.com/questions/9353798/svg-support-for-internet-explorer-8-and-below
http://stackoverflow.com/questions/1427051/how-to-make-svg-work-with-ie
続きを読む

概要:既存のHTMLページをサイトコアのサイトに表示させる方法のメモ書きです。

よくお客さんの要求で、既存のHTMLページを表示されたいという要求があります。

たとえば、下記のサンプルのHTMLページがあります。

お客さんがHTMLのページをメディアライブラリにてファイルとして追加します。

そして、コンテントにてリンクとして追加します。ただ、リンクをクリックすると、ページが表示される代わりにダウンロードされてします。

 

これはダウンロードせず、ページを表示させるようにする設定のメモ書きです。

Web.ConfigのmediaTypeをみれはforceDownloadという設定があります。
これをFalseに設定すればダウンロードせず、ページが表示されます。
HTMLだけではなく、PDFやイメージなどメディアタイプによって設定すればいいです。

 

今回の場合は”htm,html”の設定をすればいい。

1. /app_config/mimeType.xmlにて下記の設定を更新。

2./app_data/mediaCache にて、キャッシングをクリアします。

再度リンクをクリックすれば、ダウンロードせず、ページが表示されます。

もし特定なメディアタイプの設定をコードでしたいなら、MediaRequestHandler をカスタマイズすればいい。ここにサンプルコードがあります。 続きを読む

この前、特定のアイテムバージョンへ戻るについて書いたのですが、昨日プロジェクトマネージャンから、誤ってパブリッシュしたバージョンを以前のバージョンを戻したいけどどうしたらいいと言われた。それはパブリッシュ制限でやればいいと答えたら、見せてと言われた。これは確かにサイトコアのリフェレンスに有ったような気がしますがそのリフェレンスをみつけませんでした。メモ書きとして簡単に書きます。 例えば誤って新しいバージョンをパブリッシュしてしまった場合、

masterデータベースにて、パブリッシュしたくないバージョンの”パブリッシュ可能”のチェックをはずせばいい。

代わりにバージョン1がパブリッシュされますと通知されます。

ここでパブリッシュすれば、バージョン2がWebから消されます。

もしコードでパブリッシュ制限する場合は、John Westさんのこの記事にて、制御可能の フィールドの一覧が有ります。必要に応じて、フィールドを設定すればいい。

続きを読む

サポートの同僚から、お客さんがアイテムをロックすると、新しいバージョンが作られるので、多数のバージョンから、特定のバージョンへ戻りたいけどどうしたらいいといわれた。

“あなたはどう思うの?”
“順番にバージョンを削除してたらどう?”
“確かに…”
“もし、100以上のバージョンがあって、最初のバージョンへ戻りたいときどうするの?”
“…”

削除せず、パブリッシュセクションの機能を使ってほしかった。

“戻りたいバージョンをもとに新しいバージョンを作ればいいじゃないの”と聞いたら”なるほど”と納得したようです。戻りたいバージョンへ戻って、追加で、選択したバージョンをもとに新しいバージョンが作られます。
続きを読む

タグ:

今日はサイトコアのデータベースバックアップについて書きます。

普段の作業でサイトコアサイトは五つのデーだベースがあります。(Core, Master, Web, WFFM, Analytics)これにカスタムのデーだベースを加え、一つのサイトは六個のデーだベースになります。サイトをパックアップまたリストーアはSQL Server Management Studioのユーザインタェースタスクにてすればいいです。先週、会社から新しいPCをもらい、既存のサイトを新しいPCへ移しなければなりません。ざっと見れば、120以上のデータベースをバックアップ/リストーアをしなければなりません。これをManagement Studioのユーザインタフェースタスクでやれば、かなり時間がかあるので、SQLクエリを使うことにした。今回はデータベースを移すためのSQLクエリを纏めました。

データベースバックアップ

DECLARE @DBList VARCHAR(MAX)
SELECT @DBList = COALESCE(@DBList+',' ,'') + Name
FROM master.dbo.sysdatabases
WHERE [name] LIKE '%local%'
print

続きを読む

以前サポート業務をした際によくお客さんに何でサイトをパブリッシュしたのと聞かれ、いいえ、してないよと言っても信じてくれなかった。よくあったのは、自社の社員がアイテムを更新し、パブリッシュはせず、お客さんの最終確認を得ようとします。しかし、お客さんは過ってサイトをパブリッシュして、サイトにエラーが発生。アイテムの最後更新者をみては自社の社員であったので、お客さんにあなたの社員が最後にアイテムを更新したのでパブリシュしたに違いと言われたことがもある。

例を挙げれば、サポーターの高志君がアイテムを更新し、お客さんに確認をするようにお願いする。お客さんの浩様が誤ってアイテムをパブリッシュする。ただ、コードの変更がまた更新していないのでサイトにてエラーとなった。浩様が自分がパブリッシュしたことも覚えていないので、もしかして、最終の更新者である高志君がサイトを壊したのではと思い始める。

誰があるアイテムをパブリシュを探すにはログファイルをみることです。 アイテムを検索すれば、最後に誰かパブリシュしたのは一目瞭然です。

ログファイルを見るには、サイトコアのログビューアーにてみればいいです。

もしサーバへのアクセスがあれが、だーターフォルダにあるログファイルフォルダにてログファイルをみればいい

続きを読む