I have created a custom object "Assure__c" and a custom apex class "insEnfant" like this :
<apex:page standardController="Assure__c" extensions="insEnfant" standardStylesheets="true">
<apex:sectionHeader title="Ajouter un assuré"
subtitle="{!$User.FirstName}" help="/help/doc/user_ed.jsp?loc=help"></apex:sectionHeader>
<apex:form >
<apex:pageBlock title="Nouveau assuré" 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:pageBlockSection title="Liste des enfants" columns="1"
rendered="{!IF(Assure__c.Nombre_enfants__c > 0, true, false)}">
<apex:pageBlockTable value="{!accts}" var="a" id="table">
<apex:facet name="footer">
<apex:commandLink value="Ajouter" action="{!addRow}" rerender="table,error"/>
</apex:facet>
<apex:column headerValue="Nom">
<apex:inputHidden value="{!Assure__c.Name}" id="theHiddenInput"/>
</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:pageBlockSection>
</apex:pageblock>
</apex:form>
</apex:page>
public class insEnfant{
public List<Enfants__c> accts {get; set;}
public insEnfant(){
accts = new List<Enfants__c>();
accts.add(new Enfants__c());
}
public void addrow(){
accts.add(new Enfants__c());
}
public PageReference save(){
insert accts;
PageReference home = new PageReference('/home/home.jsp');
home.setRedirect(true);
return home;
}
}
But when I tried to save it I obtain this error:
Error: Unknown constructor 'insEnfant.insEnfant(ApexPages.StandardController controller)'
Create Apex method 'insEnfant.insEnfant(ApexPages.StandardController controller)'
As I am new to salesforce.com, can anyone please give me the code for this??
Take a look at http://www.salesforce.com/us/developer/docs/pages/Content/pages_controller_extension.htm which explains that a controller extension needs to have a constructor that takes a StandardController as argument. (You've provided a constructor that takes no arguments.) There's some sample code on that page that you may find helpful.
Related
I'm trying to do a small project and I am stuck as I couldn't pull out the ID of the specified record of a custom object from vf page to apex class the code is given below
<apex:page standardController="enquiry__c" extensions='callme' recordSetVar="items"> <!--here enquiry__c is a custom object -->
<apex:form>
<apex:pageblock>
<apex:pageblocksection>
<apex:pageBlockTable value='{!items}' var='en' width="200" >
<apex:column value='{!en.name}'/>
<apex:column value='{!en.Student_Enquiry_Name__c}'/>
<apex:column value='{!en.phone__c}'/>
<apex:column value='{!en.email__c}'/>
<apex:column value='{!en.Status__c}'/>
<apex:column headerValue="Action">
<apex:commandButton value='convert to student'/>
</apex:column>
<apex:column headerValue="Record ID">
<apex:outputText value='{!en.id}' />
</apex:column>
</apex:pageBlockTable>
<apex:commandButton value='new' action='{!newenquiry}'/>
</apex:pageblocksection>
</apex:pageblock>
</apex:form>
</apex:page>
And the output is as below
So my question is when I click on button "convert to student" beside a particular record I have to get the ID of that record into apex class and the apex code is given below
public class callme
{
public enquiry__c e {get;set;}
public id i {get;set;}
public callme(ApexPages.StandardSetController c)
{
}
public PageReference newenquiry()
{
PageReference p=new PageReference('/apex/vfTab_on_enquiry');
return p;
}
public PageReference newcourse()
{
PageReference p=new PageReference('/apex/courseInsertion');
return p;
}
}
Please help me with this, thanks in advance.
-> you can use actionFunction for this.
-> create a js function called callActionMethod and invoke this function on the click of "convert to student" button.
-> create convertStudent method in apex class.
-> create an actionfunction named callConvertStudentMethod and pass the record id to the parameter.
Apex Controller:
public class callme
{
public enquiry__c e {get;set;}
public id i {get;set;}
public callme(ApexPages.StandardSetController c)
{
e = new enquiry__c();
}
public PageReference newenquiry()
{
PageReference p=new PageReference('/apex/vfTab_on_enquiry');
return p;
}
public PageReference newcourse()
{
PageReference p=new PageReference('/apex/courseInsertion');
return p;
}
public void convertStudent(){
system.debug('record id ---->'+i);
e = [SELECT FIELDS(ALL) FROM enquiry__c WHERE ID = :i];
system.debug('student record ---->'+e);
}
}
VF Page:
<apex:page standardController="enquiry__c" extensions='callme' recordSetVar="items"> <!--here enquiry__c is a custom object -->
<apex:form>
<apex:pageblock id='resultPanel'>
<apex:pageblocksection>
<apex:pageBlockTable value='{!items}' var='en' width="200" >
<apex:column value='{!en.name}'/>
<apex:column value='{!en.Student_Enquiry_Name__c}'/>
<apex:column value='{!en.phone__c}'/>
<apex:column value='{!en.email__c}'/>
<apex:column value='{!en.Status__c}'/>
<apex:column headerValue="Action">
<apex:commandButton value='convert to student' onclick="callActionMethod({!en.id})" />
</apex:column>
<apex:column headerValue="Record ID">
<apex:outputText value='{!en.id}' />
</apex:column>
</apex:pageBlockTable>
<apex:commandButton value='new' action='{!newenquiry}'/>
</apex:pageblocksection>
</apex:pageblock>
<apex:actionFunction name="callConvertStudentMethod" action="{!convertStudent}" reRender="resultPanel" >
<apex:param name="firstParam" assignTo="{!i}" value="" />
</apex:actionFunction>
</apex:form>
<script type="text/javascript">
function callActionMethod(ele)
{
callConvertStudentMethod(ele);
}
</script>
</apex:page>
I get an error in visualforce page now. Saying:
Error:Unknown property 'tudent__cStandardController.d'
This happens when I add the delete commandLink button to the vf page. Before I add it it doesn't put out an error but on it doesn't display records on the page.
Thanks for help in advance
Visualforce code:
<apex:page standardController="tudent__c" extensions="vidsav">
<apex:form >
<apex:outputPanel id="check">
<apex:pageBlock title="Dodaj Študenta">
<apex:pageBlockSection columns="1">
<apex:inputField value="{! tudent__c.Name }"/>
<apex:inputField value="{! tudent__c.priimek__c }"/>
<apex:inputField value="{! tudent__c.Datum_rojstva__c }"/>
<apex:inputField value="{! tudent__c.letnik__c }"/>
<apex:inputField value="{! tudent__c.Naslov__c }"/>
<apex:inputField value="{! tudent__c.naziv_fakultete__c }"/>
<apex:inputField value="{! tudent__c.tudijski_program__c }"/>
<apex:inputField value="{! tudent__c.tip_tudija__c }">
<apex:actionSupport event="onchange" rerender="check" />
</apex:inputField>
<apex:inputField value="{! tudent__c.Samopla_nik__c }" rendered="{!IF( tudent__c.tip_tudija__c == 'izredni', true, false )}" />
</apex:pageBlockSection>
<apex:pageBlockButtons >
<apex:commandButton action="{!save}" value="Save" />
<apex:commandButton value="Cancel" action="{!cancel}"/>
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:outputPanel>
<apex:pageBlock title="Študenti">
<apex:pageBlockTable value="{!studentsR}" var="s" >
<apex:commandLink action="{!deleteStudent}" onclick="if(!confirm('Are you sure?')) return false;">`enter code here`Del
<apex:param value="{!d.Id}" name="idToDel" assignTo="{!SelectedStudentId}"/>
</apex:commandLink>
<apex:column value="{!s.Name}"/>
<apex:column value="{!s.priimek__c}"/>
<apex:column value="{!s.Datum_rojstva__c}"/>
<apex:column value="{!s.letnik__c}"/>
<apex:column value="{!s.Naslov__c}"/>
<apex:column value="{!s.naziv_fakultete__c}"/>
<apex:column value="{!s.tudijski_program__c}"/>
<apex:column value="{!s.tip_tudija__c}"/>
<apex:column value="{!s.Samopla_nik__c}"/>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>
Controller:
public class vidsav {
public vidsav(ApexPages.StandardController controller) {
}
public List<tudent__c> studentsR {get;set;}
public String SelectedStudentId {get;set;}
public vidsav() {
loadData();
}
public void loadData() {
studentsR = [Select id,Name,priimek__c,Datum_rojstva__c,letnik__c,Naslov__c,naziv_fakultete__c,tudijski_program__c,tip_tudija__c,Samopla_nik__c, CreatedDate from tudent__c Order By CreatedDate desc];
}
public void deleteStudent(){
studentsR = [Select id,Name,priimek__c,Datum_rojstva__c,letnik__c,Naslov__c,naziv_fakultete__c,tudijski_program__c,tip_tudija__c,Samopla_nik__c, CreatedDate from tudent__c where id = :SelectedStudentId];
if(studentsR.size() > 0 || studentsR[0].Id != ''){
delete studentsR;
}
loadData();
}
}
Here is the updated code you should use ->
1) Update your PageBlockTable to this -
<apex:pageBlockTable value="{!studentsR}" var="s" >
<apex:column value="{!s.Name}"/>
<apex:column value="{!s.priimek__c}"/>
<apex:column value="{!s.Datum_rojstva__c}"/>
<apex:column value="{!s.letnik__c}"/>
<apex:column value="{!s.Naslov__c}"/>
<apex:column value="{!s.naziv_fakultete__c}"/>
<apex:column value="{!s.tudijski_program__c}"/>
<apex:column value="{!s.tip_tudija__c}"/>
<apex:column value="{!s.Samopla_nik__c}"/>
<apex:column>
<apex:commandLink action="{!deleteStudent}" onclick="if(!confirm('Are you sure?')) return false;" value="Del">
<apex:param value="{!s.Id}" name="idToDel" assignTo="{!SelectedStudentId}"/>
</apex:commandLink>
</apex:column>
You needed to put your commandLink inside an apex:column in order for it to display correctly in the pageBlockTable and also of course the d had to be replaced with a s since your table variable is s (var="s").
2) Update your Controller to this -
public class vidsav {
public vidsav(ApexPages.StandardController controller) {
loadData();
}
public List<Account> studentsR {get;set;}
public String SelectedStudentId {get;set;}
public void loadData() {
studentsR = [Select id,Name,priimek__c,Datum_rojstva__c,letnik__c,Naslov__c,naziv_fakultete__c,tudijski_program__c,tip_tudija__c,Samopla_nik__c, CreatedDate from tudent__c Order By CreatedDate desc];
}
public void deleteStudent(){
studentsR = [Select id,Name,priimek__c,Datum_rojstva__c,letnik__c,Naslov__c,naziv_fakultete__c,tudijski_program__c,tip_tudija__c,Samopla_nik__c, CreatedDate from tudent__c where id = :SelectedStudentId];
if(studentsR.size() > 0 || studentsR[0].Id != ''){
delete studentsR;
}
loadData();
}
}
You were using two constructors and were calling loadData() from the wrong one and this is why it was not loading data. With this you will be able to delete records and reload your table.
Replace {!d.Id} with {!s.Id}
The variable used to traverse the records in the pageblocktable is s not d.
All,
I am attempting to show all cases that meet certain criteria in salesforce using visual force page, then I would like to use that data in a gantt chart. I do know much about coding, but trying based on user manuals. This visualforce page comes back without any case information.
<apex:page standardController="Case" >
<apex:form >
<apex:pageBlock >
<apex:pageMessages />
<apex:pageBlockButtons>
<apex:commandButton value="Save" action="{!save}"/>
</apex:pageBlockButtons>
<apex:PageBlockTable value="{!Case}" var="c">
<apex:column value="{!c.Account}"/>
<apex:column value="{!c.Number}"/>
<apex:column value="{!c.Owner}"/>
<apex:column headerValue="Install Date">
<apex:inputField value="{!a.Planned_Install_Date__c}"/>
</apex:column>
</apex:PageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>
You need an apex controller class to get data from Salesforce to the visual force page. Something like this:
Visual Page:
<apex:page standardController="Case" controller="MyCaseController">
<apex:form >
<apex:pageBlock >
<apex:pageMessages />
<apex:pageBlockButtons>
<apex:commandButton value="Save" action="{!save}"/>
</apex:pageBlockButtons>
<apex:PageBlockTable value="{!Cases}" var="c">
<apex:column value="{!c.Accountid}"/>
<apex:column value="{!c.CaseNumber}"/>
<apex:column value="{!c.OwnerId }"/>
</apex:PageBlockTable>
</apex:pageBlock>
</apex:form>
Controller:
public class MyCaseController {
public list<Case> cases {get;set;}
public MyCaseController(){
cases = [select id, accountid, CaseNumber, OwnerId from case];
}
}
You should be able to accommodate the code to your needs.
Here hidden_field__c is a checkbox.
When in the VFP if user changes the checkbox to true in the database it still shows as false and vice-versa
Can someone please point out what's missing in my code.?
This is my code.
-----------controller --------------
public class dataTableCon {
List<Account> accounts;
public List<Account> getAccounts() {
if(accounts == null) accounts = [select name, owner.name,hidden_field__c from account limit 10];
return accounts;
}
}
---------VFP-------------
<apex:page controller="dataTableCon" id="page">
<apex:form >
<apex:pageBlock id="theBlock">
<apex:dataTable value="{!accounts}" var="account" id="theTable" rowClasses="odd,even" styleClass="tableClass">
<apex:column >
<apex:facet name="header">Private</apex:facet>
<apex:inputCheckbox value="{!account.hidden_field__c}" >
<apex:actionSupport event="onchange" rerender="theBlock"/>
</apex:inputCheckbox>
</apex:column>
<apex:column >
<apex:facet name="header">Name</apex:facet>
<apex:outputText value="{!account.name}" >
</apex:column>
<apex:column >
<apex:facet name="header">Owner</apex:facet>
<apex:outputText value="{!account.owner.name}" >
</apex:column>
</apex:dataTable>
</apex:pageBlock>
</apex:form>
</apex:page>
You need to have some mechanism that actually saves the changes. Try adding an <apex:commandButton> inside your <apex:form>, and then have that button call an action that saves.
Apex:
public PageReference save()
{
update accounts;
}
Visualforce:
<apex:commandButton value="Save" action="{!save}"/>
I have the following visualforce page and need to filter either the related lists or the pageblocktables by the case.recortype or case.recordtype.id field. Can anyone guide me to finding out how to do this? Thanks
<apex:page standardController="Account" >
<apex:pageblock title="Cases" >
<apex:pageblockSection >
<apex:relatedList title="Support Cases" list="Cases"/>
</apex:pageblockSection>
<apex:pageblockSection >
<apex:relatedList title="Training Cases" list="Cases"/>
</apex:pageblockSection>
</apex:pageblock>
<apex:pageBlock title="Support Cases" >
<apex:pageBlockTable value="{!Account.Cases}" var="c">
<apex:column headervalue="Case"><apex:outputLink value="/{!c.id}">{!c.CaseNumber}</apex:outputLink></apex:column>
<apex:column value="{!c.Contact.Name}"/>
<apex:column value="{!c.Subject}"/>
<apex:column value="{!c.Priority}"/>
<apex:column value="{!c.CreatedDate}"/>
<apex:column value="{!c.status}"/>
<apex:column value="{!c.createdbyId}"/>
</apex:pageBlockTable>
</apex:pageBlock>
<apex:pageBlock title="Training Cases" >
<apex:pageBlockTable value="{!Account.Cases}" var="c">
<apex:column headervalue="Case"><apex:outputLink value="/{!c.id}">{!c.CaseNumber}</apex:outputLink></apex:column>
<apex:column value="{!c.Contact.Name}"/>
<apex:column value="{!c.Subject}"/>
<apex:column value="{!c.Priority}"/>
<apex:column value="{!c.CreatedDate}"/>
<apex:column value="{!c.status}"/>
<apex:column value="{!c.createdbyId}"/>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:page>
Update: This is What I actually ended up doing:
Page:
<apex:page standardController="account" extensions="SupportCasefilter,TrainingCasefilter">
<apex:form >
<apex:pageBlock title="Support Cases">
<apex:pageBlockTable value="{!SupportCases}" var="s">
<apex:column headervalue="Case"><apex:outputLink value="/{!s.id}">{!s.CaseNumber}</apex:outputLink></apex:column>
<apex:column value="{!s.Contact.Name}"/>
<apex:column value="{!s.Subject}"/>
<apex:column value="{!s.Priority}"/>
<apex:column value="{!s.CreatedDate}"/>
<apex:column value="{!s.status}"/>
<apex:column value="{!s.createdbyId}"/>
</apex:pageBlockTable>
</apex:pageBlock>
<apex:pageBlock title="Training Cases">
<apex:pageBlockTable value="{!TrainingCases}" var="t">
<apex:column headervalue="Case"><apex:outputLink value="/{!t.id}">{!t.CaseNumber}</apex:outputLink></apex:column>
<apex:column value="{!t.Contact.Name}"/>
<apex:column value="{!t.Subject}"/>
<apex:column value="{!t.Priority}"/>
<apex:column value="{!t.CreatedDate}"/>
<apex:column value="{!t.status}"/>
<apex:column value="{!t.createdbyId}"/>
<apex:column value="{!t.recordtype.id}"/>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
controller1:
public with sharing class SupportCasefilter {
public id accRecId;
public SupportCasefilter(ApexPages.StandardController controller) {
accRecId = [select id from account where id = :ApexPages.currentPage().getParameters().get('id')].id;
}
List<case> supportCases;
public List<case> getSupportCases() {
if(accRecId != null) {
supportCases= [SELECT Id, Contact.name, recordtype.id, casenumber, subject, priority, createddate, status, createdbyid
FROM Case
WHERE Record_Type__c='Support' AND account.id=:accRecId];
}
return supportCases;
}
}
controller2:
public with sharing class TrainingCasefilter {
public id accRecId;
public TrainingCasefilter(ApexPages.StandardController controller) {
accRecId = [select id from account where id = :ApexPages.currentPage().getParameters().get('id')].id;
}
List<case> trainingCases;
public List<case> getTrainingCases() {
if(accRecId != null) {
trainingCases= [SELECT Id, Contact.name, recordtype.id, casenumber, subject, priority, createddate, status, createdbyid
FROM Case
WHERE Record_Type__c='Training' AND account.id=:accRecId];
}
return trainingCases;
}
}
Here's what I have done in the past:
1 - Create a List<RecordType> validRecordTypes that contains valid RecordTypeIds in the Controller
2 - Filter your objects Account.Cases using the the list validRecordTypes in the Controller.
3 - When you try to access Account.Cases in the VisualForce page, the objects should be post-filtered objects
I'd recommend applying the record type filter within the controller itself using a SOQL query before passing the results into the pageBlockTable.