最適化表單會根據預先設定的驗證准則,驗證您在欄位中提供的輸入。 驗證准則參照最適化表單中欄位的可接受輸入值。 您可以根據與最適化表單搭配使用的資料來源來設定驗證准則。 例如,如果您使用REST風格的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
包含外部服務傳回的原始錯誤資料如果伺服器驗證錯誤消息未以標準格式顯示,則可以啟用非同步提交並在自適應表單提交中添加自定義錯誤處理程式,以將消息轉換為標準格式。
在新增自訂處理常式之前,您必須設定非同步提交的最適化表單。 執行下列步驟:
在最適化表單製作模式中,選取「表單容器」物件,並點選以開啟其屬性。
在Submission屬性區段中,啟用使用非同步提交。
選擇重新驗證server以在提交之前驗證伺服器上的輸入欄位值。
選擇提交操作:
點選以儲存屬性。
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表達式」(View SOM Expression),可以以自適應形式查看任何欄位的SOM表達式。
使用此自定義錯誤處理程式,最適化表單會將var som_map
中列出的欄位轉換為標準錯誤消息格式。 因此,驗證錯誤訊息會以自適應表單的欄位層級顯示。
執行以下步驟,使用規則編輯器的叫用服務操作添加錯誤處理程式,將自定義錯誤結構轉換為標準錯誤結構:
根據此規則,當步驟2中定義的欄位變更且您從表單中的欄位中跳出時,您為Name、ID和Status欄位輸入的值會立即生效。
從模式選擇下拉清單中選擇代碼編輯器。
點選編輯代碼。
從現有代碼中刪除以下行:
guidelib.dataIntegrationUtils.executeOperation(operationInfo, inputs, outputs);
撰寫規則,將自訂錯誤結構轉換為標準錯誤結構,並點選Done以儲存規則。
例如,在結尾加入下列范常式式碼,將自訂錯誤結構轉換為標準錯誤結構:
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
中列出的欄位轉換為標準錯誤消息格式。 因此,驗證錯誤訊息會以自適應表單的欄位層級顯示。