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
brunol11brunol11 

apex:repeat - How to Count and Sum the Items and display it outside the apex:repeat

I Have an unsolved matter and can´t find solution anywhere.

 

My application has a custom object called "Contratacao__c".

 

I must generate a list from this object and I´m using the <apex:repeat> as follows.

 

The list contains a HEADER to display pre-formated information, then the <apex:repeat> form wich generates the list and a TRAILLER where i need to insert the count of itens wich are generated by the list and the sum of a field named "Escelsa_Valor_Nominal_do_Contrato__c".

 

I Navigated thru the board and the only solution found was to insert the "sum" inside the <apex:repeat></apex:repeat>

 

Is there a solution for this case?

 

Help!

 

The code:

 

 

<apex:page standardController="Contratacao__c" recordSetVar="MyContratos" showHeader="False" sidebar="False" renderAs="html" >
<--! First secion - the HEADER -->    
<apex:form id="Header">
A2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAX DOMINI&nbsp;&nbsp;&nbsp;
<apex:outputText value="{0,date,yyyyMMdd}">
 <apex:param value="{!NOW()}" />
</apex:outputText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</apex:form>
<--!End of the HEADER --> 
<--! Second Section - Core of the List  -->                                                                           
<apex:form id="cadastro">
<apex:repeat value="{!selected}" var="Item" id="Repetidor" >
B{!Item.Escela_Formata_Instalacao__c}6450401
<apex:outputField value="{!Item.Escelsa_Valor_Nominal_do_Contrato__c}"/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<apex:outputText value="{0,date,yyyyMMdd}">
 <apex:param value="{!Item.Es_Dt_Ini__c}"/>
</apex:outputText>00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;012 <BR></BR>
</apex:repeat>
</apex:form>
<--! End of second Section -->
<--!Third Section - TRAILLER -->
<apex:form id="Trailler">
<-! I must display here the count of records generated by the <apex:repeat> and the sum of the field {!Item.Escelsa_Valor_Nominal_do_Contrato__c}-->
Z00123300000000002092063 
</apex:form>
<--! End of TRAILLER -->

</apex:page>

 

Best Answer chosen by Admin (Salesforce Developers) 
brunol11brunol11

Wow! 

 

The global variable also works with the field reference.

The result comes with a decimal point and now I must eliminate it from the output created:

 

21386.94Z00123300000000002092063 -GOD is so GREAT!  

 If someone could give me an idea to eliminate the decimal point, it would be fabulous!

 

Look how it works:

 

 

<apex:page standardController="Contratacao__c" recordSetVar="MyContratos" showHeader="False" sidebar="False" renderAs="html" >
    
<apex:form id="Header">
A2&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAX DOMINI&nbsp;&nbsp;504Escelsa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<apex:outputText value="{0,date,yyyyMMdd}">
 <apex:param value="{!NOW()}" />
</apex:outputText>&nbsp;&nbsp;&nbsp;&nbsp;
                                                                             
</apex:form>

<apex:form id="cadastro"> <script type="text/javascript"> counter=0;fieldsum=0 </script>

<apex:repeat value="{!selected}" var="Item" id="Repetidor" >

<script type="text/javascript"> counter=counter+1; fieldsum=fieldsum+{!Item.Total_do_Contrato__c} </script>
B{!Item.Escela_Formata_Instalacao__c}6450401
<apex:outputField value="{!Item.Escelsa_Valor_Nominal_do_Contrato__c}"/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<apex:outputText value="{0,date,yyyyMMdd}">
 <apex:param value="{!Item.Es_Dt_Ini__c}"/>
</apex:outputText>00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;012 <BR></BR>

</apex:repeat>

</apex:form>

<apex:form id="Trailler"> <script type="text/javascript"> document.write(counter); document.write(fieldsum) </script>Z00123300000000002092063 -GOD is so GREAT!
</apex:form>

        
    
    
     

All Answers

Damien_Damien_

You could add a controller extension, and have a function in there called something like getRepeaterSize();  Then make a reference to that on your visualforce page.  There might be a way to do it without an extension but I'm not aware of it.

brunol11brunol11

I solved the "Count" part inserting a global variable inside the <apex:repeat> tags.

 

<apex:form id="cadastro"><script type="text/javascript">counter=0;</script>

 <apex:repeat value="{!selected}" var="Item" id="Repetidor" >

    <script type="text/javascript">counter=counter+1;</script>

 

Then I called the variable inside the "TRAILLER" form:

 

<apex:form id="Trailler">

  <script type="text/javascript">document.write(counter);</script>Z001233002092063 -Yeah!Thank you GOD!

</apex:form>

 

Actually, it was pretty simple.

 

Now I have to work with the "SUM" part. How to sum all that field inserted in the page.

I´m still trying to figure the extension you mentioned.  

If you have any ideas, please, please, let me know.

brunol11brunol11

Wow! 

 

The global variable also works with the field reference.

The result comes with a decimal point and now I must eliminate it from the output created:

 

21386.94Z00123300000000002092063 -GOD is so GREAT!  

 If someone could give me an idea to eliminate the decimal point, it would be fabulous!

 

Look how it works:

 

 

<apex:page standardController="Contratacao__c" recordSetVar="MyContratos" showHeader="False" sidebar="False" renderAs="html" >
    
<apex:form id="Header">
A2&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAX DOMINI&nbsp;&nbsp;504Escelsa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<apex:outputText value="{0,date,yyyyMMdd}">
 <apex:param value="{!NOW()}" />
</apex:outputText>&nbsp;&nbsp;&nbsp;&nbsp;
                                                                             
</apex:form>

<apex:form id="cadastro"> <script type="text/javascript"> counter=0;fieldsum=0 </script>

<apex:repeat value="{!selected}" var="Item" id="Repetidor" >

<script type="text/javascript"> counter=counter+1; fieldsum=fieldsum+{!Item.Total_do_Contrato__c} </script>
B{!Item.Escela_Formata_Instalacao__c}6450401
<apex:outputField value="{!Item.Escelsa_Valor_Nominal_do_Contrato__c}"/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<apex:outputText value="{0,date,yyyyMMdd}">
 <apex:param value="{!Item.Es_Dt_Ini__c}"/>
</apex:outputText>00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;012 <BR></BR>

</apex:repeat>

</apex:form>

<apex:form id="Trailler"> <script type="text/javascript"> document.write(counter); document.write(fieldsum) </script>Z00123300000000002092063 -GOD is so GREAT!
</apex:form>

        
    
    
     
This was selected as the best answer
brunol11brunol11

Here´s the final code. Maybe it can be helpfull for someone.

 

The original question was increased by the problem of data formatting.

If someone else has a more effective solution, let me know.

 

 

<apex:page standardController="Contratacao__c" recordSetVar="MyContratos" showHeader="False" sidebar="False" renderAs="html" >
    
<apex:form id="Header">
 A2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAX DOMINI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;504Escelsa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 <apex:outputText value="{0,date,yyyyMMdd}">
  <apex:param value="{!NOW()}" />
 </apex:outputText>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</apex:form>

<apex:form id="cadastro">
 <script type="text/javascript">
  counter=0;
  fieldsum=0;
 </script>

 <apex:repeat value="{!selected}" var="Item" id="Repetidor" >
  
  <script type="text/javascript">
   counter=counter+1;
   fieldsum=fieldsum+{!Item.Total_do_Contrato__c}
  </script>

B{!Item.Escela_Formata_Instalacao__c}6450401
  <apex:outputField value="{!Item.Escelsa_Valor_Nominal_do_Contrato__c}"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <apex:outputText value="{0,date,yyyyMMdd}">
   <apex:param value="{!Item.Es_Dt_Ini__c}"/>
  </apex:outputText>00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;012 <BR></BR>
 </apex:repeat>
</apex:form>

<apex:form id="Trailler">
 <script type="text/javascript">
  var fieldsumtxt=new String(fieldsum);
  var fieldsumtxtresult="";
  var countertxt=new String(counter);
  var counterresult=""
  if ((fieldsumtxt.charAt(fieldsumtxt.length-2)) == ".") 
     {
     fieldsumtxtresult=(fieldsumtxt.replace(".","")+"0")
     }
  else if ((fieldsumtxt.charAt(fieldsumtxt.length-3)=="."))
     {
     fieldsumtxtresult=(fieldsumtxt.replace(".",""))
     }
  else    
     {
     fieldsumtxtresult=(fieldsumtxt.replace(".","")+"00")
     }
  
  switch (fieldsumtxtresult.length)
  {
  case 1:
   fieldsumtxtresult=("0000000000000000"+fieldsumtxtresult);
   break;
  case 2:
   fieldsumtxtresult=("000000000000000"+fieldsumtxtresult);
   break;
  case 3:
   fieldsumtxtresult=("00000000000000"+fieldsumtxtresult);
   break;
  case 4:
   fieldsumtxtresult=("0000000000000"+fieldsumtxtresult);
   break;
  case 5:
   fieldsumtxtresult=("000000000000"+fieldsumtxtresult);
   break;
  case 6:
   fieldsumtxtresult=("00000000000"+fieldsumtxtresult);
   break;
  case 7:
   fieldsumtxtresult=("0000000000"+fieldsumtxtresult);
   break;
  case 8:
   fieldsumtxtresult=("000000000"+fieldsumtxtresult);
   break;
  case 9:
   fieldsumtxtresult=("00000000"+fieldsumtxtresult);
   break;
  case 10:
   fieldsumtxtresult=("0000000"+fieldsumtxtresult);
   break;
  default:
   fieldsumtxtresult=("Valor Excedido em "+fieldsumtxtresult);
  }
  
  
switch (countertxt.length)
  {
  case 1:
   counterresult=("00000"+counter);
   break;
  case 2:
   counterresult=("0000"+counter);
   break;
  case 3:
   counterresult=("000"+counter);
   break;
  case 4:
   counterresult=("00"+counter);
   break;
  case 5:
   counterresult=("0"+counter);
   break;
   case 6:
   counterresult=(""+counter);
   break;
  default:
   counterresult=("Valor Excedido em "+counterresult);
  }
  
  document.write("Z" + counterresult + fieldsumtxtresult + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
 </script>
<br></br> 

</apex:form>

   
</apex:page>