【问题标题】:Kentico 9 - Data cache MacroKentico 9 - 数据缓存宏
【发布时间】:2018-03-01 22:37:38
【问题描述】:

我正在对自定义表进行字段验证。 这是验证字段上的宏:

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

我测试了“清除缓存”,这很有效。所以在我看来缓存问题。
所以我在设置 - 系统 - 性能中关闭了所有缓存:

  • 服务器内容缓存

  • 服务器文件缓存

  • 客户端缓存

  • 输出缓存

然而,当我输入新数据时,那行宏没有返回最新数据。

有没有办法通过宏或其他选项清除缓存来解决这个问题?

【问题讨论】:

    标签: caching macros kentico


    【解决方案1】:

    我认为这是您的问题的原因 (hotfix9.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.
    

    【讨论】:

    • 可能,可能...我正在寻找那个错误,但我找不到它...我猜我的搜索短语中有错字:)
    • 让我先试试这个修补程序。谢谢鲍里斯
    【解决方案2】:

    输出和数据缓存都不会应用于宏(您可以选择手动turn it on,但默认情况下它是关闭的)。

    还有一个用户不可见的额外缓存级别——API 级别的哈希表。每当通过 API 更改对象时,Kentico 会自动更新表。所以基本上有两种可能出错的选择: - 要么哈希表中存在错误 - 或者您不是通过 API 更新自定义表,而是例如通过直接 SQL 查询,系统不知道对数据库所做的更改

    问题是:您使用的是 SQL 查询吗?

    如果是,则必须通过调用 ClearHashtables 手动刷新缓存。

    【讨论】:

    • 谢谢洛基。它使用CMS机制来保存数据,这是我能想到的,似乎没有使用SQL查询。如果我要手动使用 ClearHashTables,有什么例子可以将它应用到宏吗?
    • 你必须register a custom macro method。无论如何,由于您使用的是 Kentico 的 API,这似乎是一个错误,并且很可能已被 9.0.46 修补程序修复。
    猜你喜欢
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 2017-01-03
    • 1970-01-01
    相关资源
    最近更新 更多