将 htmldb_Get 转换为 apex.server.process

Converting htmldb_Get to apex.server.process

我们已将 apex 从 3.2 升级到 5.1.1。我们在 jquery 中使用函数 htmldb_get。但是这个功能在最新的版本中已经被oracle取消支持了。现在我们正在尝试用 apex.server.process(oracle 推荐)重写相同的内容。有人可以建议如何重写以下语句吗?

var a=new htmldb_Get(null,&APP_ID.,"APPLICATION_PROCESS=DUMMY",&APP_PAGE_ID.);

htmldb_Get.get 是一个同步 api。这意味着当您调用 get() 时,您将得到结果,下面的代码将可以访问该结果。 新的 api 是异步的。结果将被获取,但可能会或可能不会立即可用。这是人们在迁移到这个新 api 时最常犯的错误。

您没有 post 更多代码,但请注意这很重要。现在您只post编辑了如何设置htmlDb_Get 对象。您还没有打电话给 get

例如,假设代码如下所示:

var a=new htmldb_Get(null,&APP_ID.,"APPLICATION_PROCESS=DUMMY",&APP_PAGE_ID.);
var result = a.get();

var result2 = doSomethingWithResult(result);
...
$s('Px_ITEM1', result2);

"simply" 将 .get() 替换为 apex.server.process 是不够的。它不会以这种方式映射或工作。您必须考虑到 returning 结果可能需要一段时间。 API(以及 ajax 的运行方式)只是实例化一个调用,在将来的某个时间点 return 返回结果。它不会阻塞代码(= 线程),这与同步调用不同(它也会阻塞浏览器的 UI)。因此,如果您替换上面的代码并在之后立即调用与结果相关的代码,假设结果在那里,将会引起您的头疼,如:"sometimes it's there and other times it isn't - what's happening?".
因此,在 apex.server.process 上提示 "done" 函数,该函数在调用结束时执行(= 结果已从服务器 return 编辑)。

apex.server.process("SOME_PROCESS").done(function(pData){
  var result2 = doSomethingWithResult(pData);
  $s('Px_ITEM1', result2);
});

NOT 类似于:

apex.server.process("SOME_PROCESS").done(function(pData){
  var result = pData;
});

var result2 = doSomethingWithResult(pData);
$s('Px_ITEM1', result2);

此外,请注意 apex.server.process 默认情况下需要返回 JSON 字符串。不这样做会导致弹出错误。如果您不想在调用的进程中更改 return 值,您可以将预期数据类型更改为文本:

apex.server.process("SOME_PROCESS", {}, {dataType:"text"})