2017-05-02 3 views
0

アップグレードの頂点が3.2から5.1.1にアップグレードされました。私たちはjqueryで関数htmldb_getを使用しています。しかし、この機能は、最新のリリースではOracleによってサポートされなくなりました。これでapex.server.process(oracleの推奨事項)で書き直そうとしています。誰かが下の声明を書き直す方法について助言することができますか?htmldb_Getをapex.server.processに変換する

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

答えて

2

htmldb_Get.getは、同期APIです。これは、get()を呼び出したときに結果が得られ、次のコードがその結果にアクセスできることを意味します。 新しいAPIは非同期です。結果は取得されますが、すぐに利用可能な場合もあります。これは、この新しいAPIに移動するときに人々が行う最も一般的な間違いです。

あなたはコードを投稿しませんでしたが、これは重要であることに注意してください。今は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); 

「単に」apex.server.process.get()を置き換えるのに十分ではありません。そのようにマップしたり、動作させたりすることはありません。結果の返送にはしばらく時間がかかることを考慮する必要があります。 API(そしてAjaxの仕組み)は、単にある時点で結果を返す呼び出しを単にインスタンス化するだけです。同期呼び出し(ブラウザのUIもブロックする)とは異なり、コード(=スレッド)はブロックされません。したがって、結果を前提として、上記の結果依存コードを置き換えた場合、結果が「前提」であると仮定すると、頭が痛むような瞬間が発生します。
apex.server.processに「done」関数をキューイングします。これは、呼び出しが終了したときに実行されます(=結果がサーバーから返された)。

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

ませの線に沿って何か:また

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

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

、デフォルトでそのapex.server.processに注意してJSON文字列をバック期待しています。そうしないと、エラーがポップアップします。呼び出されたプロセスで戻り値を変更したくない場合は、期待されるデータ型をテキストに変更できます。

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

ニースの説明Tom! – hisnameismyname2

+0

偉大な説明トム。ありがとう! – Crazy2crack

+0

すばらしい説明!しかし、小さな修正。 htmldb_Getは非同期で動作できます。 get()を呼び出す代わりに、GetAsync()を呼び出してコールバック関数を渡す必要があります。 –

関連する問題