我正在尝试创建我的第一个VF页面。它是一个行项目条目表单,允许用户在单击保存之前输入多个子记录(Enfants_ c)。现在,我从父母的自定义按钮打开VF页面(Assure _c)。但是,当页面打开时,不会填充父项的查找字段 - 因此用户必须单击查找以从Assure__c中选择父项。有没有办法将上一页的父ID传递给VF页面上的新子记录?
//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;
}
}
答案 0 :(得分:2)
首先,您没有引用Parent对象。您可以通过以下两种方式解决:
解决方案1:
使用URL按钮传递父级的ID,其中包含以下内容作为URL:
/apex/EnfantsPage?assureid={!Assure_c.Id}
替换&#34; EnfantsPage&#34;使用您的VF页面的名称。然后,在控制器内:
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 );
}