2012-05-24 66 views
0

我試圖創建我的第一個VF頁面。這是一個行項輸入表單,允許用戶在單擊保存之前輸入多個子記錄(Enfants_ c)。現在,我從父母的自定義按鈕打開音頻頁面(確保 _c)。但是,當頁面打開時,父項的查找字段未填充 - 因此用戶必須單擊查找以從Assure__c中選擇父項。有沒有辦法將上一頁的父ID傳遞給VF頁面上的新子記錄?將父標識傳遞給VisualForce頁面中的子記錄

//page  

<apex:page standardController="Enfants__c" extensions="insererEnfants" standardStylesheets="true"> 
<apex:sectionHeader title="Ajouter un enfant" 
    subtitle="{!$User.FirstName}" help="/help/doc/user_ed.jsp?loc=help"></apex:sectionHeader> 
<apex:form > 
    <apex:pageBlock title="Nouveau enfant" id="thePageBlock" mode="edit"> 
     <apex:pageBlockButtons > 
      <apex:commandButton action="{!save}" value="Enregistrer"></apex:commandButton> 
      <apex:commandButton action="{!cancel}" value=" Annuler "></apex:commandButton> 
     </apex:pageBlockButtons> 

     <apex:pageBlockTable value="{!accts}" var="a" id="table"> 
      <apex:facet name="footer"> 
       <apex:commandLink value="Ajouter" action="{!addRow}" rerender="table,error"/> 
      </apex:facet> 
      <apex:facet name="header"> 
       <apex:commandLink value="Supprimer" action="{!deleteRow}" rerender="table,error"/> 
      </apex:facet> 

      <apex:column headerValue="Nom"> 
       <apex:inputField/> value="{!a.Parent__c}"/> 
      </apex:column> 
      <apex:column headerValue="Nom"> 
       <apex:inputField value="{!a.Name}"/> 
      </apex:column> 
      <apex:column headerValue="Prénom"> 
       <apex:inputField value="{!a.Prenom__c}"/> 
      </apex:column> 
          <apex:column headerValue="Né le"> 
       <apex:inputField value="{!a.Date_de_naissance__c}"/> 
      </apex:column> 
          <apex:column headerValue="Lieu de naissance"> 
       <apex:inputField value="{!a.Lieu_de_naissance__c}"/> 
      </apex:column> 
          <apex:column headerValue="Situation"> 
       <apex:inputField value="{!a.Situation__c }"/> 
      </apex:column>       
     </apex:pageBlockTable> 
     </apex:pageblock> 
</apex:form> 
</apex:page> 


//Controller 


public class insererEnfants{ 


public List<Enfants__c> accts {get; set;} 


public insererEnfants(ApexPages.StandardController controller){ 
    accts = new List<Enfants__c>(); 
    accts.add(new Enfants__c(); 

} 

public void addrow(){ 
    accts.add(new Enfants__c());  
} 

public PageReference deleteRow(){ 
    if (accts.size()>1) 
    { 
     accts.remove(accts.size()-1); 
    } 
    return null; 
} 

public PageReference save() 
{ 
    insert accts; 
    Assure__c theParent = new Assure__c(id=accts[0].Parent__c); 
    PageReference acctPage = new ApexPages.StandardController(theParent).view(); 
    acctPage.setRedirect(true); 
    return acctPage; 
} 
} 

回答

2

首先,您沒有引用父對象。你可以解決這個問題有兩種方式:

解決方案1:

傳遞使用URL按鈕父的ID,用類似下面的URL:

/apex/EnfantsPage?assureid={!Assure_c.Id} 

替換「EnfantsPage 「用你的音頻頁面的名字。然後,在控制器內:

String assureid = ApexPages.currentPage().getParameters().get('assureid'); 

現在您知道父代的ID。當您創建新的子記錄時,將父ID的值設置爲您已通過的ID。

public insererEnfants(ApexPages.StandardController controller){ 
    accts = new List<Enfants__c>(); 
    if (assureid <> null) { 
    for (Assure__c assure: [ SELECT Id FROM Assure__c 
          WHERE Id = :assureid]) { 
    accts.add(new Enfants__c(Parent__c = assure.Id)); 
    } else { 
    accts.add(new Enfants__c()); 
    } 
} 

public void addrow(){ 
    if (assure.Id <> null) { 
    accts.add(new Enfants__c(Parent__c = assure.Id)); 
    } else { 
    accts.add(new Enfants__c()); 
    }  
} 

解決方案2:

擴展子控制器代替,延長父:

public Assure__c parent {get;} 
public List<Enfants__c> accts {get; set;} 
public insererEnfants(ApexPages.StandardController stdController) { 
    this.parent = (Assure__c)stdcontroller.getRecord(); 
    accts.add(new Enfants__c(Parent__c = parent.id); 
} 

public void addrow(){ 
    accts.add(new Enfants__c(Parent__c = parent.id); 
} 
+0

感謝您的幫助,但我的問題是在基礎插入ID,我應該修改控制器以插入父代的ID。 – Netmaster

+1

問題是,當您創建子記錄時,您沒有定義父項,也沒有將其設置在其他任何地方。試試這個:accts.add(new Enfants__c(Parent__c = assureid)); – Hraefn

+0

我得到這個錯誤'錯誤:編譯錯誤:變量不存在:確保在第9行第44列'這是我的問題,我沒有找到一個解決方案,直到我建立這個http://boards.developerforce .com/t5/Visualforce-Development/Passing-parent-id-to-child-record-in-VisualForce-page/td-p/111007並且我無法對此問題進行相同 – Netmaster

相關問題