修正: Commerce Server 2009 で CategoryConfiguration クラスと CategoryConfiguration.ChildProducts.SqlWhereClause プロパティを共に使用する場合、カタログ キャッシュが使用されない

適用先
Commerce Server 2009 Enterprise Commerce Server 2009 Standard

現象

たとえば次のようなシナリオを考えてみます。

  • Microsoft Commerce Server 2009 を実行している Web サイトの Web.config ファイルでカタログ システムのキャッシュを有効にします。
  • CategoryConfiguration クラスを使用して、Category オブジェクトのプリロードされた構成を指定します。
  • LoadChildProducts プロパティを True に設定します。
  • CategoryConfiguration.ChildProducts.SqlWhereClause プロパティでフィルタリング句を指定します。
  • GetCategory メソッドまたは GetProduct メソッドを使用して、CategoryConfiguration オブジェクトの子カテゴリまたは子製品を取得します。

このシナリオでは、カタログ キャッシュを使用して、子カテゴリと子製品を取得できません。 したがって、負荷が高い場合、Web サイトのパフォーマンスが低下する可能性があります。

たとえば、AdventureWorks サンプル カタログを使用する Web サイトがあるとします。 次のコード例を実行して、Category オブジェクトの表示名を取得します。 この例では、カタログ キャッシュは有効になっていますが、コードは毎回カタログ データベースからデータに対してクエリを実行します。

CategoryConfiguration categoryConfiguration = new CategoryConfiguration();

  categoryConfiguration.LoadChildProducts = true;

  categoryConfiguration.ChildProducts.SqlWhereClause = "[IsVisible] = 1";

  var catalogContext = CommerceContext.Current.CatalogSystem.CatalogContext;

  Category category = catalogContext.GetCategory("AdventureWorks Catalog", "SleepingBags");

  Response.Write(category.DisplayName);

注: この問題は、コード例で GetProduct メソッドを使用するとと同じことが発生します。

Microsoft は、明示または黙示の保証なしで、説明のみを目的としてプログラミング例を提供しています。 これには、商品性または特定の目的への適合性に関する暗黙の保証が含まれますが、これらに限定されません。 この記事では、デモンストレーションされているプログラミング言語と、プロシージャの作成とデバッグに使用されるツールについてよく理解していることを前提としています。 Microsoft サポート エンジニアは、特定のプロシージャの機能の説明を支援できます。 ただし、これらの例を変更して、特定の要件を満たすために追加の機能を提供したりプロシージャを構築したりすることはできません。

解決策

この問題を解決するには、Commerce Server 2009 を実行しているサーバーにこの修正プログラムを適用します。

この修正プログラムを適用した後で、"whereClause" フィルターを使用すると、カタログ キャッシュ内の子製品と子カテゴリのキャッシュが許可されます。 既定では、where 句を含むクエリはカタログ キャッシュをバイパスします。 キャッシュを有効にするには、"cacheFilter" セクションを追加し、Commerce Server Web サイトの Web.config ファイルで正しく構成する必要があります。

"cacheFilter" セクションは、次の属性を提供します。

  • "whereClause" 属性。
  • "exactMatch" 属性。

次のいずれかのオプションを使用して、キャッシュする where 句を管理できます。

  • "whereClause" 属性に where 句全体を指定し、さらに "exactMatch" 属性を True に設定します。
  • "whereClause" 属性に where 句を指定し、"exactMatch" 属性を False に設定します。 これにより、Commerce Server は、構成ファイルで指定された内容と部分的に一致する where 句をキャッシュできます。

注: "exactMatch" 属性は省略可能です。 既定では、"exactMatch" 属性を省略すると、 True に設定されます。

次の例は、構成セクションを変更する方法を示しています。 この例では、"exactMatch" 属性の使用方法も示しています。

<catalog>

<catalogSets .../>

      <cache enable="true">

        <cacheFilter>

          <add whereClause="WHERE [ListPrice] between 0 AND 1000'" />

          <add whereClause="isActive" exactMatch="False" />

          ... 

        </cacheFilter> 

      </cache> 

</catalog>

cacheFilter セクションの "whereClause" 属性値を定義する際のルール

"cacheFilter" セクションの "whereClause" 属性の値は文字列一致であることに注意してください。 たとえば、次の規則に従う必要があります。

  • "whereClause" 属性値のキーワードに使用できる空白は 1 つだけです。 次に例を示します。

    • whereClause="ProductID like 'AW2%'" is not matched
    • whereClause="ProductID like 'AW2%'" is matched
  • 複数のキーワード値が存在する場合、"whereClause" 属性値の先頭または末尾に空白は使用できません。 次に例を示します。

    • whereClause=" ProductID like 'AW2%'" が一致しない
    • whereClause="ProductID like 'AW2%' " は一致しません
  • "whereClause" 属性内の一重引用符で囲まれたサブ値は、文字列と完全に一致する必要があります。 たとえば、検索クエリが "ProductID like 'AW2%'" であるとします。この場合、

    • whereClause="ProductID like 'AW2' is not a match
    • whereClause="ProductID like 'AW2%' is a match

      

この修正プログラムの詳細

修正プログラムの情報

マイクロソフトでは、この問題を修正する修正プログラムを提供しています。 ただし、この修正プログラムは、この資料で説明されている問題のみを修正することを目的としています。 この修正プログラムは、ここで説明する問題が発生しているシステムにのみ適用してください。 この修正プログラムは、今後さらにテストを行う場合があります。 したがって、この問題で深刻な影響を受けていない場合は、この修正プログラムが含まれる次のソフトウェア更新プログラムがリリースされるまで待つことを推奨します。

修正プログラムをダウンロードできる場合は、このサポート技術情報の資料の上部に「修正プログラムのダウンロード」セクションがあります。 このセクションが表示されていない場合は、Microsoft カスタマー サービス & サポート にお問い合わせのうえ、修正プログラムを入手してください。

注: 別の問題が発生した場合、またはトラブルシューティングが必要な場合には、別のサービス リクエストを作成することが必要になる場合があります。 特定の修正プログラムの対象とならない追加の質問および問題については、通常のサポート料金が適用されます。 マイクロソフト カスタマー サービス サポートの電話番号一覧を参照、または別のサービス リクエストを作成するには、次のマイクロソフト Web サイトを参照してください。

http://support.microsoft.com/contactus/?ws=support 注: [修正プログラムのダウンロードが利用可能] フォームには、修正プログラムを使用できる言語が表示されます。 使用している言語が表示されない場合は、その言語の修正プログラムが存在しないことになります。

前提条件

この修正プログラムを適用するには、Commerce Server 2009 または SharePoint 2010 用 Commerce Server 2009 テンプレート パックがインストールされている必要があります。

再起動に関する情報

この修正プログラムの適用後にコンピューターを再起動する必要はありません。 ただし、この修正プログラムの適用後、インターネット インフォメーション サービス (IIS) を再起動する必要があります。 IIS を再起動するには、コマンド プロンプト ウィンドウを開き、次のコマンドを入力して Enter キーを押します。

iisreset /restart注: このオプションを指定すると、実行中のすべての IIS サービスが停止され、再起動されます。

ファイル情報

修正プログラム (英語版) のファイル属性は次表のとおりです。ただし、これより新しい修正プログラムがリリースされている可能性もあります。 これらのファイルの日付と時刻は世界協定時 (UTC) で記載されています。 ファイル情報に表示される時刻は、ローカル時刻に変換されています。 UTC とローカル時刻との時差を確認するには、[コントロール パネル] の [日付と時刻][タイム ゾーン] タブを使用してください。

サポートされているすべてのバージョンの Commerce Server 2009 について

ファイル名 ファイルのバージョン ファイル サイズ 日付 時刻 プラットフォーム
Cs2009hotfixhelper.exe 6.0.4171.27 13,080 2010 年 8 月 18 日 1,111 x86
Microsoft.catalogserver.dll 6.0.4171.27 756,520 2010 年 8 月 18 日 1,111 x86
Microsoft.commerceserver.runtime.dll 6.0.4171.27 850,744 2010 年 8 月 18 日 1,111 x86
Microsoft.commerceserver.catalog.dll 6.0.4171.27 961,336 2010 年 8 月 18 日 11:35 x86

サポートされているすべてのバージョンの SharePoint 2010 用 Commerce Server 2009 テンプレート パック

ファイル名 ファイルのバージョン ファイル サイズ 日付 時刻 プラットフォーム
Cspatchhelper.exe 6.0.4171.504 17,168 2010 年 11 月 30 日 08:16 x86
Microsoft.catalogserver.dll 6.0.4171.504 756,520 2010 年 11 月 30 日 08:16 x86
Microsoft.commerceserver.runtime.dll 6.0.4171.504 850,744 2010 年 11 月 30 日 08:16 x86
Microsoft.commerceserver.catalog.dll 6.0.4171.504 961,336 2010 年 11 月 29 日 14:13 x86

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

追加情報

修正プログラムのアンインストール中およびアンインストール後に、次の 2 点に注意してください。

  1. ダイアログ ウィンドウが表示される場合があります。 アンインストール プロセスを続行する前に一部のアプリケーションを閉じる必要があることを警告するダイアログ ウィンドウが表示されます。 この場合は、既定の選択を受け入れ、[OK] ボタンをクリックして続行します。
  2. Commerce Server 2009 の修正プログラムをアンインストールすると、[スタート] メニューに Commerce Server 2009 と Commerce Server 2007 の両方が表示されることがあります。 この場合、Commerce Server 2007 のメニュー項目を無視するか、削除してもかまいません。

詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。

catalog 要素
        
         CategoryConfiguration クラス
        
         GetCategory メソッド
        
SharePoint 2010 用 Commerce Server 2009 テンプレート パックをダウンロードするには、次のマイクロソフト Web サイトにアクセスしてください。

http://www.microsoft.com/download/en/details.aspx?FamilyID=CFD0C459-5A11-4DE6-9085-52D59E8D38E6&displaylang=en