sitecore管道运行方法中failIfNotExists参数的用途是什么

时间:2018-03-05 06:49:07

标签: sitecore sitecore-mvc sitecore8.2

我试图从我的自定义sitecore管道运行方法获得响应,下面是我的代码

  Sitecore.Pipelines.CorePipeline.Run("customPipelineName", args, true);

第三个参数是failIFnotExists。任何人都可以解释这个参数的使用以及当我在处理器中中止管道时如何从puipeline获得响应。  下面是内核DLL中的声明

 public static void Run(string pipelineName, PipelineArgs args, bool failIfNotExists);

反编译后我发现下面的runform为run方法。如果failIfNotExist参数使用只是为了运行管道,那么为什么我们不能在调用run方法时这样做呢?

if (pipeline == null && !failIfNotExists)
        return;
      Assert.IsNotNull((object) pipeline, "Could not get pipeline: {0} (domain: {1})", new object[2]
      {
        (object) pipelineName,
        (object) pipelineDomain
      });

1 个答案:

答案 0 :(得分:1)

此参数的使用非常简单。就像评论所说:如果设置为true,如果找不到管道,代码将抛出异常。考虑到评论和下面的反编译代码:

public override void Run(string pipelineName, PipelineArgs args, string pipelineDomain, bool failIfNotExists)
{
    Assert.ArgumentNotNullOrEmpty(pipelineName, "pipelineName");
    Assert.ArgumentNotNull((object) args, "args");
    Assert.ArgumentNotNull((object) pipelineDomain, "pipelineDomain");
    CorePipeline pipeline = this.GetPipeline(pipelineName, pipelineDomain);
    if (pipeline == null && !failIfNotExists)
        return;
    Assert.IsNotNull((object) pipeline, "Could not get pipeline: {0} (domain: {1})", new object[2]
    {
        (object) pipelineName,
        (object) pipelineDomain
    });
    pipeline.Run(args);
}

你可以看到它只是在找不到管道时抛出异常。如果您不确定管道是否存在并且可以将此参数设置为true并在代码中使用try / catch语句来了解管道是否已运行或它是否存在。当它被中止时,它与管道的结果无关。

关于管道结果。您正在将args传递给管道:

Sitecore.Pipelines.CorePipeline.Run("customPipelineName", args, true);

这些可以是您的自定义或标准Sitecore。管道所做的一切都将(应该)反映在那些args中。如果这是你的自定义管道和自定义args,则将其他属性添加到这些参数并在管道处理器中完全填充它们,这样即使其中一个处理器将中止管道,它也会反映在args中。