Передача значения STATIC / hardcoded в контроллер со страницы visualforce - PullRequest
0 голосов
/ 10 мая 2018

Я создаю 8 страниц Visualforce (VFP) для панели мониторинга, и из-за схожести данных, необходимых для каждого VFP, я надеюсь использовать один пользовательский контроллер (а не 8 контроллеров).

Единственной разницей между каждым VFP будет предложение WHERE оператора SOQL, найденного в контроллере.Моя мысль состоит в том, чтобы каждый VFP передавал статическую (неизменяемую / жестко запрограммированную) строку в контроллер для использования, как в предложении контроллера SOQL WHERE.Вот пример того, что я ищу:

Контроллер:

public class SalesRev_UpFrontFees {
    public String StageVal {get;set;}
    public Integer salesVal = 0;
    public Integer intTCV;

    public SalesRev_UpFrontFees(){
        getData();
        }

    public void getData() {

    //Insert code to pull the hardcoded 'StageVal' from visualforce pages

    String SoqlString = 'SELECT SUM(Total_Subscription_Fees__c) RevSum\n' +
                  'FROM Opportunity\n' +
                  'WHERE CloseDate >= 2018-01-01 AND CloseDate <= 2018-12-31\n' +
                  'AND Opportunity.RecordType.Name = \'Enterprise Opportunity\'\n' +
                  'AND StageName = \':StageVal\'';

    AggregateResult[] groupedResults = Database.query(SoqlString);

    objTCV = groupedResults[0].get('RevSum');
    intTCV = Integer.valueOf(objTCV);
    salesVal = (intTCV  == null) ? 0 : intTCV ;   
   } 
    /*public void setStageVal(String sStageVal) {
        StageVal = sStageVal;        
        } */

    public Integer getsalesVal() {
        return intTCV;
        }
}

Страница Visualforce:

    <apex:page controller="SalesRev_UpFrontFees">

        <head>
            <apex:includeScript value="{!URLFOR($Resource.VFGauge, 'VFGauge/jQuery/jquery-1.10.2.min.js')}" /> 
            <apex:includeScript value="{!URLFOR($Resource.VFGauge, 'VFGauge/jQuery/jquery-ui-1.10.2.custom.min.js')}" /> 

            <apex:includeScript value="{!URLFOR($Resource.Raphael, 'Raphael/resources/js/raphael.2.1.0.min.js')}" /> 
            <apex:includeScript value="{!URLFOR($Resource.Raphael, 'Raphael/resources/js/justgage.1.0.1.js')}" />
            <apex:stylesheet value="{!URLFOR($Resource.Raphael, 'Raphael/styles/style.css')}"/>
        </head>

        <apex:form id="myForm">

            <!--- Insert way to feed the controller a string value, e.g. String StageVal = 'Closed Won'--->

            <body>
                <apex:pageBlock id="xxx"> 
                    <div id="gauge1" style="width:320px; height:256px"></div>
                    <script type="text/javascript"> 

                    var g1 = new JustGage({      
                            id: "gauge1",
                            value: {!salesVal},
                            min: 0,
                            max: 1000000000,
                            title: "WW Sales Revenue",
                            levelColorsGradient: false,
                            gaugeWidthScale: 0.4,
                            valueFontSize: "5px"
                            });
                    </script>
                    <a id="linear-gauge" href=""></a>
                </apex:pageBlock>
            </body>
        </apex:form>
    </apex:page>

Я просмотрел десятки сообщений, похожих наэто, но все существующие сообщения либо 1) имеют дело с передачей динамических значений (обычно определяемых с помощью JS-скрипта) от VFP к управляющей VIA кнопке / selectList / и т. д.или 2) они имеют дело с передачей переменных от контроллера к VFP;ни чего из того, что мне нужно.Наиболее близкое решение, которое я получил, было с использованием этого источника: https://salesforce.stackexchange.com/questions/24666/how-to-pass-javascript-value-to-controller ... но этот пример требовал использования кнопки на VFP.

Само собой разумеется, я новичок в Visualforce, но у меня ~ 4 года опыта в программировании на Python (что не помогло так сильно, как я надеялся).Любой пример того, как этого добиться, был бы очень признателен !!

1 Ответ

0 голосов
/ 11 мая 2018

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

<apex:actionFunction action="{!someMethod}" name="someMethodName" rerender="ifNeeded">
    <apex:param name="stageParam" assignTo="{!StageVal}" value="Closed Won" />
</apex:actionFunction>

из javascript после загрузки, сделайте вызов

someMethodName('Closed Won')// you may be able to call without params since the value in the param is hard coded but not sure that would be something to test

Обновление

Итак, я создаю полностью рабочую страницу-образец, чтобы вы могли лучше увидеть ее в действии.

VF Page

<apex:page controller="TestController" >
  <h1>Congratulations</h1>
      This is your new Page: Test
  <apex:form >
      <apex:actionFunction action="{!someMethod}" name="someMethodName" rerender="ifNeeded">
          <apex:param name="stageParam" assignTo="{!StageVal}" value="Closed Won" />
      </apex:actionFunction>
      <apex:outputPanel id="ifNeeded">{!StageVal} {!opps.size}

      </apex:outputPanel>
      <script>
          window.onload = function() {
               someMethodName();//or someMethodName('Closed Lost'); to replace default of param variable
          }
      </script>
   </apex:form>
</apex:page>

Контроллер

public class TestController {

    public String StageVal {get;set;}

    public List<Opportunity> opps {get;set;}

    public PageReference someMethod() {
        opps = [Select Name from Opportunity WHERE StageName = :StageVal];
        return null;
    }
}

Что происходит ... тег actionfunction объявляет функцию js, которая выполняет асинхронный вызов контроллера, с параметрами, перечисленными в теге параметров в том порядке, в котором они появляются. Это вызывает частичноеотправьте на серверный контроллер, вызвав метод, указанный в свойстве action тега action function, имя метода js в свойстве name тега actionfunction.По мере того как свойства обратной передачи обновляются, следовательно, ваш параметр становится доступным для использования в контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...