2012-02-09 2 views
2

У меня есть страница VF, которая имеет 2 поля даты и кнопку поиска.Как открыть страницу VF как всплывающее окно и передать параметры на эту страницу VF?

При нажатии на поиск я получаю некоторые результаты. У меня также есть еще одна кнопка для печати тех результатов, которые представляют собой не что иное, как новую страницу VF, представленную как pdf.

Я хочу передать эти значения даты на страницу printVF. Я также хочу, чтобы эта страница отображалась как всплывающее окно.

У меня есть pageref с параметрами. Поскольку мне нужно открыть эту страницу как всплывающее окно, мне нужно найти способ использования pageref в окне window.open.

У кого-нибудь есть идеи о том, как это сделать?

Благодаря

Пради

EDIT: Что я сделал построить URL в контроллере и использовать переменный контроллер в window.open. Что-то очень странное происходит ... Когда отображаются результаты поиска в первый раз, и я нажимаю кнопку печати, даты не заполняются в строке, они по умолчанию до сегодняшнего дня. Если я снова нажму кнопку печати, даты будут заполнены правильно по 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 Page

<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-адреса, он должен быть отправлен на сервер и возвращаться к вновь созданной страницеReference, поэтому вы не можете нажать на нее в первом прогоне.

Один из способов я использовал для решения этой проблемы на стороне сервера использует этот код на VF

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

openPopup является BOOL, которые контролируют ли визуализируются этот сегмент (переходным, вы установите его верно, когда вы нажимаете на открытом кнопка). myTarget - это URL-адрес PageReference (в качестве альтернативы вы можете использовать URLFOR здесь для создания URL-адреса в VF). Если у вас есть еще вопросы, спросите.

Другой вариант - иметь код javascript в VF, который будет нажимать кнопку нажатия кнопки и строить клиентскую сторону URL-адреса и открывать его. Вы можете использовать $ Component для поиска полей формы.

+0

mmmix, в моем случае поля формы отправляются на сервер, когда пользователь нажимает кнопку поиска. Я пытаюсь напечатать только результаты поиска. Значения полей формы заданы правильно, когда поиск завершен. Но проблема заключается в том, что проблема связана с кнопками печати в первый раз – Prady

+0

. Кнопка печати имеет обработчик JS, который вызывает Url, сгенерированный при предыдущем вызове сервера. Затем страница вызывает службу, обновляет (включая URL-адрес), поэтому ваш второй клик работает. Вы должны быть ясны в последовательности событий – mmix

+0

спасибо mmix ... это сработало :) – Prady

3

Вы должны быть в состоянии передать необходимые значения в QueryString.

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

Тогда, как только у вас есть переменные отправить на новую страницу, вы можете получить их с помощью PageReference.

String myVariable = PageReference.getParameters().get('VariableName'); 
+4

Обязательно вызовите 'String.escapeSingleQuotes' параметры, прежде чем использовать их как часть динамического запроса! –

+0

Спасибо, Мэтью ...Я сделал сборку url в контроллере и использовал переменную контроллера в wondow.open. Что-то очень странное происходит ... В первый раз отображаются результаты поиска, и я нажимаю кнопку, даты не заполняются в строке. Если я снова нажму кнопку печати, даты будут правильно заполнены на url – Prady

+1

Посмотрите mmix's ответьте на эту проблему. Его решение, вероятно, будет хорошо работать для вас. Другой вариант - использовать [Ajax Toolkit] (http://www.salesforce.com/us/developer/docs/apexcode/index_CSH.htm#apex_and_ajax.htm), чтобы собрать URL, а не использовать метод Apex, используя Связывание Visualforce. –

Смежные вопросы