Я создаю 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 (что не помогло так сильно, как я надеялся).Любой пример того, как этого добиться, был бы очень признателен !!