川上真一
mulcc****@nifty*****
2006年 3月 10日 (金) 00:35:02 JST
こんにちは。川上です。 >そこで質問なのですが、CongaRequestを同期リクエストにして >ログインが完了した後にデスクトップ初期化処理を行おうとしていますが >どうも常に非同期になってしまいます。 一応以下に回答を書いてみますが, 前提として,門田さんが今やろうとしていることは,以下のような処理 であっていますでしょうか? 1. init-user.r を呼び出す。 2. ログインダイアログが表示され,ユーザ認証が行なわれる。 3. ユーザ認証がOKならば,init-user.r で定義されている処理 が呼び出される。 4. init-user.r を呼び出した後のスクリプトが実行される。 とりあえず,上のようなことをやろうとしている,という認識で 以下書きます。 まず,CongaRequest の send メソッドは,デフォルト「同期」なので, new CongaRequest().send('init-user.r'); とすれば,リクエストの結果表示が行なわれるまでは同期処理となります。 ただし, 「指定したリクエストの結果表示かどうか(ここでは,init-user.r の 結果表示かどうか)ということをチェックして,もし指定された リクエストと別の結果が表示された場合は,以降の処理を止める」 というようなことはやっていないので, 現在は,ログインダイアログが出た瞬間に,その次の処理が行なわれて いるのではないかと思います 上記のようなチェックをして処理を止める方法は, 今のところちょっと思いつきませんので, 以下の方法を試してもらえますでしょうか。 ・init-user.r のリクエスト定義中,<result> タグの中に, スクリプト実行命令を記述する。 例: <request id="init-user.r"> ... (略) ... <result> ... (略) ... <script value="IDesktop.init()" /> </result> </request> ※value="..." の中には通常のファンクションも記述できます。 (eval で実行しているだけなので...) ※なお,上記を実行できるようにするために,conf/template.xml と dhtml/conga.js (CongaResponse.js)を修正しましたので CVS から最新を取得してお試しください。