2012-02-09 3 views
2

私は2つの日付フィールドと検索ボタンを持つVFページを持っています。VFページをポップアップとして開き、そのVFページにパラメータを渡す方法は?

検索の結果、いくつかの結果が得られます。私はまた、pdfとしてレンダリングされた新しいVFページだけであるそれらの結果を印刷する別のボタンを持っています。

この日付の値をprintVFページに渡したいとします。私はまた、このページをポップアップとして表示したい。

私はパラメータを設定したpagerefを持っています。このページをポップアップとして開く必要があるので、window.openでpagerefを使用する方法を見つける必要があります。

誰でもこれを達成するためのアイデアはありますか?

おかげ

Prady

EDIT:私がやったことは、コントローラにURLを構築し、window.openのコントローラ変数を使用しました。非常に奇妙なことが起きています...最初に検索結果が表示され、印刷ボタンをクリックすると、日付は文字列に表示されません。今日の日付はデフォルトになります。印刷ボタンを再度クリックすると、日付が正しく入力されますdateinputからのURLに

 public Class1(){ 
     System.debug('inside constructor'); 
     fieldContainer=new DummyTable__c(); // it contains date fields for date inputs 
     date todays=date.today(); 

    If (fieldContainer.Start_Date__c== null) 
    { 
     startdate1=todays; 
    }else 
    { 
    startdate1=fieldContainer.Start_Date__c; 
    } 

    If (fieldContainer.End_Date__c== null) 
    { 
     enddate1=todays; 
    } 
    else 
    { 
    enddate1=fieldContainer.End_Date__c; 
    } 
    } 

    public void search() 
{ 

    startdate1=fieldContainer.Start_Date__c; 
    system.debug('startdate1'+startdate1); 


    enddate1=fieldContainer.End_Date__c; 
    system.debug('enddate1'+enddate1); 
    system.debug('inside search()....after clicking search button'); 
    system.debug('startdate1'+startdate1); 
    system.debug('url'+url); 
    LoadData(); 
} 

    public string geturl() 
{ 
    url='apex/VF1?Pstartdate='+string.valueof(startdate1)+'&Penddate='+string.valueof(enddate1); 
    return url; 
} 

public string geturlRec() 
{ 
    urlRec='apex/VF2?Pstartdate='+string.valueof(startdate1)+'&Penddate='+string.valueof(enddate1); 
    return urlRec; 
}  

VFページ

<script language="javascript" type="text/javascript"> 
    function printOut() 
    { 

    window.open("{!url}"); 

     } 
    function printIn() 
    { 
    window.showModalDialog("{!urlRec}","dialogWidth:800px; dialogHeight:200px; center:yes"); 

    } 
    </script> 


    <div style="width:900px;margin:0 auto;" id="pagediv"> 
    <span style="padding-left:30px;padding-right:10px">From </span><apex:inputfield value="{!fieldContainer.Start_Date__c}" id="startdt" style="padding-left:5px;padding-right:20px;"/> 
    <span style="padding-left:30px;padding-right:10px">To </span><apex:inputfield value="{!fieldContainer.End_Date__c}" id="enddt" style="padding-left:5px;padding-right:20px;"/> 

    <span style="padding-left:30px;padding-right:10px"><apex:commandButton action="{!search}" value="Search" ReRender="dtshipdep,dtshiprec,shippageblock">  </apex:commandButton></span> 

 <apex:commandButton action="{!saveDeparted}" value="Update " ReRender="dtshipdep"></apex:commandButton> 
    <apex:commandButton value="Print " onclick="printOut();"></apex:commandButton> 

答えて

5

salesforceがURLを生成するには、URLFOR()関数を使用することをお勧めします。または、拡張/コントローラコードでPageReferenceを作成することもできます。

フォームデータがURLの一部になる前に、サーバーに投稿して新しく生成されたpageReferenceに戻ってくる必要があります。そのため、最初の実行でフォームデータをクリックすることはできません。私は、このサーバ側はVF

<apex:outputBlock rendered="{!openPopup}"> 
    <script> 
     window.open('{!myTargetUrl}'); 
    <script> 
</apex:outputBlock> 

openPopupにこのコードを使用している解決するために使用

一つの方法は、このセグメントは、(過渡レンダリングされるかどうかを制御するブール値であるあなたは、オープンをクリックしたとき、あなたはこれをtrueに設定しますボタン)。 myTargetPageReferenceベースのURLです(代わりに、URLFORを使用してVFでURLを生成することもできます)。これ以上質問がある場合は、尋ねてください。

もう一つの選択肢は、VFでJavaScriptのコードをクリックしてクリックイベントをクリックし、URLクライアント側をビルドして開くことです。 $ Componentを使用してフォームフィールドを見つけることができます。

+0

mmmixの場合、ユーザーが検索ボタンをクリックすると、フォームフィールドがサーバーに送信されます。私は検索結果のみを印刷しようとしています。したがって、フォームフィールドの値は、検索が完了したときに正しく設定されています。しかし、問題は印刷ボタンで初めてのようです。 – Prady

+0

プリントアウトボタンにJSハンドラがあり、前のサーバコールで生成されたURLが呼び出されます。その後、ページがサーブを呼び出し、リフレッシュ(URLを含む)して2回目のクリックが機能します。あなたはイベントのシーケンスで明確にする必要があります – mmix

+0

感謝mmix ...それは働いた:) – Prady

3

あなたがのQueryStringに必要な値を渡すことができるはずです。

window.open("/apex/YourPage?VariableName=Value&SecondVariableName=SecondValue"); 

その後、あなたは変数が新しいページに送信したら、PageReferenceを使用してそれらを取得することができます。

+4

動的クエリの一部として使用する前に、パラメータに 'String.escapeSingleQuotes'を必ず呼び出してください。 –

+0

ありがとうマシュー...私がしたことは、コントローラにurlを構築し、wondow.openでコントローラ変数を使用することでした。非常に奇妙なことが起こっています...初めての検索結果が表示され、ボタンをクリックすると、日付が文字列に表示されなくなります..再度印刷ボタンをクリックすると、日付がURLに正しく入力されます – Prady

+1

mmixその問題を解決するための答え。彼のソリューションはおそらくあなたのためにうまくいくでしょう。もう1つのオプションは、[Ajax Toolkit](http://www.salesforce.com/us/developer/docs/apexcode/index_CSH.htm#apex_and_ajax.htm)を使用して、Apexメソッドを呼び出すのではなくURLをまとめることですVisualforceバインディング –

関連する問題