function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion

apex variable problem in VF

I am setting the following variable to be reused in calculations
Below returns the error Error: Unknown property 'Cloud_Voice__cStandardController.monthly'
<apex:variable value="{!12}" var="term"/>
<apex:variable value="{!ROUND((Cloud_Voice__c.Total_Selected_Finance__c*(r.X12m__c/1000)/term),2)}" var="monthly"/>
<apex:variable value="{!monthly*term}" var="total"/>

Changing the term back to 12 works fine:
<apex:variable value="{!12}" var="term"/>
<apex:variable value="{!ROUND((Cloud_Voice__c.Total_Selected_Finance__c*(r.X12m__c/1000)/12),2)}" var="monthly"/>
<apex:variable value="{!monthly*term}" var="total"/>

Can't figure out why it does not work, any help?
Offshore Freelance ConsultantOffshore Freelance Consultant

Looks like it is an issue with Round function, it does not accept apex:var as its parameters.

An alternate solution I can think of is, to split that into two variables as below

<apex:variable value="{!(Cloud_Voice__c.Total_Selected_Finance__c*(r.X12m__c/1000)/12)}" var="TEMPVAR"/>

<apex:variable value="{!ROUND(TEMPVAR,2)}" var="monthly"/>

Hope this helps!


Thanks for the suggestion but this doesn't work either, the code is using the number 12 rather than the var term.

Strangely while trying your suggestion i mistyped and found that it would appear to work for multiplication but not division so
<apex:variable value="{!ROUND((Cloud_Voice__c.Total_Selected_Finance__c*(r.X12m__c/1000)  /  term),2)}" var="monthly"/>
does not work, but
<apex:variable value="{!ROUND((Cloud_Voice__c.Total_Selected_Finance__c*(r.X12m__c/1000)  *  term),2)}" var="monthly"/>
does. Is this a bug?
Have an answer of sorts on this from Salesforce. Sounds like a bug to me though.

It will not compile as the variable (even though set) is treated as possible null/0 which would then result in a divide by zero error. 
This doesnt really make sense as you can use field that are null and compile, it simply results in a runtime error when the page is rendered.
Why is the behavious different from a set variable, who knows?