2017-09-20 1 views
0

Je fais la validation du champ sur la table personnalisée. Ceci est la macro sur le champ de validation:Kentico 9 - Cache de données Macro

{% 
 
\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 #%}

La question de commencer cette partie de la macro. CMSContext.Current.GlobalObjects.CustomTables [ "CustomTable"] Articles. ItemsAsFields.IdNumber

Cette ligne de macro doit contenir toutes les données entrées dans ma table personnalisée, mais elle n'a pas été récupérée. Dans ce cas, ma validation ne fonctionnera pas et je continuerai à entrer le même IdNumber.

C'est la manière dont j'ai découvert, quand j'ai couru cette macro via le système - Macro - Indice de référence:. {% CMSContext.Current.CMSContext.Current.CMSContext.Current.GlobalObjects.CustomTables [ "CustomTable"] Articles .ItemsAsFields.ItemID #%}

J'ai testé "Vider le cache", cela a fonctionné. Donc, il me semble que c'est un problème de cache.
donc j'ai désactivé toutes le cache dans Configuration - Système - Performance:

  • fichier cache de contenu du serveur

  • Server cache

  • cache client

  • mise en cache de sortie

et pourtant, cette ligne de macro ne retourne pas les dernières données lorsque j'ai entré de nouvelles données.

Est-il possible d'effacer le cache en utilisant l'option macro ou autre pour résoudre ce problème?

Répondre

0

La sortie et le cache de données ne sont pas appliqués sur les macros (vous pouvez optionnellement manuellement turn it on mais il est désactivé par défaut).

Il y a un niveau de cache supplémentaire qui ne soit pas visible à l'utilisateur - les tables de hachage niveau API. Kentico prend en charge la mise à jour automatique des tables chaque fois qu'un objet est modifié via l'API. Il y a donc deux options de ce qui peut mal tourner: - soit il y a un bogue dans les tables de hachage - soit vous ne mettez pas à jour la table personnalisée via l'API mais par ex. via une requête SQL directe et le système ne connaît pas les modifications apportées à la base de données

La question est: utilisez-vous une requête SQL?

Si vous l'êtes, vous devez vider le cache manuellement en appelant le ClearHashtables.

+0

Merci Rocky. Il utilise le mécanisme CMS pour enregistrer les données, c'est ce que je peux comprendre, ne semble pas utiliser la requête SQL. si je devais utiliser ClearHashTables manuellement, Y at-il un exemple comment je peux l'appliquer à la macro? – YRuth

+0

Vous devez [enregistrer une méthode de macro personnalisée] (https://docs.kentico.com/k10/macro-expressions/extending-the-macro-engine/registering-custom-macro-methods). Quoi qu'il en soit, puisque vous utilisez l'API de Kentico, cela ressemble à un bug et il est très probable qu'il a été corrigé par le correctif 9.0.46. – rocky

1

Je pense que cela est la cause de votre problème (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

Pourrait être, pourrait être ... Je cherchais ce bug, mais je ne pouvais pas le trouver ... Je suppose qu'il y avait une faute de frappe dans ma phrase de recherche :) – rocky

+0

Laissez-moi d'abord essayer ce correctif. Merci Boris – YRuth