Sitecore GetChildren 在创建子项后立即为空
Sitecore GetChildren empty just after child item created
我有一个连接到 Sitecore SPEAK 应用程序的 Sitecore.Services.Client API 控制器,该应用程序上传媒体项 (CSV),然后解析 CSV 并导入数据。
导入完成后,我在 Sitecore 中创建一个摘要项目,其中包含创建的项目列表、任何错误、link 到上传的 CSV。
var parentItem = _itemReader.GetItem(ParentItemId);
var template = _itemReader.GetTemplateItem(TemplateId);
var newItem = parentItem.Add(title, template);
然后我有另一个控制器查看摘要项目文件夹获取媒体 ID 是我上传的项目的子项。
summaryFolder.Children.Where(x => x["Media file"] == mediaItemId).FirstOrDefault();
我看到的问题是,一旦一个控制器创建了项目,下一个控制器就会调用 Item.Children,但是找不到子项。如果我稍后再次请求控制器,它们就会被发现。似乎项目缓存可能或类似的东西没有及时更新。
是否可以绕过任何缓存请求项目并直接进入数据库。或者无论如何,当我创建项目时强制缓存更新?
完整代码
public ImportAudit GetLatestAudit(string mediaItemId)
{
var importAudit = new ImportAudit();
var summaryFolder = masterDatabase.GetItem(new ID(AuditFolderId));
if (summaryFolder != null)
{
var lastestAudit = summaryFolder.GetChildren().Where(x => x["Media file"] == mediaItemId).OrderByDescending(x => x.Statistics.Created).FirstOrDefault();
if (lastestAudit != null)
{
importAudit.ImportedItems = GetTitles(lastestAudit, "Imported Items");
}
}
return importAudit;
}
这是根据 Mark Cassidy 的建议修复的,这是由于 JavaScript 的调用顺序首先击中了错误的控制器。
我有一个连接到 Sitecore SPEAK 应用程序的 Sitecore.Services.Client API 控制器,该应用程序上传媒体项 (CSV),然后解析 CSV 并导入数据。
导入完成后,我在 Sitecore 中创建一个摘要项目,其中包含创建的项目列表、任何错误、link 到上传的 CSV。
var parentItem = _itemReader.GetItem(ParentItemId);
var template = _itemReader.GetTemplateItem(TemplateId);
var newItem = parentItem.Add(title, template);
然后我有另一个控制器查看摘要项目文件夹获取媒体 ID 是我上传的项目的子项。
summaryFolder.Children.Where(x => x["Media file"] == mediaItemId).FirstOrDefault();
我看到的问题是,一旦一个控制器创建了项目,下一个控制器就会调用 Item.Children,但是找不到子项。如果我稍后再次请求控制器,它们就会被发现。似乎项目缓存可能或类似的东西没有及时更新。
是否可以绕过任何缓存请求项目并直接进入数据库。或者无论如何,当我创建项目时强制缓存更新?
完整代码
public ImportAudit GetLatestAudit(string mediaItemId)
{
var importAudit = new ImportAudit();
var summaryFolder = masterDatabase.GetItem(new ID(AuditFolderId));
if (summaryFolder != null)
{
var lastestAudit = summaryFolder.GetChildren().Where(x => x["Media file"] == mediaItemId).OrderByDescending(x => x.Statistics.Created).FirstOrDefault();
if (lastestAudit != null)
{
importAudit.ImportedItems = GetTitles(lastestAudit, "Imported Items");
}
}
return importAudit;
}
这是根据 Mark Cassidy 的建议修复的,这是由于 JavaScript 的调用顺序首先击中了错误的控制器。