0

コマンドボタンがあります。クリックすると、通話記録を保存して記録ページにリダイレクトします。その後、新しいウィンドウで新しいページを開き、通話に関連する新しいケースの編集ページを表示します。

私はこのようにやっています:

//Pseudocode
public PageReference saverecord(){
   create a new phone call record;
   insert record;
   if(createnewcase)
      create case;
      insert case;
      create editcaseURL;
   return phonerecord page;
}

クライアント側では、コマンドボタンで<apex:param name="newcase" value="true" assignTo="{!createNewCase}"/>、createnewcaseをtrueに設定するために使用します。ポップアップウィンドウを開くには、oncompletejavascriptを使用します。私はphonerecordとcaserecordを別々にテストして成功しました。しかし、それらを1つのクラスに入れると、ケースは作成されませんでした。そして、visualforceビューの状態ウィンドウで。ブール値のcreatenewcaseも見つかりません。

助けてください。

ありがとう

4

3 に答える 3

1

Apex / JavaScript で簡単に実装できます。

頂点コード:

// Defining two variables for the both records (case and phone)
public String caseId { get; set; }
public String phoneId { get; set; }

// Defining a boolean to render the JavaScript panel after saving
punlic Boolean redirectNow { get; set; }

public PageReference saverecord(){
    // Create a new phone call record;
    insert record;

    // Now reading a phone record id
    phoneId = record.id;

    if(createnewcase){
        create case;
        insert case;

        // Now reading a case id
        caseId = case.id;
    }

    // If case and phone are OK -> set this flag to true
    redirectNow = true;

    // We do not need to return a real page reference 
    // because we will redirecting with javascript
    return null;
}

そして、JavaScript を使用した Visualforce ページ:

<!-- A command button, that rerenders a panel with JavaScript -->
<apex:commandButton value="Save" action="{!saverecord}" reRender="doAfterSave"/>

<!-- This panel renders only after you will save the new records -->
<apex:outputPanel id="doAfterSave">
    <apex:outputPanel rendered="{!redirectNow}">
        <script>
            // First reading the id's
            var newCaseId = '{!caseId}';
            var newPhoneId = '{!phoneId}';

            if(newCaseId != '' && newPhoneId != '')
            {
                // Now opening a new window with case in edit mode
                window.open('/' + newCaseId + '/e');

                // And then redirecting the main page to the new phone record
                window.location = '/' + phoneId;
            }
        </script>
    </apex:outputPanel>
</apex:outputPanel>
于 2012-08-10T13:52:41.567 に答える
0

この記事は古くなっていますが、JavaScriptとポップアップを使用してこの作業を実行する必要がある場合(単にVisualforceページを使用してURLでパラメーターを渡すか、同じコントローラーを共有するVFページを使用して同じコンテキストを維持するのではなく、メンバー変数値など)、このチュートリアルを見てみましょう:チュートリアル:Yahoo!を使用したVisualforceのモーダルダイアログ ユーザーインターフェイスライブラリ

重要なトリックは、「ポップアップ」を実際には同じページの隠された側面にして、VisualforceのJavaScriptで値を渡すことに関連する問題を回避することです。

チュートリアルから:

新しいVisualforceページをポップアップするためのリンクまたはボタンを作成することは実際には非常に簡単であり、このポップアップを現在のページの上に表示することも非常に簡単です。この問題は、ポップアップで情報を収集し、その情報をポップアップを起動したページに戻したい場合に発生します。

問題は、window.open()を使用すると、新しいウィンドウが別のブラウザリクエストとして起動されることです。これはサーバーへの個別のリクエストであるため、新しいページは同じコントローラーコンテキスト/セッションを共有しません。2つのページが両方とも同じコントローラーの名前を使用している場合でも!これは、これらがブラウザレベルでの2つの異なるリクエストであるという事実によるものです。

于 2012-07-31T16:58:03.347 に答える
0

新しく作成したケースを編集モードで開きたい場合は、次のコードを使用します。

public PageReference saverecord(){
   create a new phone call record;
   insert record;
   if(createnewcase)
   {
      create case;
      insert case;
      return new PageReference('/' + case.Id + '/e');
   }
   else
     do other logic here

   return null;
于 2012-07-31T10:13:43.783 に答える