我通过数据库配置了一个计划任务,该任务按预期触发,并在C#类中调用方法“Execute”。我的问题是,在我的Execute方法中,无法访问Sitecore项。调用Sitecore.Context.Database时,我甚至得到一个NullPointerExecption。
我想这肯定是一个安全问题,这是有道理的。所以我尝试使用UserSwitcher和SecurityDisabler获取权限,但这没有帮助。
有人能指出我缺少的东西吗?
答案 0 :(得分:4)
您无法在计划任务中使用Sitecore.Context
。那里不存在。 var masterDb = Sitecore.Data.Database.GetDatabase("master");
var webDb = Sitecore.Data.Database.GetDatabase("web");
与HttpRequest绑定,并且在计划任务中没有请求。正如John W在他的文章(The Sitecore Context)中所写的那样:
由静态Sitecore.Context类公开的Sitecore上下文包含有关Sitecore安装和当前HTTP请求的信息。 web.config文件中定义的httpRequestBegin管道中的处理器主要负责定义Sitecore上下文。 Sitecore确定上下文数据库后,它确定该数据库中的上下文项。
在计划作业中,您应该按名称获取数据库,例如:
const unzip = zlib.createUnzip();
app.get('/file', (req, res) => {
fs.createReadStream('./upload/compress_aurelien-boquet.pdf')
.pipe(unzip)
.pipe(res);
});