Roles are assigned to each Employee and each employee has a checkbox. Whenever checkbox is checked and Role selected from Dropdown(Roles from Picklist), New Role Should be assigned to Employee after clicking on Update Button.
How do i get it.. I've assigned ID to checkbox and trying like if Checkbox==true then perform certain condition but it is not working..Please guide me
VF Page
<apex:page extensions="EmployeeSelectClassController13" standardController="Employee__c" sidebar="false">
<apex:form >
<apex:pageBlock >
<apex:pageBlockSection title="Employees" collapsible="false">
<apex:pageBlockTable value="{!wrapEmployeeList}" var="empWrap" id="table" title="All Employees">
<apex:column >
<apex:inputCheckbox value="{!empWrap.selected}" id="inputCheckbox"/>
</apex:column>
<apex:column value="{!empWrap.emp.Name}" id="inputName" />
<apex:column value="{!empWrap.emp.Role__c}" id="inputRole" />
</apex:pageBlockTable>
<apex:pageBlockSection id="InfoId" columns="1" >
<apex:selectList size="1" value="{!SelectedValue}">
<apex:selectOptions value="{!statusOptions}"/>
</apex:selectList>
</apex:pageBlockSection>
<apex:commandButton value="Update" id="inputButton" action="{!updateRole}" />
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
Apex Controller
public class EmployeeSelectClassController13 {
public List<wrapEmployee> wrapEmployeeList {get; set;}
public List<Employee__c> empRecord {get;set;}
public string selectedValue { get;set; }
public List<SelectOption> statusOptions { get;set; }//TO get Roles from Employee
public EmployeeSelectClassController13(ApexPages.StandardController controller){
if(wrapEmployeeList == null){
wrapEmployeeList = new List<wrapEmployee>();
for(Employee__c empList:[Select Name,Role__c from Employee__c]){
wrapEmployeeList.add(new wrapEmployee(empList));
autorun();
}
}
}
public class wrapEmployee{
public Employee__c emp {get; set;}
public Boolean selected {get; set;}
public wrapEmployee(Employee__c e) {
emp = e;
selected = false;
}
}
//To get all Roles(PickList) from Employee Object
public void autoRun()
{
Schema.DescribeFieldResult statusFieldDescription = Employee__c.Role__c.getDescribe();
statusOptions = new list<SelectOption>();
for (Schema.Picklistentry picklistEntry : statusFieldDescription.getPicklistValues())
{
statusOptions.add(new SelectOption(pickListEntry.getValue(),pickListEntry.getLabel()));
}
}
public void updateRole()
{
}
}
Something like this? You don't need IDs in the Visualforce unless you do some JavaScript magic. This can be done completely in Apex.
public void updateRole(){
List<Employee__c> toUpdate = new List<Employee__c>();
for(wrapEmployee wrap : wrapEmployeeList){
if(wrap.selected){
wrap.emp.Role__c = SelectedValue;
// wrap.selected = false; // you could choose to untick checkboxes now?
// or after successful update loop through them one more time and then untick
toUpdate.add(wrap.emp);
}
}
update toUpdate;
}
I'm racking my brain over this. Its a simple on change function which should fire but when I test in my org, I never get the debug "here" despite getting the rest in my class. I've looked over dozens of different google results and the code is identical. Does anyone know if SF is just broken?
public class testController {
public static String testNewString {get;set;}
public testController(){}
public static Boolean isAccountAvailable()
{
System.debug('here');
List<Account> tempList = ([SELECT Id
FROM Account
WHERE Name = :testNewString]);
if(tempList.size() != 0)
{
return true;
}
else
{
return false;
}
}
}
<apex:page controller="testController" docType="html-5.0">
<apex:form id="form1">
<apex:inputText value="{!testNewString }" html-placeholder="New Sales Order #">
<apex:actionSupport event="onChange" action="{!isAccountAvailable}" rerender="form1" />
</apex:inputText>
</apex:form>
</apex:page>
For whoever is looking for an answer, the fix for this code snippet is subtle. Make sure the function returns a page reference. Making fields global might help make it visible to VF.
public class TestController {
public String testNewString {get;set;}
public testController(){}
public PageReference isAccountAvailable()
{
System.debug('here');
List<Account> tempList = ([SELECT Id
FROM Account
WHERE Name = :testNewString]);
if(tempList.size() != 0)
{
System.debug('true');
}
else
{
System.debug('false');
}
return null;
}
}
<apex:page controller="TestController" docType="html-5.0">
<apex:form id="form1">
<apex:inputText value="{!testNewString}" html-placeholder="New Sales Order #">
<apex:actionSupport event="onchange" action="{!isAccountAvailable}" rerender="form1" />
</apex:inputText>
</apex:form>
</apex:page>
VisualForce page not displaying a list of records - title says it all.
How do I get the VF page to display the records that it is obviously counting (as it says 1-15 of 7549 records).
Looks like this:
http://i.imgur.com/KuChyJn.png - 'Wells' page
However, this is what we want it to look like (the one that we currently have working!):
http://i.imgur.com/uwXOsHS.png - 'Modems' page (I blacked out some fields, as the company we work for may not want this information disclosed)
My team is working on a salesforce.com application and we have an object, 'Modem', that contains approximately 7,500 records.
ModemController
We have created a custom controller, ModemController:
public class ModemController {
public apexpages.standardsetcontroller con {get;set;}
public Integer noOfRecords{get; set;}
public Integer size{get; set;}
public Modem__c modems {get; set;}
public List<Modem__c> AllSearchModems
{
get
{
if (con!= null)
return (List<Modem__c>)con.getRecords();
else
return null;
}
set;
}
public ModemController() {
AllSearchModems = new List<Modem__c>();
modems = new Modem__c();
String Name = ApexPages.currentPage().getParameters().get('Name');
List<Modem__c> modems = [SELECT Name FROM Modem__c WHERE ID= :Name];
}
public PageReference save()
{
update modems;
return new PageReference('/' + modems.Name);
}
public ApexPages.StandardSetController setCon {
get{
if(setCon == null){
size = 15;
string queryString = 'SELECT Name, ModemActive__c, ModemCarrier__c, ModemCarrierData__c, DataPlanName__c, ESNNumber__c, ModemICCID__c, IMEINumber__c, IMSINumber__c, ModemIPEXT__c, ModemJob__c, ModemManufacturer__c, ModemModel__c, ModemPhone__c, PortForwarding__c, ModemIPPort__c, SIMNumber__c, ModemIPSlave__c, ModemStaticIP__c, ModemFirmwareVersion__c FROM Modem__c ORDER BY Name';
setCon = new ApexPages.StandardSetController(Database.getQueryLocator(queryString));
setCon.setPageSize(size);
noOfRecords = setCon.getResultSize();
}
return setCon;
}
set;
}
public List<Modem__c> getModems()
{
List<Modem__c> modemList = new List<Modem__c>();
for(Modem__c w : (List<Modem__c>)setCon.getRecords())
modemList.add(w);
return modemList;
}
public PageReference refresh() {
setCon = null;
getModems();
setCon.setPageNumber(1);
return null;
}
public PageReference Search()
{
if (modems.Name != null)
{
con = new ApexPages.StandardSetController(Database.getQueryLocator([SELECT Name, ModemActive__c,ModemCarrier__c,ModemCarrierData__c,DataPlanName__c,ESNNumber__c,ModemICCID__c, IMEINumber__c,IMSINumber__c,ModemIPEXT__c,ModemJob__c, ModemManufacturer__c,ModemModel__c,ModemPhone__c, PortForwarding__c, ModemIPPort__c,SIMNumber__c,ModemIPSlave__c,ModemStaticIP__c, ModemFirmwareVersion__c FROM Modem__c Modem__c WHERE Name= :modems.Name]));
con.setPageSize(10);
}
else
{
con = null;
}
return null;
}
public Boolean hasNext {
get {
return setCon.getHasNext();
}
set;
}
public Boolean hasPrevious {
get {
return setCon.getHasPrevious();
}
set;
}
public Integer pageNumber {
get {
return setCon.getPageNumber();
}
set;
}
public void first() {
setCon.first();
}
public void last() {
setCon.last();
}
public void previous() {
setCon.previous();
}
public void next() {
setCon.next();
}
}
Custom VF page for 'Wells' page
Here is the custom visualforce page for the 'Wells' page:
<apex:page controller="ModemController">
<apex:form >
<apex:pageBlock id="pb">
<apex:pageBlockTable value="{!Modems}" var="m">
<apex:column value="{!m.Name}" />
<apex:column value="{!m.ModemManufacturer__c}"/>
<apex:column value="{!m.ModemModel__c}"/>
<apex:column value="{!m.ModemICCID__c}"/>
<apex:column value="{!m.ModemIPEXT__c}"/>
<apex:column value="{!m.ModemCarrier__c}"/>
<apex:column value="{!m.ModemActive__c}"/>
</apex:pageBlockTable>
<apex:panelGrid columns="7">
<apex:commandButton status="fetchStatus" reRender="pb" value="|<" action="{!first}" disabled="{!!hasPrevious}" title="First Page"/>
<apex:commandButton status="fetchStatus" reRender="pb" value="<" action="{!previous}" disabled="{!!hasPrevious}" title="Previous Page"/>
<apex:commandButton status="fetchStatus" reRender="pb" value=">" action="{!next}" disabled="{!!hasNext}" title="Next Page"/>
<apex:commandButton status="fetchStatus" reRender="pb" value=">|" action="{!last}" disabled="{!!hasNext}" title="Last Page"/>
<apex:outputText >{!(pageNumber * size)+1-size}-{!IF((pageNumber * size)>noOfRecords, noOfRecords,(pageNumber * size))} of {!noOfRecords}</apex:outputText>
<apex:commandButton status="fetchStatus" reRender="pb" value="Refresh" action="{!refresh}" title="Refresh Page"/>
<apex:outputPanel style="color:#4AA02C;font-weight:bold">
<apex:actionStatus id="fetchStatus" startText="Fetching..." stopText=""/>
</apex:outputPanel>
</apex:panelGrid>
</apex:pageBlock>
</apex:form>
This controller works for other tabs, (see the 'Wells' page, it uses an identical controller and it works!) but does not work for 'Modems' page.
We see that 'Modems' page is at least reading in the 7,549 records (by looking at a variable noOfRecords to count how many there are) but not displaying them. I have even tried adding LIMIT to the SOQL query, to no avail. (limited it to 2,000, 1999, 1001, 1000, 999, and even 30,20, and 10)
I don't think the amount of records is the issue, I could be wrong.
If anyone has any tips, it would be greatly appreciated!
WellController
If anyone requests, here is the working code for the 'Wells' page, both VisualForce and Apex code:
WellController:
public class WellController {
public apexpages.standardsetcontroller con {get;set;}
public Integer noOfRecords{get; set;}
public Integer size{get; set;}
public Well__c wellz {get; set;}
public List<Well__c> AllSearchWells
{
get
{
if (con!= null)
return (List<Well__c>)con.getRecords();
else
return null;
}
set;
}
public WellController() {
AllSearchWells = new List<Well__c>();
wellz = new Well__c();
String Name = ApexPages.currentPage().getParameters().get('Name');
List<Well__c> wellz = [SELECT Name FROM Well__c WHERE ID = :Name];
}
public PageReference save()
{
update wellz;
return new PageReference('/' + wellz.Name);
}
public ApexPages.StandardSetController setCon {
get{
if(setCon == null){
size = 15;
string queryString = 'SELECT Name, WellLocActivationDate__c, Active__c, AntennaType__c, WellLocBillTo__c, CompanyName__c, CompanyName_del__c, WellLocCompanyName__c, ConnectedCarrier__c, ContactReponsible__c, DataNetwork__c, WellLocSPOCDataPlan__c, WellSiteEquipHistory__c, WellLoclPD__c, WellLocKillDate__c, ModemConnectedTo__c, Name__c, WellLocModemSerial__c, SignalQuality__c, SignalStrength__c, SimCardNumber__c, TechResponsible__c, Action__c, ActionDate__c, WellLocName__c, WellLocOwningCompanyName__c FROM Well__c ORDER BY Name';
setCon = new ApexPages.StandardSetController(Database.getQueryLocator(queryString));
setCon.setPageSize(size);
noOfRecords = setCon.getResultSize();
}
return setCon;
}
set;
}
public List<Well__c> getWells()
{
List<Well__c> wellList = new List<Well__c>();
for(Well__c w : (List<Well__c>)setCon.getRecords())
wellList.add(w);
return wellList;
}
public PageReference refresh() {
setCon = null;
getWells();
setCon.setPageNumber(1);
return null;
}
public PageReference Search()
{
if (wellz.Name != null)
{
con = new ApexPages.StandardSetController(Database.getQueryLocator([SELECT Name, WellLocActivationDate__c, Active__c, AntennaType__c, WellLocBillTo__c, CompanyName__c, CompanyName_del__c, WellLocCompanyName__c, ConnectedCarrier__c, ContactReponsible__c, DataNetwork__c, WellLocSPOCDataPlan__c, WellSiteEquipHistory__c, WellLoclPD__c, WellLocKillDate__c, ModemConnectedTo__c, Name__c, WellLocModemSerial__c, SignalQuality__c, SignalStrength__c, SimCardNumber__c, TechResponsible__c, Action__c, ActionDate__c, WellLocName__c, WellLocOwningCompanyName__c FROM Well__c Well__c where Name = :wellz.Name]));
con.setPageSize(10);
}
else
{
con = null;
}
return null;
}
public Boolean hasNext {
get {
return setCon.getHasNext();
}
set;
}
public Boolean hasPrevious {
get {
return setCon.getHasPrevious();
}
set;
}
public Integer pageNumber {
get {
return setCon.getPageNumber();
}
set;
}
public PageReference make()
{
return Page.wellCreate;
}
public void first() {
setCon.first();
}
public void last() {
setCon.last();
}
public void previous() {
setCon.previous();
}
public void next() {
setCon.next();
}
}
VF page - 'Wells'
And the VisualForce page associated with the 'Wells' object:
<apex:page controller="WellController">
<apex:form >
<apex:pageBlock title="Wells" id="pb">
<apex:pageBlockSection >
<apex:commandButton action="{!make}" value="Create New"/>
</apex:pageBlockSection>
<apex:pageBlockTable value="{!Wells}" var="w">
<apex:column headerValue="Well Name">
<apex:outputLink value="/apex/wellEdit?id={!w.id}">{!w.WellLocName__c}</apex:outputLink>
</apex:column>
<apex:column value="{!w.WellLocModemSerial__c}" />
<apex:column value="{!w.WellLocCompanyName__c}" />
<apex:column value="{!w.WellLocOwningCompanyName__c}" />
<apex:column value="{!w.WellLocBillTo__c}" />
<apex:column value="{!w.Active__c}" />
</apex:pageBlockTable>
<apex:panelGrid columns="7">
<apex:commandButton status="fetchStatus" reRender="pb" value="|<" action="{!first}" disabled="{!!hasPrevious}" title="First Page"/>
<apex:commandButton status="fetchStatus" reRender="pb" value="<" action="{!previous}" disabled="{!!hasPrevious}" title="Previous Page"/>
<apex:commandButton status="fetchStatus" reRender="pb" value=">" action="{!next}" disabled="{!!hasNext}" title="Next Page"/>
<apex:commandButton status="fetchStatus" reRender="pb" value=">|" action="{!last}" disabled="{!!hasNext}" title="Last Page"/>
<apex:outputText >{!(pageNumber * size)+1-size}-{!IF((pageNumber * size)>noOfRecords, noOfRecords,(pageNumber * size))} of {!noOfRecords}</apex:outputText>
<apex:commandButton status="fetchStatus" reRender="pb" value="Refresh" action="{!refresh}" title="Refresh Page"/>
<apex:outputPanel style="color:#4AA02C;font-weight:bold">
<apex:actionStatus id="fetchStatus" startText="Fetching..." stopText=""/>
</apex:outputPanel>
</apex:panelGrid>
</apex:pageBlock>
</apex:form>
The issue here is likely because the Profile of the user who you are logged in as does not have access to any of the fields on the Well__c object.
VF pages, when using <apex:outputField /> bindings, enforces field level security and will hide the fields which the user does not have access to.
If you look at field level security for this object, I suspect you will find that your profile does not have access to any of the fields which you're using in the columns. Security on the Modem__c object has probably been set correctly for its fields.
VF code:
<apex:repeat value="{!strings}" var="stringer" id="theRepeat">
<apex:CommandButton value="{!stringer}" id="theValue"style="padding:10px;spacing:10px" action="{!repeatFunction}">
<apex:param name="paramValue" value="{!stringer}"/>
</apex:commandButton>
</apex:repeat>
Apex Class Code:
public String[] getStrings() {
return new String[]{'ONE','TWO','THREE'};
}
public String ButtonNum {get;set;}
public void repeatFunction() {
ButtonNum = apexpages.currentpage().getparameters().get('stringer');
ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.Info,'num'+ButtonNum ));
}
Hi Everyone,
I want to display the value of the button by using repeat function. Above is my code and i'm unable to display the button values respectively.
Thanks in advance.
Use Name attribute value in the controller
ButtonNum = apexpages.currentpage().getparameters().get('paramValue');
OR
You can use assignTo attribute of apex:param it gives value in controller:
<apex:page controller="test">
<apex:outputPanel id="msg">
<apex:messages />
</apex:outputPanel>
<apex:form >
<apex:repeat value="{!strings}" var="stringer">
<apex:commandButton value="{!stringer}" id="theValue" action="{!repeatFunction}" reRender="msg">
<apex:param name="paramValue" value="{!stringer}" assignTo="{!ButtonNum}"/>
</apex:commandButton>
</apex:repeat>
</apex:form>
</apex:page>
Apex Class :
public class test
{
public String[] getStrings()
{
return new String[]{'ONE','TWO','THREE'};
}
public String ButtonNum {get;set;}
public void repeatFunction()
{
ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.Info,'num :'+ButtonNum ));
}
}
Hope it helps you
I have the following Visualforce page, and apex class as controller.
I would like to pass valus in the input text boxes contain th ids inputText1 and InputText2 to the same variable in the following apex class.
Everytime, the inputText1 and inputText2 in the apex class is null, and I don't know why!
Iv'e bin sitting on it all day long, and I couldn't figgure out why it happens!
Please help me with that, because I'm feeling hopeless with that.
<apex:page controller="LoginPages" rendered="true" showHeader="false" sidebar="false" standardStylesheets="true">
<apex:Pagemessages id="msg"/>
<apex:pageMessages ></apex:pageMessages>
<apex:pageBlock >
<apex:form >
<p><b>Login Page</b><br /></p>
<apex:panelGrid columns="2" style="margin-top:1em;">
<p><b>UserName</b><br />
<apex:inputtext required="true" id="inputText1" value="{!inputText1}"/>
</p>
<p><b>Password</b><br />
<apex:inputtext id="inputText2" value="{!inputText2}"/>
</p>
<apex:commandButton action="{!loginUser}" value="login" id="login" immediate="true"/>
</apex:panelGrid>
</apex:form>
</apex:pageBlock>
</apex:page>
public class LoginPages{
public String inputText1;
public String inputText2;
public String getInputText1(){
return inputText1;
}
public void setInputText1(String str1){
inputText1 = str1;
}
public String getInputText2(){
return inputText2;
}
public void setInputText2(String str2){
inputText1 = str2;
}
public PageReference registerUser() {
PageReference newPage = new PageReference('/apex/newPage');
newPage.setRedirect(true);
return newPage;
}
public void loginUser() {
ApexPages.Message mymsg = new ApexPages.Message(ApexPAges.Severity.INFO, 'sdsdf' + inputText1);
apexpages.addMessage(mymsg);
// PageReference newPage = new PageReference('/apex/login');
System.debug('sdfsdf' + inputText1);
List<User__c> users = [Select Name, Password__c from User__c Where Name = :inputText1];
if (users.size() > 0){
for (User__c user : users){
if (user.Password__c == inputText2){
//newPage.setAnchor('/apex/catalog');
//newPage.setRedirect(true);
}
}
}
//return newPage;
}
}
Remove immediate="true". "Immediate" results in no data being passed from the form to the server.
Also - you could write your variables bit simpler and then you won't need the explicit getXYZ/setXYZ methods:
public String inputText1 {get;set;}