2

I've been trying to duplicate the solution proposed here and I'm running up against an error that I can't seem to debug. My config patch is here:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <httpRequestBegin>
        <processor type="DVD.Utility.DVDItemSavingProcessor, DVD" patch:instead="processor[@type='Sitecore.Pipelines.Save.Validators, Sitecore.Kernel']" />
      </httpRequestBegin>
    </pipelines>
  </sitecore>
</configuration>

And I've basically just copied and pasted the code from Sitecore.Piplelines.Save.Validators from the Sitecore.kernell.dll:

using Sitecore.Collections;
using Sitecore.Data.Validators;
using Sitecore.Diagnostics;
using Sitecore.Globalization;
using Sitecore.Pipelines.Save;
using Sitecore.Web;
using Sitecore.Web.UI.Sheer;
using System;

namespace DVD.Utility
{
    public class DVDItemSavingProcessor
    {
        public void Process(SaveArgs args)
        {
            Assert.ArgumentNotNull(args, "args");
            this.ProcessInternal(args);
        }

        /// <summary>
        /// Processes the internal.
        /// </summary>
        /// <param name="args">
        /// The arguments.
        /// </param>
        protected void ProcessInternal(ClientPipelineArgs args)
        {
            Assert.ArgumentNotNull(args, "args");
            if (args.IsPostBack)
            {
                if (args.Result == "no")
                {
                    args.AbortPipeline();
                }
                args.IsPostBack = false;
                return;
            }
            string formValue = WebUtil.GetFormValue("scValidatorsKey");
            if (string.IsNullOrEmpty(formValue))
            {
                return;
            }
            ValidatorCollection validators = ValidatorManager.GetValidators(ValidatorsMode.ValidatorBar, formValue);
            ValidatorOptions options = new ValidatorOptions(true);
            ValidatorManager.Validate(validators, options);
            Pair<ValidatorResult, BaseValidator> strongestResult = ValidatorManager.GetStrongestResult(validators, true, true);
            ValidatorResult part = strongestResult.Part1;
            BaseValidator part2 = strongestResult.Part2;
            if (part2 != null && part2.IsEvaluating)
            {
                SheerResponse.Alert("The fields in this item have not been validated.\n\nWait until validation has been completed and then save your changes.", new string[0]);
                args.AbortPipeline();
                return;
            }
            if (part == ValidatorResult.CriticalError)
            {
                string text = Translate.Text("Some of the fields in this item contain critical errors.\n\nAre you sure you want to save this item?");
                if (Sitecore.MainUtil.GetBool(args.CustomData["showvalidationdetails"], false) && part2 != null)
                {
                    text += ValidatorManager.GetValidationErrorDetails(part2);
                }
                SheerResponse.Confirm(text);
                args.WaitForPostBack();
                return;
            }
            if (part == ValidatorResult.FatalError)
            {
                string text2 = Translate.Text("Some of the fields in this item contain fatal errors.\n\nYou must resolve these errors before you can save this item.");
                if (Sitecore.MainUtil.GetBool(args.CustomData["showvalidationdetails"], false) && part2 != null)
                {
                    text2 += ValidatorManager.GetValidationErrorDetails(part2);
                }
                SheerResponse.Alert(text2, new string[0]);
                SheerResponse.SetReturnValue("failed");
                args.AbortPipeline();
                return;
            }
        }

    }
}

The error that I'm getting is:

[InvalidOperationException: Could not find method: Process. Pipeline: /sitecore[database="SqlServer" xmlns:patch="http://www.sitecore.net/xmlconfig/"]/pipelines/httpRequestBegin/processor[type="DVD.Utility.DVDItemSavingProcessor, DVD" patch:source="Tricare.CustomValidator.config"]]
   Sitecore.Pipelines.CoreProcessor.GetMethodInfo(ProcessorObject obj, Object[] parameters) +170
   Sitecore.Pipelines.CoreProcessor.GetMethod(Object[] parameters) +152
   Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) +455
   Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain) +22
   Sitecore.Nexus.Web.HttpModule.(Object , EventArgs ) +551
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +139
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +195
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +88
4

You added your processor to wrong pipeline.

It should be:

saveUI

and you added it to

httpRequestBegin

Change your config to:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <saveUI>
        <processor type="DVD.Utility.DVDItemSavingProcessor, DVD" patch:instead="processor[@type='Sitecore.Pipelines.Save.Validators, Sitecore.Kernel']" />
      </saveUI>
    </pipelines>
  </sitecore>
</configuration>
3
  • Thank you, this removed the error. Unfortunately when I now change the "Some of the fields" text in the message for either CriticalError or FatalError, it doesn't seem to change the text in the modal dialog that comes up. – Levi Wallach Apr 2 '19 at 14:59
  • That is a separate, e.g. new question Levi. Please take some time to familiarise yourself with how this site functions. If the answer given solves your original question, please mark it as such and we can all move on :-) – Mark Cassidy Apr 2 '19 at 15:05
  • Turned out the <pipelines> node also needed to be changed to <processors>. – Levi Wallach Apr 2 '19 at 15:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.