自适应表单根据预先设置的验证标准验证您在字段中提供的输入。 验证标准引用自适应表单中字段的可接受输入值。 您可以根据与自适应表单一起使用的数据源设置验证条件。 例如,如果您使用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
包含外部服务返回的原始错误数据如果服务器验证错误消息未以标准格式显示,您可以启用异步提交并在自适应表单提交时添加自定义错误处理程序,以将消息转换为标准格式。
在添加自定义处理程序之前,必须配置自适应表单以进行异步提交。 执行以下步骤:
在自适应表单创作模式中,选择表单容器对象,然后点按以打开其属性。
在提交属性部分,启用使用异步提交。
选择在服务器上重新验证,以在提交之前验证服务器上的输入字段值。
选择提交操作:
点按以保存属性。
AEM Forms为表单提交提供开箱即用的成功和错误处理程序。 处理函数是基于服务器响应执行的客户端函数。 提交表单时,数据会被传输到服务器进行验证,服务器会向客户端返回一个响应,其中包含有关提交成功或错误事件的信息。 信息作为参数传递给相关处理函数以执行该函数。
执行以下步骤,在自适应表单提交时添加自定义错误处理程序:
以下是将自定义错误结构转换为标准错误结构的示例代码:
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
中列出的字段转换为标准错误消息格式。 结果,验证错误消息在自适应表单的字段级别显示。
执行以下步骤,添加错误处理程序,以使用规则编辑器的调用服务操作将自定义错误结构转换为标准错误结构:
根据此规则,只要第2步中定义的字段发生更改并且跳出表单中的字段,您为名称、ID和状态字段输入的值即被验证。
从模式选择下拉列表中选择代码编辑器。
点按编辑代码。
从现有代码中删除以下行:
guidelib.dataIntegrationUtils.executeOperation(operationInfo, inputs, outputs);
编写一个规则以将自定义错误结构转换为标准错误结构,然后点按完成以保存该规则。
例如,在结尾处添加以下示例代码,将自定义错误结构转换为标准错误结构:
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表达式。 您可以以自适应形式视图任何字段的SOM表达式,方法是点按字段,然后从更多选项(…)菜单中选择视图SOM表达式。
确保将示例代码的以下代码行复制到自定义错误处理程序:
guidelib.dataIntegrationUtils.executeOperation(operationInfo, inputs, outputs, null, errorHandler);
executeOperation API包含基于新的自定义错误处理程序的null
和errorHandler
参数。
使用此自定义错误处理程序,自适应表单将var som_map
中列出的字段转换为标准错误消息格式。 结果,验证错误消息在自适应表单的字段级别显示。