如何从 JavaScript 表达式调用进程 - Oracle Apex v21.1
How to call a Process from a JavaScript Expression - Oracle Apex v21.1
我有一个允许用户导入文件 (BLOB)、添加评论和日期的表单。
我必须创建一个验证函数来检查字段是否为空,原因如下:
当文件浏览器为空时,默认验证 returns“未定义”,并且当它是日期选择器时,验证文本不会被翻译,即使我在我的共享组件中翻译了消息:
- 因此,我决定创建一个带有 JavaScript 表达式的 动态操作 来检查字段并显示错误。
apex.message.clearErrors();
var chkErr = 0;
//declare fields
var arr = [
'P28_BLOB_DOCUMENT',
'P28_COMMENTAIRE_DOCUMENT',
'P28_DATE_DOCUMENT'
];
//declare Labels
var arrLabel = [
"Importer un document",
"Commentaire",
"Date d'exportation"
];
//Check NULL
for (var i in arr) {
if ($v(arr[i]).length == 0) {
apex.message.showErrors([
{
type: apex.message.TYPE.ERROR,
location: ["inline", "page"],
pageItem: arr[i],
message: arrLabel[i] + " doit contenir une valeur",
unsafe: false
}
]);
chkErr = 1;
}
}
if ( chkErr == 0 ) {
/* Custom dynamic action call when no error occurred */
apex.message.confirm("Do you want to import this document ?", function(okPressed) {
if (okPressed) {
apex.submit({request:'insertDocumentProcess'});
//apex.submit('insertDocumentProcess');
}
});
}
一切正常,如果我将这个 DA 添加到我的按钮,我就得到了验证:
现在真正的问题来了,如果我在 CREATE
按钮上使用动态操作,自动处理“表单 - 自动行处理 (DML)”不再执行。即使我尝试使用 apex.submit('insertDocumentProcess');
或 apex.submit({request:'insertDocumentProcess'});
调用它,但 INSERT
操作并未在数据库上执行。
以下是所有详细信息:
- 创建按钮,上面解释了代码
- 我尝试调用的创建表单时自动生成的过程
我错过了什么吗? INSERT
在我不添加验证函数时工作正常,那么问题是否与我调用流程的方式有关?还是因为我正在尝试插入 BLOB 文件但遗漏了一些东西?
我尝试了不同的选项,使用另一个 DA 调用进程,但没有成功。
我仍然收到流程结束时的成功消息,显示“已创建行”,但它没有出现在数据库中。它仍然可以确认我正在成功调用该过程吗?
提前致谢,
在您的动态操作 checkErrors
中添加一个 Client-side Condition
。选择 JavaScript expression
验证文本字段是否通过验证
例子
(
apex.item('P28_BLOB_DOCUMENT').isEmpty() ||
apex.item('P28_COMMENTAIRE_DOCUMENT').isEmpty() ||
apex.item('P28_DATE_DOCUMENT').isEmpty()
)
True action
应该是验证空字段的 JavaScript 代码(您在上面发布的代码)。
apex.message.clearErrors();
var chkErr = 0;
//declare fields
var arr = [
'P28_BLOB_DOCUMENT',
'P28_COMMENTAIRE_DOCUMENT',
'P28_DATE_DOCUMENT'
]; //this is the code you pasted above
False action
应该是一个 Action: Submit Page
并填写选项 Request / Button Name
: CREATE
告诉 APEX 你想要 Insert
或 SAVE
如果你想 Update
,这将重现正常提交的相同行为。
如果您有任何问题,请告诉我。
我有一个允许用户导入文件 (BLOB)、添加评论和日期的表单。
我必须创建一个验证函数来检查字段是否为空,原因如下:
当文件浏览器为空时,默认验证 returns“未定义”,并且当它是日期选择器时,验证文本不会被翻译,即使我在我的共享组件中翻译了消息:
- 因此,我决定创建一个带有 JavaScript 表达式的 动态操作 来检查字段并显示错误。
apex.message.clearErrors();
var chkErr = 0;
//declare fields
var arr = [
'P28_BLOB_DOCUMENT',
'P28_COMMENTAIRE_DOCUMENT',
'P28_DATE_DOCUMENT'
];
//declare Labels
var arrLabel = [
"Importer un document",
"Commentaire",
"Date d'exportation"
];
//Check NULL
for (var i in arr) {
if ($v(arr[i]).length == 0) {
apex.message.showErrors([
{
type: apex.message.TYPE.ERROR,
location: ["inline", "page"],
pageItem: arr[i],
message: arrLabel[i] + " doit contenir une valeur",
unsafe: false
}
]);
chkErr = 1;
}
}
if ( chkErr == 0 ) {
/* Custom dynamic action call when no error occurred */
apex.message.confirm("Do you want to import this document ?", function(okPressed) {
if (okPressed) {
apex.submit({request:'insertDocumentProcess'});
//apex.submit('insertDocumentProcess');
}
});
}
一切正常,如果我将这个 DA 添加到我的按钮,我就得到了验证:
现在真正的问题来了,如果我在 CREATE
按钮上使用动态操作,自动处理“表单 - 自动行处理 (DML)”不再执行。即使我尝试使用 apex.submit('insertDocumentProcess');
或 apex.submit({request:'insertDocumentProcess'});
调用它,但 INSERT
操作并未在数据库上执行。
以下是所有详细信息:
- 创建按钮,上面解释了代码
- 我尝试调用的创建表单时自动生成的过程
我错过了什么吗? INSERT
在我不添加验证函数时工作正常,那么问题是否与我调用流程的方式有关?还是因为我正在尝试插入 BLOB 文件但遗漏了一些东西?
我尝试了不同的选项,使用另一个 DA 调用进程,但没有成功。
我仍然收到流程结束时的成功消息,显示“已创建行”,但它没有出现在数据库中。它仍然可以确认我正在成功调用该过程吗?
提前致谢,
在您的动态操作 checkErrors
中添加一个 Client-side Condition
。选择 JavaScript expression
验证文本字段是否通过验证
例子
(
apex.item('P28_BLOB_DOCUMENT').isEmpty() ||
apex.item('P28_COMMENTAIRE_DOCUMENT').isEmpty() ||
apex.item('P28_DATE_DOCUMENT').isEmpty()
)
True action
应该是验证空字段的 JavaScript 代码(您在上面发布的代码)。
apex.message.clearErrors();
var chkErr = 0;
//declare fields
var arr = [
'P28_BLOB_DOCUMENT',
'P28_COMMENTAIRE_DOCUMENT',
'P28_DATE_DOCUMENT'
]; //this is the code you pasted above
False action
应该是一个 Action: Submit Page
并填写选项 Request / Button Name
: CREATE
告诉 APEX 你想要 Insert
或 SAVE
如果你想 Update
,这将重现正常提交的相同行为。
如果您有任何问题,请告诉我。