Sitecore GetChildren在创建子项之后为空

时间:2015-08-20 07:40:37

标签: asp.net-web-api sitecore sitecore-speak-ui

我有一个Sitecore.Services.Client API控制器连接到Sitecore SPEAK应用程序,该应用程序上传媒体项(CSV)然后解析CSV并导入数据。

完成此导入后,我在Sitecore中创建一个摘要项,其中包含已创建的项目列表,任何错误以及上传的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;
    }

1 个答案:

答案 0 :(得分:0)

这是由Mark Cassidy提出的建议,这是由于JavaScript的调用顺序首先击中了错误的控制器。