I am trying to generate a basic apex OutputLink however the record Id is being displayed in the Visualforce Page Component instead of the record name.
How can I correctly format the url to display the record name (with url behind it)?
Any help is appreciated!
VF Page Component:
<apex:pageBlock >
<apex:pageBlockTable value="{! coverageTeam }" var="member">
<apex:column >
<apex:facet name="header">Role</apex:facet>
{! member.role }
</apex:column>
<apex:column >
<apex:facet name="header">Name</apex:facet>
<apex:outputLink value = "/{!member.name}">
{!member.name}
</apex:outputLink>
</apex:column>
</apex:pageBlockTable>
</apex:pageBlock>
======================================================================
Apex Controller:
public with sharing class SL_ctrl_AccountCoverageTeam_comp {
private final ApexPages.StandardController controller;
public String accountId {get;set;}
public SL_ctrl_AccountCoverageTeam_comp() {
//accountId = ApexPages.currentPage().getParameters().get('id');
}
public List<CoverageTeamMember> getCoverageTeam() {
if(this.controller != null)
return this.getCoverageTeam( getAccount( this.controller.getId() ) );
else
return this.getCoverageTeam( getAccount( accountId ) );
}
private Account getAccount( ID account ) {
return [ SELECT Producer__r.Name, Servicer_1__c, Servicer_2__c FROM Account WHERE Id = :account ];
}
private List<CoverageTeamMember> getCoverageTeam( Account account ) {
List<CoverageTeamMember> result = this.getStaticCoverageTeam( account );
for ( AggregateResult policy : [
SELECT Servicer_Department_Name__c role, Servicer__r.Id name, Active__c a
FROM Policy__c
WHERE Account__c = :account.Id AND
Servicer_Department_Name__c != null AND
Servicer__c != null AND
Active__c = True
GROUP BY Servicer_Department_Name__c, Servicer__r.Id, Active__c
] ) {
result.add( new CoverageTeamMember( policy ) );
}
return result;
}
private List<CoverageTeamMember> getStaticCoverageTeam( Account account ) {
List<CoverageTeamMember> result = new List<CoverageTeamMember>();
result.add( new CoverageTeamMember( 'Producer', account.Producer__r.Id ) );
result.add( new CoverageTeamMember( 'Client Owner', account.Servicer_1__c ) );
}
public class CoverageTeamMember {
public final String role { get; set; }
public final String name { get; set; }
public CoverageTeamMember( AggregateResult policy ) {
this( String.valueOf( policy.get( 'role' ) ), String.valueOf( policy.get( 'name' ) ) );
}
public CoverageTeamMember( String role, String name) {
this.role = role;
this.name = name;
}
}
}
Best Answer
You have variable 'name' assigned an Id. So you should create one more variable in your CoverageTeamMember wrapper class and assign the name from the aggregate query.
Then the following query
should be changed to
EDIT:
As per comments, the error is because of the getStaticCoverageTeam method which calls the two parameter constructor of wrapper class.
Pass whatever name you want to be populated as third parameter.
Hope this helps.