0

So I've been working on this project on and off for quite a while and have finally hit a crossroads. I have a custom controller and visualforce page I wrote to act as an input form. The form is supposed to build dynamically based on the frequency of related records and based on the user input should then

  1. create one new SIB_Invoice__c record and
  2. create one to many new Savings_Item_Billing_Event__c records

I've got every piece of my code to compile and run with no errors, but upon form submission the Savings_Item_Billing_Event__c records have no values stored in the field CV_Billed__c.

The input is done through multiple inputFields that are bound to a specific list item in a list of SOBjects.

Is this not allowed in Apex?

Posted below is my code with the line that is giving me trouble (**). I've changed the [globalIndex] to [0] a couple times and my first related record actually saves the value. Is this something I'm just going to have to do with Client-Side javascript?

Custom Controller

public class SIBInvoiceWizard {

    //The account for which we will be generating an invoice.
    public Account account {get; set;}

    //All audits processing savings for this account.
    public List<Location_Audits__c> auditsWithSavings {get; set;}

    public SIB_Invoice__c invoice {get; set;}
    public List<Opportunity> savingsItems {get; set;}
    public List<Decimal> savingsItemAllocations {get; set;}
    public List<Savings_Item_Billing_Event__c> billingEvents {get; set;}
    public List<Decimal> allocationTotals {get; set;}
    public Decimal invoiceTotalLabel {get; set;}

    //Upon creation, initialize variables and fill lists.
    public SIBInvoiceWizard(){

        //Instantiate the account by querying the database for the specified ID
        account = [SELECT ID, Name, Contingency_Fee__c FROM Account Where Id = :ApexPages.currentPage().getParameters().get('accId')];

        //Instantiate the fill the list by querying the database for all audits and savings related to the account above.
        auditsWithSavings = [SELECT Id, Name, Stage__c, Audit_Type__c,
                                    (SELECT ID, Name, Savings_Source__c, Type, Amount, Monthly_Contract_Value__c, CV__c, CV_Total_Billed__c, 
                                            CV_Remaining__c, of_Months_Remaining__c, Recurrence_Type__c //Sub-query
                                     FROM Opportunities__r
                                     WHERE (StageName = 'Finalized Savings' OR StageName = 'Engagement Complete') AND CV_Remaining__c > 0)
                             FROM Location_Audits__c 
                             WHERE Account__r.Id = :account.Id AND Stage__c = 'Audit Complete - Processing Savings'];

        //Instantiate the Invoice and link it to the Account.
        invoice = new SIB_Invoice__c();
        invoice.Account__c = account.Id;

        //Instantiate the lists for: 
        savingsItems = new List<Opportunity>(); //Cummulative list of savings items.
        savingsItemAllocations = new List<Decimal>(); //List of allocation percentages that map to the savings items.
        billingEvents = new List<Savings_Item_Billing_Event__c>(); //List of billingEvents that map to savings items.
        allocationTotals = new List<Decimal>();                    //List of totals used for calculation the allocation percentages.


        for(Location_Audits__c audit : auditsWithSavings){
            for(Opportunity savingsItem : audit.Opportunities__r){
                savingsItems.add(savingsItem);
            }
        }

        Integer Index = 0;
        for(Opportunity savingsItem : savingsItems){
            Savings_Item_Billing_Event__c newSIBE = new Savings_Item_Billing_Event__c();
            newSIBE.Savings_Item__c = savingsItem.Id;
            Index = Index + 1;
            billingEvents.add(newSIBE);

        }

        //Need extra just because! Don't question it!
        Savings_Item_Billing_Event__c newSIBE = new Savings_Item_Billing_Event__c();
        billingEvents.add(newSIBE);

        //Calculate the allocation totals for each audit category that will be used to calculate allocation percentages for each savings item.
        for(Location_Audits__c audit : auditsWithSavings){
            //Get the total variable recurring CV amount for further calculations.
            Decimal allocationTotal = 0;
            for(Opportunity savingsItem : audit.Opportunities__r){
                if(savingsItem.Savings_Source__c == 'Generic VoIP Proposal' ||
                   savingsItem.Savings_Source__c == 'Plan Optimization' ||
                   savingsItem.Savings_Source__c == 'Rate Reduction' ||
                   savingsItem.Savings_Source__c == 'Service Standardization' ||
                   savingsItem.Savings_Source__c == 'Vendor Change' ||
                   savingsItem.Savings_Source__c == 'Vendor Consolidation'){
                    allocationTotal = allocationTotal + savingsItem.Amount;
                }
            }
            allocationTotals.add(allocationTotal);

            //Loop over all savingsItems again and assign allocation percentages.
            for(Opportunity savingsItem : audit.Opportunities__r){
                if(savingsItem.Savings_Source__c == 'Generic VoIP Proposal' ||
                   savingsItem.Savings_Source__c == 'Plan Optimization' ||
                   savingsItem.Savings_Source__c == 'Rate Reduction' ||
                   savingsItem.Savings_Source__c == 'Service Standardization' ||
                   savingsItem.Savings_Source__c == 'Vendor Change' ||
                   savingsItem.Savings_Source__c == 'Vendor Consolidation'){
                    Decimal allocationAmount = (savingsItem.Amount/allocationTotal) * 100;
                    allocationAmount = allocationAmount.setScale(0,RoundingMode.HALF_UP);
                    savingsItemAllocations.add(allocationAmount);

                }
                else{
                    savingsItemAllocations.add(100);
                }
            }
        }

        Integer allocationTotalsIndex = 0;
        Integer billingEventIndex = 0;
        Decimal amountPaid = 0.0;
        invoiceTotalLabel = 0;
        for(Location_Audits__c audit : auditsWithSavings){
            for(Opportunity savingsItem : audit.Opportunities__r){
                if(savingsItemAllocations[billingEventIndex] < 100){
                    Decimal defaultValue = (savingsItemAllocations[billingEventIndex]/100) * allocationTotals[allocationTotalsIndex];
                    //billingEvents[billingEventIndex].CV_Billed__c = defaultValue.setScale(2,RoundingMode.HALF_UP);
                    //invoiceTotalLabel = invoiceTotalLabel + billingEvents[billingEventIndex].CV_Billed__c;
                    //amountPaid = amountPaid + billingEvents[billingEventIndex].CV_Billed__c;
                } else{
                    Decimal defaultValue = savingsItem.Amount * (account.Contingency_Fee__c/100);
                    //billingEvents[billingEventIndex].CV_Billed__c = defaultValue.setScale(2,RoundingMode.HALF_UP);
                    //invoiceTotalLabel = invoiceTotalLabel + billingEvents[billingEventIndex].CV_Billed__c;
                    //amountPaid = amountPaid + billingEvents[billingEventIndex].CV_Billed__c;
                }

                billingEventIndex = billingEventIndex + 1;
            }

            allocationTotalsIndex = allocationTotalsIndex + 1;
        }
        invoice.Amount_Paid__c = amountPaid;

    }


    //Called when the form is submitted.
    public PageReference formSubmission(){
        system.debug('Inside the submit method');
        system.debug(savingsItems.size());
        for(Savings_Item_Billing_Event__c be : billingEvents){
            system.debug(be.Savings_Item__c);
            system.debug(be.CV_Billed__c);
        }

        //Insert the created invoice into the database
        insert invoice;

        //Link each billingEvent created back to the newly inserted invoice, then insert the billing events.

        for(Integer i = 0; i < billingEvents.size() - 1; i++){
                billingEvents[i].Name = invoice.Name + '-' + '0' + (i);
                billingEvents[i].SIB_Invoice__c = invoice.Id;
                insert billingEvents[i];
        }


        //Create a new page reference for the invoice and redirect the user to the newly created invoice.
        PageReference invoiceDetail = new PageReference('/'+invoice.Id);
        invoiceDetail.setRedirect(true);
        return invoiceDetail;
    }


}

Custom Visualforce page

<apex:page controller="SIBInvoiceWizard" docType="html-5.0">

        <apex:includeScript value="/soap/ajax/29.0/connection.js"/>
        <apex:includeScript value="/soap/ajax/29.0/apex.js"/>
<apex:pageMessages />
    <apex:sectionHeader title="SIB Invoice Wizard - (Currently In Development)"/>

        <apex:form id="wizardForm">

            <apex:PageBlock id="invoiceDetails" title="Invoice Details">

                <apex:outputLabel value="Invoice # " style="font-weight:bold"/>
                <apex:inputField id="invoiceNumber" value="{!invoice.Name}"/>
                &nbsp;&nbsp;
                <apex:outputLabel value="Invoice Date " style="font-weight:bold"/>
                <apex:inputField id="invoiceDate" value="{!invoice.Invoice_Date__c}"/>
                &nbsp;&nbsp;
                <apex:outputLabel value="Amount Paid " style="font-weight:bold"/>
                <apex:inputField id="amountPaid" value="{!invoice.Amount_Paid__c}"/>

                <apex:outputLabel id="invoiceTotal" value="{!invoiceTotalLabel}" style="float:right; padding-right:175px; font-weight:bold"/>
                <apex:outputLabel value="Invoice Total:" style="float:right; padding-right:5px;"/>


            </apex:PageBlock>

            <apex:PageBlock id="savingsForm" onkeyup="totalBillingEvents();">

                <apex:variable value="{!0}" var="globalIndex"/>

                <apex:variable value="{!0}" var="auditIndex"/>

                <apex:repeat value="{!auditsWithSavings}" var="audit">

                    <apex:pageBlockSection title="{!audit.Name + ' - ' + audit.Audit_Type__c}" columns="1">

                        <apex:outputPanel layout="block" style="width:100%;">

                        <style type="text/css">
                            #chartTable th {}
                            #chartTable td {}
                        </style>

                            <div id="chartTable">
                                <table>
                                    <tr>
                                        <th style="width:15%;">Name</th>
                                        <th style="width:15%;">Savings Source</th>
                                        <th style="width:10%;">Type</th>
                                        <th style="width:10%;">Recurrence Type</th>
                                        <th style="width:5%;">Allocation Factor</th>
                                        <th style="width:5%;">Monthly Savings</th>
                                        <th style="width:5%;">CV - Total</th>
                                        <th style="width:5%;">CV - Billed</th>
                                        <th style="width:10%;">CV - Remaining</th>
                                        <th style="width:20%;">Current Billing</th>
                                    </tr>
                                    <apex:repeat value="{!audit.Opportunities__r}" var="si">
                                        <tr>
                                            <td>{!si.Name}</td>
                                            <td>{!si.Savings_Source__c}</td>
                                            <td>{!si.Type}</td>
                                            <td>{!si.Recurrence_Type__c}</td>
                                            <td>{!savingsItemAllocations[globalIndex]}%</td>
                                            <td>{!si.Amount}</td>
                                            <td>{!si.CV__c}</td>
                                            <td>{!si.CV_Total_Billed__c}</td>
                                            <td>{!si.CV_Remaining__c}</td>
                                            <td>
                                                **<apex:inputField value="{!billingEvents[globalIndex].CV_Billed__c}"/>**
                                            </td>
                                        </tr>
                                        <apex:variable value="{!globalIndex + 1}" var="globalIndex"/>
                                    </apex:repeat>
                                        <tr>
                                            <td style="width:15%; font-weight:bold;">Totals from Recurring Variable Savings</td>
                                            <td style="width:15%; font-weight:bold;"></td>
                                            <td style="width:10%; font-weight:bold;"></td>
                                            <td style="width:10%; font-weight:bold;"></td>
                                            <td style="width:5%; font-weight:bold;"></td>
                                            <td style="width:5%; font-weight:bold; border-top:1px solid black;">{!allocationTotals[auditIndex]}</td>
                                            <td style="width:5%; font-weight:bold;"></td>
                                            <td style="width:5%; font-weight:bold;"></td>
                                            <td style="width:10%; font-weight:bold;"></td>
                                            <td style="width:20%; font-weight:bold;"></td>
                                        </tr>
                                </table>
                            </div>
                        </apex:outputPanel>

                    </apex:pageBlockSection>
                    <apex:variable value="{!auditIndex + 1}" var="auditIndex"/>

                </apex:repeat>
            </apex:PageBlock>

            <apex:commandButton value="Submit" rerender="" style="float:right; margin-right:250px;" action="{!formSubmission}"/>

        </apex:form>

</apex:page>
5
  • 1
    What does the HTML of the specific page look like? Specifically your inputField: CV_Billed__c.
    – TC Sutton
    Commented Feb 9, 2015 at 16:16
  • It not clear what you are asking. Are you saying that {!billingEvents[globalIndex].CV_Billed__c} is not evaluating properly? Have you tried printing it out to see what it evaluates to? Have you tried checking what globalIndex is?
    – BarCotter
    Commented Feb 9, 2015 at 16:17
  • '{!billingEvents[globalIndex].CV_Billed__c}' is printing out just fine. The problem is that any values placed in that inputField is never sent back to the controller upon page submission. Global index is a variable created on the Visualforce page. Commented Feb 9, 2015 at 16:18
  • I'll add some screenshots for a better understanding of what is happening. Commented Feb 9, 2015 at 16:23
  • Might want to look at How do I start to debug my own Apex code? and the Visualforce Developer’s Guide for ideas on how to debug this or explain your issues a bit more clearly since we don't know the relationships.
    – crmprogdev
    Commented Feb 9, 2015 at 18:20

2 Answers 2

-1

I think I get what you are trying to do, but the method of iterating with an apex variable is not supported. See the following documentation:

http://www.salesforce.com/docs/developer/pages/Content/pages_compref_variable.htm

However, what you could do is create a wrapper class that you could then use in your repeater to help set the iterator. An example like this, there are also a few other ways that you could do this as well:

http://blog.jeffdouglas.com/2010/04/02/visualforce-row-counter-for-iteration-components/

3
  • This looks like it could work for me. I'll give it a try sometime today and see what the results are. Thanks TC! I'll mark as answered after I have this implemented. Commented Feb 9, 2015 at 16:55
  • Implemented a series of wrapper classes yesterday and it worked like a charm! Good on you TC! Posting updated code. Commented Feb 10, 2015 at 14:45
  • Also, whomever down-voted TC please reverse. He ended up having the exactly what I needed. Commented Feb 10, 2015 at 15:06
0

Custom Controller

public class SIBInvoiceWizard {

    //The account for which we will be generating an invoice.
    public Account account {get; set;}

    //All audits processing savings for this account.

    public List<auditWrapper> aWrappers {get; set;}
    public SIB_Invoice__c invoice {get; set;}
    public Decimal invoiceTotalLabel {get; set;}

    //Upon creation, initialize variables and fill lists.
    public SIBInvoiceWizard(){

        //Instantiate the account by querying the database for the specified ID
        account = [SELECT ID, Name, Contingency_Fee__c FROM Account Where Id = :ApexPages.currentPage().getParameters().get('accId')];

        //Instantiate the Invoice and link it to the Account.
        invoice = new SIB_Invoice__c();
        invoice.Account__c = account.Id;
        invoice.Amount_Paid__c = 0;

        invoiceTotalLabel = 0;

        //Grab a list of all relevant audits and their savings to fill the savings and audit wrappers.
        List<Location_Audits__c> auditsWithSavings = [SELECT Id, Name, Stage__c, Audit_Type__c,
                                    (SELECT ID, Name, Savings_Source__c, Type, Amount, Monthly_Contract_Value__c, CV__c, CV_Total_Billed__c, 
                                            CV_Remaining__c, of_Months_Remaining__c, Recurrence_Type__c //Sub-query
                                     FROM Opportunities__r
                                     WHERE (StageName = 'Finalized Savings' OR StageName = 'Engagement Complete') AND CV_Remaining__c > 0)
                             FROM Location_Audits__c 
                             WHERE Account__r.Id = :account.Id AND Stage__c = 'Audit Complete - Processing Savings'];

        //Create a new list of auditWrappers and fill those auditWrappers with audits from the list above and a list of savingsWrappers.                    
        aWrappers = new List<auditWrapper>();
        for(Location_Audits__c audit : auditsWithSavings){
            List<savingsWrapper> sWrappers = new List<savingsWrapper>();
            for(Opportunity savingsItem : audit.Opportunities__r){
                Savings_Item_Billing_Event__c newSIBE = new Savings_Item_Billing_Event__c();
                newSIBE.Savings_Item__c = savingsItem.Id;
                sWrappers.add(new savingsWrapper(savingsItem,newSIBE));
            }
            if(sWrappers.size() > 0){
                aWrappers.add(new auditWrapper(audit,sWrappers));
            }

        }

        //Loop over each list of savings items to calculation estimated allocation percentages and add those to the savings wrappers.
        for(auditWrapper a : aWrappers){

            //Calculate the recurring variable savings total for this audit. This will be used in a later calculation.
            Decimal rvt = 0;
            for(savingsWrapper s : a.savingsWrappers){
                if(s.savingsItem.Savings_Source__c == 'Generic VoIP Proposal'||
                   s.savingsItem.Savings_Source__c == 'Plan Optimization' ||
                   s.savingsItem.Savings_Source__c == 'Rate Reduction'||
                   s.savingsItem.Savings_Source__c == 'Service Standardization'||
                   s.savingsItem.Savings_Source__c == 'Vendor Change'||
                   s.savingsItem.Savings_Source__c == 'Vendor Consolidation'){
                        rvt = rvt + s.savingsItem.Amount;
                }
            }
            a.recurringVariableTotal = rvt;

            for(savingsWrapper s : a.savingsWrappers){
                if(s.savingsItem.Savings_Source__c == 'Generic VoIP Proposal'||
                   s.savingsItem.Savings_Source__c == 'Plan Optimization'||
                   s.savingsItem.Savings_Source__c == 'Rate Reduction'||
                   s.savingsItem.Savings_Source__c == 'Service Standardization'||
                   s.savingsItem.Savings_Source__c == 'Vendor Change'||
                   s.savingsItem.Savings_Source__c == 'Vendor Consolidation'){
                        Decimal allocationAmount = (s.savingsItem.Amount/a.recurringVariableTotal) * 100;
                        allocationAmount = allocationAmount.setScale(2,RoundingMode.HALF_UP);
                        s.allocationPercent = allocationAmount;
                } else{
                        s.allocationPercent = 100;
                }
            }

            for(savingsWrapper s: a.savingsWrappers){
                Decimal defaultValue = 0;
                if(s.allocationPercent < 100){
                    defaultValue = (s.allocationPercent/100) * a.recurringVariableTotal * (account.Contingency_Fee__c/100); //Calculate the default value.
                } else{
                    defaultValue = s.savingsItem.Amount * (account.Contingency_Fee__c/100); 
                }

                defaultValue = defaultValue.setScale(2,RoundingMode.HALF_UP);       //Round that value to 2 decimal points.
                s.sibe.CV_Billed__c = defaultValue;                                //Set the associated billingEvent to that value.
                invoice.Amount_Paid__c = invoice.Amount_Paid__c + defaultValue;   //Increment the amount paid on the invoice.
                invoiceTotalLabel = invoiceTotalLabel + defaultValue;            //Increment the totals label.
            }
        }
    }


    //Called when the form is submitted.
    public PageReference formSubmission(){
        //Insert the created invoice into the database
        insert invoice;

        //Link each billingEvent created back to the newly inserted invoice, then insert the billing events.
        Integer lineItem = 1;
        for(auditWrapper a : aWrappers){
            for(savingsWrapper s : a.savingsWrappers){
                s.sibe.SIB_Invoice__c = invoice.Id;
                s.sibe.Name = invoice.Name + '- 0' + lineItem;
                if(s.sibe.CV_Billed__c != null || s.sibe.CV_Billed__c == 0){
                    insert s.sibe;
                    lineItem = lineItem + 1;
                }
            }
        }

        //Create a new page reference for the invoice and redirect the user to the newly created invoice.
        PageReference invoiceDetail = new PageReference('/'+invoice.Id);
        invoiceDetail.setRedirect(true);
        return invoiceDetail;
    }

    class auditWrapper{

        public Location_Audits__c audit {get; set;}
        public List<savingsWrapper> savingsWrappers {get; set;}
        public Decimal recurringVariableTotal {get; set;}

        public auditWrapper(Location_Audits__c audit, List<savingsWrapper> savingsWrappers){
            this.audit = audit;
            this.savingsWrappers = savingsWrappers;
        }

    }

    class savingsWrapper{

        public Opportunity savingsItem {get; set;}
        public Savings_Item_Billing_Event__c sibe {get; set;}
        public Decimal allocationPercent {get; set;}
        public Decimal allocationTotal {get; set;}

        public savingsWrapper(Opportunity savingsItem, Savings_Item_Billing_Event__c sibe){
            this.savingsItem = savingsItem;
            this.sibe = sibe;
        }

    }


}

Custom VisualForce Page

 <apex:page controller="SIBInvoiceWizard" docType="html-5.0">

        <apex:includeScript value="/soap/ajax/29.0/connection.js"/>
        <apex:includeScript value="/soap/ajax/29.0/apex.js"/>

    <script type="text/javascript">

        function totalBillingEvents(){
            var itemAmountElements = document.getElementById("{!$Component.wizardForm.savingsForm}").getElementsByTagName("input");
            var total = 0;

            for(i = 0; i < itemAmountElements.length; i++){
                var currency = itemAmountElements[i].value;
                var number = Number(currency.replace(/[^0-9\.-]+/g,""));
                total = total + number;
            }

            document.getElementById("{!$Component.wizardForm.invoiceDetails.invoiceTotal}").innerHTML = "$"+total.toFixed(2);
            document.getElementById("{!$Component.wizardForm.invoiceDetails.amountPaid}").value = "$"+total.toFixed(2);
        }       

    </script>
    <apex:pageMessages />
    <apex:sectionHeader title="SIB Invoice Wizard - (Currently In Development)"/>

        <apex:form id="wizardForm">

            <apex:PageBlock id="invoiceDetails" title="Invoice Details">

                <apex:outputLabel value="Invoice # " style="font-weight:bold"/>
                <apex:inputField id="invoiceNumber" value="{!invoice.Name}"/>
                &nbsp;&nbsp;
                <apex:outputLabel value="Invoice Date " style="font-weight:bold"/>
                <apex:inputField id="invoiceDate" value="{!invoice.Invoice_Date__c}"/>
                &nbsp;&nbsp;
                <apex:outputLabel value="Amount Paid " style="font-weight:bold"/>
                <apex:inputField id="amountPaid" value="{!invoice.Amount_Paid__c}"/>

                <apex:outputLabel id="invoiceTotal" value="{!invoiceTotalLabel}" style="float:right; padding-right:175px; font-weight:bold"/>
                <apex:outputLabel value="Invoice Total:" style="float:right; padding-right:5px;"/>


            </apex:PageBlock>

            <apex:PageBlock id="savingsForm" onkeyup="totalBillingEvents();">

                <apex:repeat value="{!aWrappers}" var="a">

                    <apex:pageBlockSection title="{!a.audit.Name + ' - ' + a.audit.Audit_Type__c}" columns="1">

                        <apex:outputPanel layout="block" style="width:100%;">

                        <style type="text/css">
                            #chartTable h3 {color:black;}
                        </style>

                            <div id="chartTable">
                                <table>
                                    <tr>
                                        <th style="width:15%;">Name</th>
                                        <th style="width:15%;">Savings Source</th>
                                        <th style="width:10%;">Type</th>
                                        <th style="width:10%;">Recurrence Type</th>
                                        <th style="width:5%;">Allocation Factor</th>
                                        <th style="width:5%;">Monthly Savings</th>
                                        <th style="width:5%;">CV - Total</th>
                                        <th style="width:5%;">CV - Billed</th>
                                        <th style="width:10%;">CV - Remaining</th>
                                        <th style="width:20%;">Current Billing</th>
                                    </tr>
                                    <apex:repeat value="{!a.savingsWrappers}" var="s">
                                        <tr>
                                            <td>{!s.savingsItem.Name}</td>
                                            <td>{!s.savingsItem.Savings_Source__c}</td>
                                            <td>{!s.savingsItem.Type}</td>
                                            <td>{!s.savingsItem.Recurrence_Type__c}</td>
                                            <td>{!s.allocationPercent}%</td>
                                            <td>{!s.savingsItem.Amount}</td>
                                            <td>{!s.savingsItem.CV__c}</td>
                                            <td>{!s.savingsItem.CV_Total_Billed__c}</td>
                                            <td>{!s.savingsItem.CV_Remaining__c}</td>
                                            <td>
                                                <apex:inputField value="{!s.sibe.CV_Billed__c}"/>
                                            </td>
                                        </tr>
                                    </apex:repeat>
                                        <tr>
                                            <td style="width:15%; font-weight:bold;">Totals from Recurring Variable Savings</td>
                                            <td style="width:15%; font-weight:bold;"></td>
                                            <td style="width:10%; font-weight:bold;"></td>
                                            <td style="width:10%; font-weight:bold;"></td>
                                            <td style="width:5%; font-weight:bold;"></td>
                                            <td style="width:5%; font-weight:bold; border-top:1px solid black;">{!a.recurringVariableTotal}</td>
                                            <td style="width:5%; font-weight:bold;"></td>
                                            <td style="width:5%; font-weight:bold;"></td>
                                            <td style="width:10%; font-weight:bold;"></td>
                                            <td style="width:20%; font-weight:bold;"></td>
                                        </tr>
                                </table>
                            </div>
                        </apex:outputPanel>

                    </apex:pageBlockSection>

                </apex:repeat>
            </apex:PageBlock>

            <apex:commandButton value="Submit" rerender="" style="float:right; margin-right:250px;" action="{!formSubmission}"/>

        </apex:form>

</apex:page>
1
  • New code after redesigning the class to use two wrapper classes. Commented Feb 10, 2015 at 15:04

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .