我有一个动态操作执行以下操作,
提交页面,
成功警报消息,
注销并重定向到另一个网站(www.google.com),
并且页面中有两个必需的项目。
当按下按钮并且该项目为空时,会出现成功警报消息,然后系统显示错误(该项目是必需的)。仅当过程和验证完成且没有错误,并且在警报消息中按下“确定”时,如何才能显示成功的警报消息重定向到网站并从会话中注销
您可以采用不同的方法来解决这个问题。您当前正在使用动态操作和页面级验证以及流程的组合,这些验证和流程不能很好地协同工作。我建议您将所有逻辑移至动态操作。以下是执行我认为您想要执行的操作的分步说明。您可以从中学习,然后将您想要的内容集成回您的解决方案中。
选择默认为动态操作创建的显示操作。将操作设置为执行 PL/SQL 代码,并将以下代码复制粘贴到PL/SQL 代码属性中。
declare
l_result_obj json_object_t := json_object_t();
l_errors_arr json_array_t := json_array_t();
l_error_obj json_object_t;
begin
if :P17_FIRST_NAME is null
then
l_error_obj := json_object_t();
l_error_obj.put('pageItem', 'P17_FIRST_NAME');
l_error_obj.put('message', 'First Name is required.');
l_errors_arr.append(l_error_obj);
end if;
if :P17_LAST_NAME is null
then
l_error_obj := json_object_t();
l_error_obj.put('pageItem', 'P17_LAST_NAME');
l_error_obj.put('message', 'Last Name is required.');
l_errors_arr.append(l_error_obj);
end if;
if l_errors_arr.get_size() > 0
then
l_result_obj.put('status', 'error');
l_result_obj.put('errors', l_errors_arr);
:P17_RESULT := l_result_obj.to_string();
return;
end if;
null; -- do "success" processing here
l_result_obj.put('status', 'success');
l_result_obj.put('message', 'Hi ' || :P17_LAST_NAME || ' ' || :P17_LAST_NAME ||
'! You will now be redirected to Google.');
:P17_RESULT := l_result_obj.to_string();
end;
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,验证现在正在流程内完成。PL/SQL 代码使用 Oracle 12.2 中引入的 JSON 类型。如果您使用的是旧版本的数据库,则可以调整代码以使用 APEX_JSON。
选择默认为动态操作创建的显示操作。将“操作”设置为“执行 JavaScript 代码”,并将以下代码复制粘贴到“代码”属性中。
var result = JSON.parse($v('P17_RESULT'));
apex.message.clearErrors();
if (result.status === 'error') {
for (var idx = 0; idx < result.errors.length; idx++) {
result.errors[idx].type = 'error';
result.errors[idx].location = ['page', 'inline'];
result.errors[idx].unsafe = false;
}
apex.message.showErrors(result.errors);
} else if (result.status === 'success') {
apex.message.alert(result.message, function(){
apex.navigation.redirect('https://google.com');
});
}
Run Code Online (Sandbox Code Playgroud)
JavaScript 代码获取该过程的结果并显示错误消息或警报。我使用apex.message.alert而不是apex.message.showPageSuccess因为前者支持消息被消除时的回调。当消息被忽略时,apex.navigation.redirect将用户带到 Google。
最终应该是这样的:
我希望这里有足够的信息让您了解正在发生的事情。如果您有任何疑问,请告诉我。apex.navigation您可以在此处找到相关文档apex.message: https: //apex.oracle.com/jsapi
PS 以下是使用 APEX_JSON 的 PL/SQL 代码的示例。
declare
l_error_count pls_integer := 0;
l_result_obj clob;
begin
apex_json.initialize_clob_output;
apex_json.open_object();
apex_json.open_array('errors');
if :P17_FIRST_NAME is null
then
l_error_count := l_error_count + 1;
apex_json.open_object();
apex_json.write('pageItem', 'P17_FIRST_NAME');
apex_json.write('message', 'First Name is required.');
apex_json.close_object();
end if;
if :P17_LAST_NAME is null
then
l_error_count := l_error_count + 1;
apex_json.open_object();
apex_json.write('pageItem', 'P17_LAST_NAME');
apex_json.write('message', 'Last Name is required.');
apex_json.close_object();
end if;
apex_json.close_array();
if l_error_count > 0
then
apex_json.write('status', 'error');
apex_json.close_object();
:P17_RESULT := apex_json.get_clob_output();
apex_json.free_output;
return;
end if;
null; -- do "success" processing here
apex_json.write('status', 'success');
apex_json.write('message', 'Hi ' || :P17_LAST_NAME || ' ' || :P17_LAST_NAME ||
'! You will now be redirected to Google.');
apex_json.close_object();
:P17_RESULT := apex_json.get_clob_output();
apex_json.free_output;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12547 次 |
| 最近记录: |