我正在自定义表上进行字段验证。 这是验证字段中的宏:
{%
foreach (i IN CMSContext.Current.GlobalObjects.CustomTables["customtable"].Items.ItemsAsFields.IdNumber)
{
if (i == IdNumber.Value){
return false;
}
}
return true;
#%}
问题从这部分宏开始: CMSContext.Current.GlobalObjects.CustomTables [ “customtable”]。Items.ItemsAsFields.IdNumber
这一行宏应该可以获得我的自定义表中输入的所有数据,但是它没有得到最近的数据。 在这种情况下,我的验证将不起作用,我将继续输入相同的IdNumber。
这是我发现的方式,当我通过System - Macro - Benchmark运行此宏时: {%CMSContext.Current.CMSContext.Current.CMSContext.Current.GlobalObjects.CustomTables [“customtable”]。Items.ItemsAsFields.ItemID #%}
我测试了“Clear Cache”,这很有用。所以在我看来缓存问题 所以我在设置 - 系统 - 性能:
中关闭了所有缓存服务器内容缓存
服务器文件缓存
客户端缓存
输出缓存
然而,当我输入新数据时,那行宏没有返回最新数据。
有没有办法使用宏或其他选项来清除缓存来解决这个问题?
答案 0 :(得分:1)
我认为这是您的问题的原因(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.
答案 1 :(得分:0)
输出和数据缓存均未应用于宏(您可以选择手动turn it on,但默认情况下它已关闭)。
用户无法看到额外级别的缓存 - API级哈希表。只要通过API更改对象,Kentico就会自动更新表。因此,基本上有两种可能出错的选择: - 哈希表中有一个错误 - 或者您没有通过API更新自定义表格,例如通过直接的SQL查询,系统不知道对数据库所做的更改
问题是:您使用的是SQL查询吗?
如果您是,则必须通过调用ClearHashtables
手动刷新缓存。