「メディアの選択」ダイアログにバージョン管理されたメディアアイテムの誤った・または破損したプレビューのサムネイルが表示される


解説

[メディア選択]ダイアログを使用してメディア アイテムを参照した際に、破損したプレビューのサムネイルが表示される場合があります。

 

この問題は、リスト ビューとツリー ビューの両方で、バージョン管理されたメディア アイテムでデフォルト言語のバージョンがない場合に発生します。 問題が発生すると、次のメッセージがSitecoreログに記録されます。

ERROR Application error.
Exception: System.ObjectDisposedException
Message: Cannot access a closed file.
Source: mscorlib
   at System.IO.__Error.FileNotOpen()
   at System.IO.FileStream.get_Length()
   at Sitecore.Resources.Media.Streaming.RangeRetrievalResponse.WriteFullContent(HttpContext context, Stream fileContent)
   at Sitecore.Resources.Media.MediaRequestHandler.DoProcessRequest(HttpContext context, MediaRequest request, Media media)
   at Sitecore.Resources.Media.MediaRequestHandler.ProcessRequest(HttpContext context)

解決策

この問題を解決するには、ソリューションをSitecore XP 10.4.0以降へアップグレードしてください。

または、以下の方法で問題の影響を緩和することができます。

  1. 以下のファイルを開きます。
    <site_root>\sitecore\shell\client\Business Component Library\Layouts\Renderings\ListsAndGrids\TreeViews\ItemTreeView.js
  2.  「appendLanguageParameter」関数を見つけます。
  3. 以下の箇所を、次のように変更します。
    変更前:
    if (item.$icon && item.$icon.indexOf(".ashx") > 0 && item.$icon.indexOf("la=") === -1 ) {
      item.$icon += "&la=" + this.model.get("contentLanguage");
    }
    if (item.$mediaurl && item.$mediaurl.indexOf(".ashx") > 0 && item.$mediaurl.indexOf("la=") === -1 ) {
      item.$mediaurl += "&la=" + this.model.get("contentLanguage");
    }
    変更後:
    /* Fix for 539825 */
    if (item.$icon && item.$icon.indexOf("la=") === -1 ) {
      item.$icon += "&la=" + this.model.get("contentLanguage");
    }
    if (item.$mediaurl && item.$mediaurl.indexOf("la=") === -1 ) {
      item.$mediaurl += "&la=" + this.model.get("contentLanguage");
    }
    /* End of fix for 539825 */
  4. 次のファイルに対して、手順2と3を繰り返します。
    <site_root>\sitecore\shell\client\Business Component Library\Layouts\Renderings\ListsAndGrids\ListControls\ListControl.js
  5. ブラウザーのキャッシュをクリアし、上記の解決策が機能することを確認します。