如何从 JavaScript 表达式调用进程 - Oracle Apex v21.1

How to call a Process from a JavaScript Expression - Oracle Apex v21.1

我有一个允许用户导入文件 (BLOB)、添加评论和日期的表单。

我必须创建一个验证函数来检查字段是否为空,原因如下:

当文件浏览器为空时,默认验证 returns“未定义”,并且当它是日期选择器时,验证文本不会被翻译,即使我在我的共享组件中翻译了消息:

  1. 因此,我决定创建一个带有 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 操作并未在数据库上执行。

以下是所有详细信息:

  1. 创建按钮,上面解释了代码

  1. 我尝试调用的创建表单时自动生成的过程

我错过了什么吗? 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 你想要 InsertSAVE 如果你想 Update,这将重现正常提交的相同行为。

如果您有任何问题,请告诉我。