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
SFineSFine 

"Action Support" support

Hello, I'm trying to implement afunction for a client where they can track hours. They want to add a function that if certain quote line items are in the opportunity, then they can be select and have hours ran against them.

 

This mostly works, but there's one issue I want to do and that's when initially making the hours record, the user select an opportunity but without an opportunity initially, there are no quote line items to select. I've attempting implementing Action Support, but it doesn't seem to work. Below is my VF code and Apex code:

 

 

<apex:page standardController="PM_Hours__c" extensions="PMEditController" >



    <apex:sectionHeader title="PM Hours Edit" subtitle="{!PM_Hours__c.name}"/>
    <apex:form >
        <apex:pageBlock title="PM Hours Edit" id="thePageBlock" mode="edit">
            <apex:pageMessages />
            <apex:pageBlockButtons >
                <apex:commandButton value="Save" action="{!save}"/>
                <apex:commandButton value="Cancel" action="{!cancel}"/>                
            </apex:pageBlockButtons>
            <apex:actionRegion >
                <apex:pageBlockSection title="Information" columns="2">
                    
                    <apex:inputField value="{!PM_Hours__c.Opportunity__c}" required="true"/>
                    <apex:actionSupport event="onchange" reRender="lineitem" action="{!getTrackedProducts}"/>
                    
                    <apex:inputField value="{!PM_Hours__c.Date_of_Entry__c}" required="true"/>
                    <apex:outputText value=""/>
                    <apex:inputField value="{!PM_Hours__c.Number_of_Hours__c}" required="true"/>
                    <apex:inputField value="{!PM_Hours__c.Activity_Category__c}" required="true"/>
                    <apex:inputField value="{!PM_Hours__c.Hourly_Rate__c}"/>
                    <apex:inputField value="{!PM_Hours__c.Job_Function__c}" required="true"/>
                    <apex:outputfield value="{!PM_Hours__c.Total__c}"/>
                    <apex:inputField value="{!PM_Hours__c.Task__c}" required="true"/>
                    <apex:inputfield value="{!PM_Hours__c.Billable__c}"/>
                    <apex:pageBlockSectionItem >
                    <apex:outputLabel value="Quote Line Item" for="lineitem"/>
                    
                    <apex:selectList value="{!PM_Hours__c.Quote_Line_Item__c}" multiselect="false" size="1" id="lineitem">
                      <apex:selectOptions value="{!TrackedProducts}"/>
                    </apex:selectList>
                    </apex:pageBlockSectionItem>
                    <apex:inputField value="{!PM_Hours__c.Notes__c}"/>
                </apex:pageBlockSection>
            </apex:actionRegion>
            
        </apex:pageBlock>
        <apex:pageBlock title="User Time Table" id="TimeTable" mode="edit">
            <c:UserHoursVF2 />
            
        </apex:pageBlock>
    </apex:form>
    
<!--    <div id="PH-dialog">
    <apex:form >
        <apex:pageBlock title="" mode="edit">
            <apex:facet name="header"><div></div></apex:facet>
            <apex:pageBlockSection title="Project Hour Details" columns="1">
                
                <apex:pageBlockSectionItem >
                    <apex:outputLabel value="Project Name" for="PHName"/>
                    <apex:panelGroup >
                        <apex:outputText value="" id="PHName" style="width: 300px; height: 100px;"/>
                        </apex:panelGroup>
                </apex:pageBlockSectionItem>
                <apex:pageBlockSectionItem >
                    <apex:outputLabel value="Assigned To" for="ownerId"/>
                    <apex:panelGroup >
                    <div id="phOwnerId">
                        <apex:outputText value="" id="ownerId" style="width: 300px;"/>
                    </div> 
                    </apex:panelGroup>
                </apex:pageBlockSectionItem> 
                <apex:pageBlockSectionItem >
                    <apex:outputLabel value="Hourly Rate" for="HourRate"/>
                    <apex:panelGroup >
                        <apex:outputText value="" id="HourRate" style="width: 300px; height: 100px;"/>
                        </apex:panelGroup>
                </apex:pageBlockSectionItem>
                <apex:pageBlockSectionItem >
                    <apex:outputLabel value="Number of Hours" for="NumHour"/>
                    <apex:panelGroup >
                        <apex:outputText value="" id="NumHour"/>
                        </apex:panelGroup>
                </apex:pageBlockSectionItem>
                
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
  </div>-->
  
  
</apex:page>

 

public with sharing class PMEditController {

 public Id UserID {get; set;}
 
 public Opportunity opp {get; set;}
 
 public User activeUser {get; set;}
 
 public PM_Hours__c[] PH {get; set;}
 
 public List<ProjectItem> PI {get; set;}
 
 public Map<ID,ProjectItem> ProjectMap {get;set;}
 
 public date today{get;set;}

 public String PHID {get; set;}
 
 public decimal pSunTot{get;set;}
 public decimal pMonTot{get;set;}
 public decimal pTueTot{get;set;}
 public decimal pWedTot{get;set;}
 public decimal pThuTot{get;set;}
 public decimal pFriTot{get;set;}
 public decimal pSatTot{get;set;}
 public decimal SunTot{get;set;}
 public decimal MonTot{get;set;}
 public decimal TueTot{get;set;}
 public decimal WedTot{get;set;}
 public decimal ThuTot{get;set;}
 public decimal FriTot{get;set;}
 public decimal SatTot{get;set;}
 
 public decimal total{get;set;}
 public decimal ptotal{get;set;}

 public PMEditController()
 {
        init();
 }
 
 public PMEditController(ApexPages.StandardController controller)
 {
        init();
 }

 public void init(){
        
        PHID=System.currentPageReference().getParameters().get('id');
        
        Date Late=date.Today().toStartOfWeek().addDays(6);
        Date Earl=date.Today().addDays(-7).toStartOfWeek();
        today=date.Today();
        pSunTot=0;
    pMonTot=0;
    pTueTot=0;
    pWedTot=0;
        pThuTot=0;
        pFriTot=0;
        pSatTot=0;
        SunTot=0;
    MonTot=0;
    TueTot=0;
    WedTot=0;
        ThuTot=0;
        FriTot=0;
        SatTot=0;
   activeUser=[select id from user where id =:userInfo.getUserId() limit 1];
   PH=[select Opportunity__c, Opportunity__r.name, Date_of_Entry__c, Number_of_Hours__c from PM_Hours__c where CreatedByID=:ActiveUser.Id and Date_of_Entry__c>=:Earl and Date_of_Entry__c<=:Late];
   PI=new list<ProjectItem>();
   System.debug('PH '+PH);
   ProjectMap=new Map<ID,ProjectItem>();
   for(PM_Hours__c Pm:PH)
   {
        PM p=new PM();
        p.pm=Pm;
        if(p.pm.Opportunity__c!=null && p.pm.Number_of_Hours__c!=null)
        if(ProjectMap.get(p.pm.Opportunity__c)==null)
        {       
                ProjectItem I=new ProjectItem();
                
                if(p.pm.Id==phid)
                        p.current=true;
                I.AssAcc=p.pm.Opportunity__r.name;
                I.AccID=p.pm.Opportunity__c;
                if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek())
                {
                        i.PSunList.add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pSunTot+=p.pm.Number_of_Hours__c;
                        
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(1))
                {
                        i.PMonList.add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pMonTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(2))
                {
                        i.PTueList.Add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pTueTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(3))
                {
                        i.PWedList.Add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pWedTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(4))
                {
                        i.PThuList.Add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pThuTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(5))
                {
                        i.PFriList.Add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pFriTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(6))
                {
                        i.PSatList.Add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pSatTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek())
                {
                        i.SunList.add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        SunTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(1))
                {
                        i.MonList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        MonTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(2))
                {
                        i.TueList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        TueTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(3))
                {
                        i.WedList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        WedTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(4))
                {
                        i.ThuList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        ThuTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(5))
                {
                        i.FriList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        FriTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(6))
                {
                        i.SatList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        SatTot+=p.pm.Number_of_Hours__c;
                }
                ProjectMap.put(p.pm.opportunity__c,I);
        }
        else
        {
                ProjectItem I=ProjectMap.get(p.pm.Opportunity__c);
                if(p.pm.Id==phid)
                        p.current=true;
                if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek())
                {
                        i.PSunList.add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pSunTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(1))
                {
                        i.PMonList.add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pMonTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(2))
                {
                        i.PTueList.Add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pTueTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(3))
                {
                        i.PWedList.Add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pWedTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(4))
                {
                        i.PThuList.Add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pThuTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(5))
                {
                        i.PFriList.Add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pFriTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().addDays(-7).tostartofWeek().addDays(6))
                {
                        i.PSatList.Add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        pSatTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek())
                {
                        i.SunList.add(p);
                        i.lastTotal+=p.pm.Number_of_Hours__c;
                        SunTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(1))
                {
                        i.MonList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        MonTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(2))
                {
                        i.TueList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        TueTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(3))
                {
                        i.WedList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        WedTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(4))
                {
                        i.ThuList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        ThuTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(5))
                {
                        i.FriList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        FriTot+=p.pm.Number_of_Hours__c;
                }
                else if(p.pm.Date_of_Entry__c==date.today().tostartofWeek().addDays(6))
                {
                        i.SatList.Add(p);
                        i.thisTotal+=p.pm.Number_of_Hours__c;
                        SatTot+=p.pm.Number_of_Hours__c;
                }
                ProjectMap.put(p.pm.Opportunity__c,I);
        }
   
   }
   total=suntot+montot+tuetot+wedtot+thutot+fritot+sattot;
   ptotal=psuntot+pmontot+ptuetot+pwedtot+pthutot+pfritot+psattot;
   PI=ProjectMap.Values();
  }
 
 public List<SelectOption> getTrackedProducts()
 {      
        List<Quote_Line_Item__c> qlilist;
 try{
        opp=[select id from Opportunity where id=:[select opportunity__c from PM_Hours__c where id=:phid limit 1].opportunity__c limit 1];
         qlilist=[select id, description__c, name from Quote_Line_Item__c where Opportunity__c=:opp.id and (name='STXPS-PRJMGT-310' or name='STXPS-PRJMGT-301' or name='STXPS-PRJMGT-302')];
        system.debug(qlilist);
 }
 catch(exception e){qlilist=new List<Quote_Line_Item__c>();}
  List<SelectOption> QuoteLineEntries = new List<SelectOption> ();
  SelectOption pbeoptionBlank = new SelectOption('','-- blank --');
  QuoteLineEntries.add( pbeoptionBlank );

  for(Quote_line_item__c qli:qlilist){
   String label=qli.Description__c;
   if(label==null || label==''){
    label=qli.Name;
   }
   SelectOption pbeoption = new SelectOption(qli.Id,label);
   QuoteLineEntries.add( pbeoption );
  }
  return QuoteLineEntries;
 
 
 }
 
 class PM
 {
        public PM_Hours__c pm{get;set;}
        public boolean current{get;set;}
        
        public PM(){
                current=false;
        }
 }

 class ProjectItem{
  public String AssAcc{get;set;}
  public ID AccID{get;set;}
  public List<PM> PSunList{get;set;}
  public List<PM> PMonList{get;set;}
  public List<PM> PTueList{get;set;}
  public List<PM> PWedList{get;set;}
  public List<PM> PThuList{get;set;}
  public List<PM> PFriList{get;set;}
  public List<PM> PSatList{get;set;}
  public List<PM> SunList{get;set;}
  public List<PM> MonList{get;set;}
  public List<PM> TueList{get;set;}
  public List<PM> WedList{get;set;}
  public List<PM> ThuList{get;set;}
  public List<PM> FriList{get;set;}
  public List<PM> SatList{get;set;}
  
  public Date PSun{get;set;}
  public Date PMon{get;set;}
  public Date PTue{get;set;}
  public Date PWed{get;set;}
  public Date PThu{get;set;}
  public Date PFri{get;set;}
  public Date PSat{get;set;}
  public Date Sun{get;set;}
  public Date Mon{get;set;}
  public Date Tue{get;set;}
  public Date Wed{get;set;}
  public Date Thu{get;set;}
  public Date Fri{get;set;}
  public Date Sat{get;set;}
  
  public decimal LastTotal{get;set;}
  public decimal ThisTotal{get;set;}
  
  
  
  public ProjectItem(){
   Date LastWeek=date.today().addDays(-7).tostartofWeek();
   Date ThisWeek=date.today().tostartofWeek();
   PSun=LastWeek;
   PMon=LastWeek.addDays(1);
   PTue=LastWeek.addDays(2);
   PWed=LastWeek.addDays(3);
   PThu=LastWeek.addDays(4);
   PFri=LastWeek.addDays(5);
   PSat=LastWeek.addDays(6);
   Sun=ThisWeek;
   Mon=ThisWeek.addDays(1);
   Tue=ThisWeek.addDays(2);
   Wed=ThisWeek.addDays(3);
   Thu=ThisWeek.addDays(4);
   Fri=ThisWeek.addDays(5);
   Sat=ThisWeek.addDays(6);
   
   PSunList=new List<PM>();
   PMonList=new List<PM>();
   PTueList=new List<PM>();
   PWedList=new List<PM>();
   PThuList=new List<PM>();
   PFriList=new List<PM>();
   PSatList=new List<PM>();
   SunList=new List<PM>();
   MonList=new List<PM>();
   TueList=new List<PM>();
   WedList=new List<PM>();
   ThuList=new List<PM>();
   FriList=new List<PM>();
   SatList=new List<PM>();
   
   LastTotal=0;
   ThisTotal=0;
  }

 }

}

 

Thanks in advanced

 

Prafull G.Prafull G.

can you try something like

 

 

<apex:inputField value="{!PM_Hours__c.Opportunity__c}" required="true">
<apex:actionSupport event="onchange" reRender="lineitem" action="{!getTrackedProducts}"/>
</apex:inputField>

 

let me know if it works ?

 

SFineSFine

Thanks for the idea, but it doesn't work.