2017-09-20 3 views
0

ich auf der benutzerdefinierten Tabelle, die die Feldvalidierung mache. Diese ist das Makro auf dem Validierungsfeld:Kentico 9 - Datencache Makro

{% 
 
\t foreach (i IN CMSContext.Current.GlobalObjects.CustomTables["customtable"].Items.ItemsAsFields.IdNumber) 
 
\t { 
 
\t \t \t if (i == IdNumber.Value){ 
 
\t \t \t \t return false; 
 
\t \t \t } 
 
\t } 
 
\t \t return true; 
 
\t #%}

Die Ausgabe von diesem Teil des Makros starten. CMSContext.Current.GlobalObjects.CustomTables [ "Custom"] Artikel. ItemsAsFields.IdNumber

Diese Zeile von Makro sollte alle Daten erhalten, die in meinem customtable eingegeben werden, jedoch hat es nicht die letzten bekommen. In diesem Fall funktioniert meine Validierung nicht und ich werde weiterhin die gleiche IdNummer eingeben.

Dies ist die Art und Weise, wie ich herausgefunden habe, als ich dieses Makro über System lief - Macro - Benchmark:. {% CMSContext.Current.CMSContext.Current.CMSContext.Current.GlobalObjects.CustomTables [ "Custom"] Artikel .ItemsAsFields.ItemID #%}

Ich testete "Clear Cache", das funktionierte. Also scheint mir das Problem zu kippen.

  • Server Content Caching

  • Server Datei-Caching

  • Client-Caching

  • Output-Caching: - System - Leistungs
    So alle Cache in Einstellung ausgeschaltet Ich habe

und diese Makrozeile gibt die neuesten Daten nicht zurück, wenn ich neue Daten eingegeben habe.

Gibt es eine Möglichkeit Cache mit Makros oder andere Option zu deaktivieren, dieses Problem zu lösen?

Antwort

0

Weder die Ausgabe noch der Datencache werden auf Makros angewendet (Sie können optional manuell turn it on, aber es ist standardmäßig deaktiviert).

Es gibt eine zusätzliche Ebene der Zwischenspeicherung, die für den Benutzer nicht sichtbar ist - die Hashtabellen auf API-Ebene. Kentico sorgt dafür, dass die Tabellen automatisch aktualisiert werden, wenn ein Objekt über die API geändert wird. So gibt es grundsätzlich zwei Möglichkeiten, was schief gehen kann: - entweder gibt es einen Fehler in den Hash-Tabellen - oder du bist nicht die benutzerdefinierte Tabelle über die API zu aktualisieren, aber z über eine direkte SQL-Abfrage und keine Änderungen an der Datenbank bemerkt

Die Frage ist: Verwenden Sie eine SQL-Abfrage?

Wenn dies der Fall ist, müssen Sie den Cache manuell leeren, indem Sie ClearHashtables aufrufen.

+0

Dank Rocky. Es verwendet CMS-Mechanismus, um die Daten zu speichern, das ist, was ich mir vorstellen kann, schien nicht SQL-Abfrage zu verwenden. Wenn ich ClearHashTables manuell verwenden möchte, gibt es ein Beispiel, wie ich es auf das Makro anwenden kann? – YRuth

+0

Sie müssten [eine benutzerdefinierte Makro-Methode registrieren] (https://docs.kentico.com/k10/macro-expressions/extending-the-macro-engine/registering-custom-macro-methods). Wie auch immer, da Sie Kentico's API benutzen, scheint es wie ein Fehler zu sein und es ist sehr wahrscheinlich, dass es durch den 9.0.46 Hotfix behoben wurde. – rocky

1

Ich denke, dies ist die Ursache für das Problem ist (hotfix 9.0.46):

Custom tables - Custom table Items collection incorrectly cached in macros 
When using the Items property of custom table objects in macros, the data was incorrectly cached. For example, when using the 'GlobalObjects.CustomTables["<customtablecodename>"].Items' macro, the latest data was not returned. 
+0

Könnte sein, könnte ... Ich war auf der Suche nach diesem Fehler, aber ich konnte es nicht finden ... Ich glaube, es gab einen Tippfehler in meiner Suchwort :) – rocky

+0

Lassen Sie mich zuerst diesen Hotfix versuchen. Danke Boris – YRuth

Verwandte Themen