网站核心|WFFM|带有详细信息的自定义错误消息|与表格在同一页面上

Sitecore|WFFM| Custom Error Message with details| on Same Page with Form

我为我的一个页面设置了一个营销人员 Web 表单。

我已经为它编写了自定义提交操作,如下面的代码片段所示 -

public class **CustomFormSubmit : ISaveAction**
{
    public void Execute(ID formid, AdaptedResultList fields, params object[] data)
    {

        try
        {
           **//var returnValue=  Custom Logic  to save form data // returns true or false** 
        }
        catch (Exception ex)
        {
            Logger.Log(ex.Message + ":" + builder, ExceptionCategory.Error);
            throw;
        }
    }

在我上面的 Web 表单中 - 成功模式是 - SuccessMode/Redirect 并且我为其配置了一个成功页面。

我在上述场景中的要求是,如果 returnValue 为 false,则让用户保持在同一页面(使用表单)。 (如上代码段所示)

任何人都可以在上述情况下指导我 - 如何让用户在表单中填写值的同一页面上,以便用户可以再次提交。 产品详细信息 - 7.2 修订版。 141226,面向营销人员的 Web 表单 2.4 修订版 140117

添加进一步的细节- 如果上面的代码片段中 return 为假,我不确定如何返回我的页面而不是重定向。 一旦提交按钮被点击,上面的函数——Execute——就会被调用。 如何返回页面 - 我是否需要覆盖任何功能或自定义某些内容。

如果在保存数据时出现任何异常 - 然后控件将返回到同一页面并保留用户填写的所有值 - 保存操作失败在 Sitecore 中配置的消息。 所以我的要求是在保存数据时以 return 值出现异常时转到表单,并放置可能会更改的自定义错误消息时间,所以不是静态配置的,而是动态配置的。 谢谢! 索拉布

一个选项是重定向到打开表单的原始页面。

使您的表单能够使用 ReadQueryString 属性 通过查询字符串填充字段,通过表单呈现器的演示详细信息:

因此,在 Save Actionfalse 上,您创建了一个查询字符串集合,其中包含每个字段的名称,如表单中显示的那样,后跟用户的值。

下面的代码将循环遍历您的所有字段,并将它们排列成一个带有 FieldName 和 Value 的 QueryString;

        string urlOfForm = HttpContext.Current.Request.Url.AbsolutePath;

        var queryString = new StringBuilder("?");
        foreach (AdaptedControlResult field in fields)
        {
            queryString.Append(string.Format("{0}={1}&", field.FieldName, field.Value));
        }

        urlOfForm = urlOfForm + queryString;

        HttpContext.Current.Response.Redirect(urlOfForm);

Sitecore 随后会自动使用这些值填充适当的字段,从而满足您的要求。

编辑

我发现抛出的大多数异常都会将用户带回到填充了值的表单。然后,您可以传递写入 CRM 失败的原因。请参阅下面的示例

    if (submitFailed)
    {
        throw new Exception("The email address entered already exists in our System");
    }

复杂性在于动态换出 Save Action Failed Message 以显示此 Exception Message。我找到的所有关于自定义保存操作消息的帖子都指出,唯一真正的方法是通过自定义 Save Action 重定向到显示不同消息的不同页面。哪个不符合你的要求。

我找到了您需要修补 FormSubmitFailedArgsSubmitFailedArgs 的管道参数。前者需要进行以下更改

public FormSubmitFailedArgs(ID formID, AdaptedResultList fields, ID actionFailed, Exception ex)
      : base(formID, actionFailed, ex)
        {
            this.Fields = fields;
            this.ErrorMessage = ex.Message;
    }

后者需要

public SubmitFailedArgs(ID formID, ID actionFailed, string errorMessage, Exception innerException)
    {
      this.FormID = formID;
      this.ActionFailed = actionFailed;
      this.ErrorMessage = innerException.Message;
      this.InnerException = innerException;
    }

提交消息的位置和样式:

您需要找到 FormRender 子布局文件,默认为 website\sitecore modules\Web\Web Forms for Marketers\Control\SitecoreSimpleFormAscx.ascx 在那里您会找到一个名为 SubmitSummary 的组件,它会呈现提交消息,因此将其移动到您需要的位置。

另请注意,它引用了 CssClass scfSubmitSummary 这是更改消息样式所需的目标。这个答案已经很长了,所以我不会一一列举如何更改 class 的样式,例如,请参见此处 - http://www.awareweb.com/awareblog/10-1-13-wffmguide

管道修补

我已经深入挖掘,为了使用我们为使用异常错误消息而创建的自定义 Args,您需要控制最终使用这些 Args 的管道,这是处理器 Sitecore.Form.Core.Pipelines.FormSubmit.FormatMessage, Sitecore.Forms.Core <errorSubmit> 管道。

根据我的调查,它不应该花费太多精力然后它就是修补它的问题,您可以直接修改 Sitecore.Forms.config 或使用 [=30] 中的配置文件中的 patch:instead =] 文件夹 - 请在此处查看 more info.

一种选择是创建自定义表单验证操作。您 可以 在此处保存数据,尽管最好在此处根据您的 API 验证数据,然后在自定义保存操作中保存数据,因为这看起来更合乎逻辑关于 WFFM 的运作方式。

using Sitecore.Data;
using Sitecore.Form.Core.Controls.Data;
using Sitecore.Form.Core.Submit;
using System;
using System.Collections.Generic;

namespace Custom.WFFM
{
    public class CustomVerificationStep : BaseCheckAction
    {
        public string FailedMessage { get; set; }

        public override void Execute(ID formid, IEnumerable<ControlResult> fields)
        {
            // Call your API
            // You have access to the fields, so you can pass them through as parameters to your if needed
            bool flag = ServiceAPI.ValidateUserData(param1, param2, etc);

            if (!flag)
            {
                throw new Exception(string.Format(this.FailedMessage ?? "There was an error while verifying the data against the service call"));
            }
        }

        public override ActionState QueryState(ActionContext context)
        {
            return ActionState.DisabledSingleCall;
        }
    }
}

/sitecore/system/Modules/Web Forms for Marketers/Settings/Actions/Form Verification下创建对应的Verification Action:

您可以通过在 Parameters 字段中将错误消息设置为 <FailedMessage>Custom Failed Error Message</FailedMessage> 来更改错误消息。

然后将您的验证步骤添加到您的表单中:

如果每个表单需要不同的错误消息,则可以将错误消息设置为从“错误消息”选项卡中显示。

然后用户将返回到相同的状态,而不会调用任何保存操作并且表单字段仍会填写。