自适应表单的标准验证错误消息

自适应表单基于预设验证标准验证您在字段中提供的输入。 验证标准引用自适应表单中字段的可接受输入值。 您可以根据与自适应表单一起使用的数据源设置验证标准。 例如,如果使用RESTful Web服务作为数据源,则可以在Swagger定义文件中定义验证条件。

如果输入值符合验证标准,则这些值将提交到数据源。 否则,自适应表单会显示一条错误消息。

与此方法类似,自适应表单现在可以与自定义服务集成以执行数据验证。 如果输入值不符合验证标准,并且服务器返回的验证错误消息为标准消息格式,则错误消息在表单的字段级别显示。

如果输入值不满足验证标准并且服务器验证错误消息不是标准消息格式,自适应表单提供将验证错误消息转换成标准格式以便它们在表单的字段级别显示的机制。 可以使用以下任意两种方法将错误消息转换为标准格式:

  • 在自适应表单提交时添加自定义错误处理程序
  • 使用规则编辑器向“调用服务”操作添加自定义处理程序

本文介绍了验证错误消息的标准格式以及将错误消息从自定义格式转换为标准格式的说明。

标准验证错误消息格式

如果服务器验证错误消息采用以下标准格式,自适应表单将在字段级别显示错误:

   {
    errorCausedBy : "SERVER_SIDE_VALIDATION/SERVICE_INVOCATION_FAILURE"
    errors : [
        {
             somExpression  : <somexpr>
             errorMessage / errorMessages : <validationMsg> / [<validationMsg>, <validationMsg>]

        }
    ]
    originCode : <target error Code>
    originMessage : <unstructured error message returned by service>
}

地点:

  • errorCausedBy 描述失败的原因
  • errors 提及未通过验证条件的字段的SOM表达式以及验证错误消息
  • originCode 包含外部服务返回的错误代码
  • originMessage 包含外部服务返回的原始错误数据

配置自适应表单提交以添加自定义处理函数

如果服务器验证错误消息未以标准格式显示,您可以启用异步提交并在自适应表单提交时添加自定义错误处理程序,以将消息转换为标准格式。

配置异步自适应表单提交

在添加自定义处理函数之前,必须配置自适应表单以进行异步提交。 执行以下步骤:

  1. 在自适应表单创作模式中,选择表单容器对象,然后点按自适应表单属性以打开其属性。

  2. 在​提交​属性部分中,启用​使用异步提交

  3. 选择​在服务器​上重新验证,以在提交之前验证服务器上的输入字段值。

  4. 选择提交操作:

    • 如果您使用基于表单数据模型的RESTful Web服务作为数据源,请选择​使用表单数据模型​提交并选择相应的数据模型。
    • 如果您使用RESTful Web服务作为数据源,请选择​提交到REST端点​并指定​重定向URL/路径

    自适应表单提交属性

  5. 点按保存以保存属性。

在自适应表单提交上添加自定义错误处理程序

AEM Forms为表单提交提供了开箱即用的成功和错误处理程序。 处理程序是客户端函数,根据服务器响应执行。 提交表单时,数据将传输到服务器进行验证,该服务器返回对客户端的响应,其中包含有关提交成功或错误事件的信息。 该信息作为参数传递给相关处理函数以执行该函数。

执行以下步骤,在自适应表单提交时添加自定义错误处理程序:

  1. 在创作模式下打开自适应表单,选择任何表单对象,然后点按以打开规则编辑器。
  2. 在“表单对象”树中选择​表单,然后点按​创建
  3. 从“事件”下拉列表中选择“提交​]错误”。[
  4. 编写一个规则以将自定义错误结构转换为标准错误结构,然后点按​完成​以保存规则。

以下是将自定义错误结构转换为标准错误结构的示例代码:

var data = $event.data;
var som_map = {
    "id": "guide[0].guide1[0].guideRootPanel[0].Pet[0].id_1[0]",
    "name": "guide[0].guide1[0].guideRootPanel[0].Pet[0].name_2[0]",
    "status": "guide[0].guide1[0].guideRootPanel[0].Pet[0].status[0]"
};

var errorJson = {};
errorJson.errors = [];

if (data) {
    if (data.originMessage) {
        var errorData;
        try {
            errorData = JSON.parse(data.originMessage);
        } catch (err) {
            // not in json format
        }

        if (errorData) {
            Object.keys(errorData).forEach(function(key) {
                var som_key = som_map[key];
                if (som_key) {
                    var error = {};
                    error.somExpression = som_key;
                    error.errorMessage = errorData[key];
                    errorJson.errors.push(error);
                }
            });
        }
        window.guideBridge.handleServerValidationError(errorJson);
    } else {
        window.guideBridge.handleServerValidationError(data);
    }
}

var som_map将要转换为标准格式的自适应表单字段的SOM表达式列表。 您可以通过点按字段并选择​视图SOM表达式,在自适应表单中视图任何字段的SOM表达式。

使用此自定义错误处理程序,自适应表单会将var som_map中列出的字段转换为标准错误消息格式。 结果,验证错误消息在自适应表单的字段级别显示。

使用“调用服务”操作添加自定义处理程序

请执行以下步骤,添加错误处理程序以使用规则编辑器调用服务操作将自定义错误结构转换为标准错误结构:

  1. 在创作模式下打开自适应表单,选择任何表单对象,然后点按规则编辑器以打开规则编辑器。
  2. 点按​创建
  3. 在规则的​When​部分中创建条件。 例如,当字段]的名称发生更改时。 [从​选择状态​下拉列表中选择​将更改​以达到此条件。
  4. 在​Then​部分,从​选择操作​下拉列表中选择​调用服务
  5. 从​Input​部分选择Post服务及其相应的数据绑定。 例如,如果要验证自适应表单中的​名称ID​和​状态​字段,请选择帖子服务(pet),然后在​输入​部分中选择pet.name、pet.id和pet.status。

根据此规则,只要第2步中定义的字段发生更改,并跳出表单中的字段,您为​NameID​和​Status​字段输入的值即被验证。

  1. 从模式选择下拉列表中选择​代码编辑器

  2. 点按​编辑代码

  3. 从现有代码中删除以下行:

    guidelib.dataIntegrationUtils.executeOperation(operationInfo, inputs, outputs);
    
  4. 编写一个规则以将自定义错误结构转换为标准错误结构,然后点按​完成​以保存规则。
    例如,在末尾添加以下示例代码,将自定义错误结构转换为标准错误结构:

    var errorHandler = function(jqXHR, data) {
    var som_map = {
        "id": "guide[0].guide1[0].guideRootPanel[0].Pet[0].id_1[0]",
        "name": "guide[0].guide1[0].guideRootPanel[0].Pet[0].name_2[0]",
        "status": "guide[0].guide1[0].guideRootPanel[0].Pet[0].status[0]"
    };
    
    
    var errorJson = {};
    errorJson.errors = [];
    
    if (data) {
        if (data.originMessage) {
            var errorData;
            try {
                errorData = JSON.parse(data.originMessage);
            } catch (err) {
                // not in json format
            }
    
            if (errorData) {
                Object.keys(errorData).forEach(function(key) {
                    var som_key = som_map[key];
                    if (som_key) {
                        var error = {};
                        error.somExpression = som_key;
                        error.errorMessage = errorData[key];
                        errorJson.errors.push(error);
                    }
                });
            }
            window.guideBridge.handleServerValidationError(errorJson);
        } else {
            window.guideBridge.handleServerValidationError(data);
        }
      }
    };
    
    guidelib.dataIntegrationUtils.executeOperation(operationInfo, inputs, outputs, null, errorHandler);
    

    var som_map将要转换为标准格式的自适应表单字段的SOM表达式列表。 您可以通过点按字段并从“更多选项”()菜单中选择​[!UICONTROL ​视图SOM表达式​],以自适应形式视图任何字段的SOM表达式。

    请确保将示例代码的以下行复制到自定义错误处理程序:

    guidelib.dataIntegrationUtils.executeOperation(operationInfo, inputs, outputs, null, errorHandler);
    

    executeOperation API包含基于新的自定义错误处理程序的nullerrorHandler参数。

    使用此自定义错误处理程序,自适应表单会将var som_map中列出的字段转换为标准错误消息格式。 结果,验证错误消息在自适应表单的字段级别显示。

On this page

Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now