2016-05-06 16 views
0

Sitecoreがアイテムのワークフロー値をキャッシュしていると思うので、それをクリアする必要があります。キャッシュからSitecoreアイテムを消去する方法

シナリオでは、特定のアイテムが存在するかどうかを判断するためのajaxリクエストを発行し、存在する場合はそのワークフローフィールド値を取得します。ユーザーはフォームを記入し、そのフォームを保存または送信するためのオプションを持っています。フォームを送信すると、ワークフロー状態になります。しかし、たとえ私がブラウザを切り替えるとしても、LoiHasNoWorkflowは再び公開しない限り以前の値を保持します。私はいくつかのキャッシュをクリアする方法がありますが、実際にそのフィールドをキャッシュしているのかどうかはわかりません。

public static bool ClearCache() 
    { 
     foreach (DictionaryEntry entry in HttpContext.Current.Cache) 
     { 
      HttpContext.Current.Cache.Remove((string)entry.Key); 
     } 

     Context.Database.Engines.TemplateEngine.Reset(); 
     Context.ClientData.RemoveAll(); 
     CacheManager.ClearAllCaches(); 

     return true; 
    } 

public bool LoiHasNoWorkflow => CBUtility.ClearCache() && string.IsNullOrEmpty(loi?.Fields["__Workflow"].Value); 

アイテムの__Workflow値がクリアされない理由を特定するにはどうすればよいですか? Sitecore UIでアイテムを削除したり、ページを更新したり、同じリクエストを発行することもできますが、アイテムが存在するときに値を取得することもできます。

+0

ajaxリクエストとフォーム送信がmasterデータベースにアクセスしていますか? LoiHasNoWorkflowを読むと、Webデータベースにアクセスしていますか? –

答えて

0

実際、この問題はキャッシュに関連しているのではなく、私自身の間違いであることが判明しました。私のloiオブジェクトはそのクラス内の静的変数なので、すべてのページリフレッシュ時にクリアされませんでした。ここで私はこの実現に導いた、より深い説明です。実際には、静的変数の仕方についてもう少し学んだ。

Lifetime of ASP.NET Static Variable

+0

この質問を削除します。あなたは今、なぜxが動作していないと答える質問があり、実際にはyと答えています。人の検索にあまり役に立たない – Liam

関連する問題