Displaying Records based on keyword from vf page - salesforce

I have a senario where i will be dispalying input text fieldon vf page ,when i enter some value and click on search button the realted accounts should be displayed depending on that keyword.
I have tried the following code ,but i am unable to resolve the error Unknown property 'VisualforceArrayList.Name'
The below is my code:
class:
public class AccountswithKeywordfrompage {
public string keyword{get;set;}
public List<List<Account>> accountlist{get;set;}
public void Accounts(){
keyword = System.currentPageReference().getParameters().get('search');
accountlist=[FIND '+keyword' IN ALL FIELDS
RETURNING Account(Name)];
}
}
vf page:
<apex:page controller="AccountswithKeywordfrompage" standardStylesheets="false">
<apex:form>
<apex:inputText label="SearchAccounts" id="search">
<apex:commandButton value="search" action="{!Accounts}"/>
</apex:inputText>
<apex:pageblock>
<apex:pageblockTable value="{!accountlist}" var="accountobj">
<apex:outputlink value="{!accountobj.Name}"/>
</apex:pageblockTable>
</apex:pageblock>
</apex:form>
</apex:page>
Can anyone help me to solve the issue ?

accountlist is a List<List<Account>>, which is the wrong type; a SOSL search returns a List<List<sObject>>. It just so happens that your SOSL search only returns Account results.
When you iterate over a List<List<sObject>>:
<apex:pageblockTable value="{!accountlist}" var="accountobj">
the type of the iteration variable is List<Account>, which has no Name property.
The cleanest solution is to declare your variable as a List<Account> and extract the first element of the returned List<List<sObject>> from SOSL.

Related

Unknown Property Error using Custom Controller in Visualforce

I have an error with a new Visualforce page I'm creating that takes list from a custom controller I made. It is for a standard objects and the class file compiled just fine. But when I start building the Visualforce page it gives me an error that I can't figure out.
This is the Visual Force Page
<apex:page controller="SearchAccountListController">
<apex:repeat value="{! acctList}" var="acct">
<apex:outputLink value="/{!acct.Name}">
<apex:outputText value="{!acct.Phone}"/><br/>
</apex:outputLink>
</apex:repeat>
</apex:page>
And the Controller:
public class SearchAccountListController {
public List<Account> getNewAccounts() {
List<Account> acctList = [SELECT Name,Phone FROM Account];
return acctList;
}
}
The class compiles fine, I'm using the Developer Console, so that seems to be okay. But then when I go to save my Visualforce page it gives the following error:
Save error: Unknown property 'Unknown property 'SearchAccountListController.acctList'
You don't have a class-level property acctList, you only have a local variable with that name. That name is lost when you leave the function.
From visualforce's point of view you have a getter function and what it returns can be accessed with {!newAccounts}.

How do I dynamically generate sections in visualforce page?

The objective is to have numberOfSections variable in the controller and then dynamically generate these sections on the vf page with the same format. How can this be achieved?
You can use apex:dynamicComponent to accomplish this:
Creating and Displaying Dynamic Components
What have you tried so far, what doesn't work? Your question is very poor and unlikely to attract more answers.
Easiest is to have a list of items (not just a counter, a list) and iterate it with <apex:repeat>.
public class Stack61357421 {
public List<String> sectionTitles {get; private set;}
public Stack61357421(){
sectionTitles = new List<String>{'lorem', 'ipsum', 'dolor', 'sit', 'amet'};
}
}
<apex:page controller="Stack61357421" tabStyle="Account">
<apex:pageBlock title="Hi stack">
<apex:repeat value="{!sectionTitles}" var="title">
<apex:pageBlockSection title="{!title}">
content goes here
</apex:pageBlockSection>
</apex:repeat>
</apex:pageBlock>
</apex:page>

Not able to show related records

I have two custom objects, X and Y.
The object Y is related to X by lookup YretatedX__c.
I am trying to show all Y related to X y standart page of X whith a visualforce.
Visualforce:
<apex:page standardController="X__c" extensions="related_list">
<apex:detail relatedList="true">
<apex:relatedList list="Y__c" subject="{!AllRelated}"/>
</apex:detail>
</apex:page>
Apex Class:
public class related_list {
private X__c x;
private Id idX;
public List<Y__c> AllRelated = new Y__c[]{};
public related_list(ApexPages.StandardController controller) {
this.x=(X__c)controller.getRecord();
idX = this.x.Id;
}
public List<Y__c> getAllRelated() {
AllRelated = [SELECT id FROM Y__c WHERE YretatedX__c =: this.idX];
return AllRelated;
}
}
In X page, the visualforce only shows:
Invalid parameter value "[a120E0000001234567, a120E0000007654321]" for parameter "id"
This Ids are valid for Y objects retated to this X object
I tried a lot, but I can find a solution.
I think you're not understanding the attributes of the apex:relatedList component in Visualforce.
Refer to this:
https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_compref_relatedList.htm
Note that you don't actually need to query for the records to display them with the component.
All you need is this:
<apex:relatedList list="Contacts"/>
You need to specify the Relationship Name for the list attribute
You don't need to specify the subject (the subject is the record who is the Parent of the list you are trying to show) as this would automatically be populated by the Standard Controller
Hope that helps.
I found a solution using <apex:pageBlockTable instead of <apex:relatedList
<apex:page standardController="X__c" extensions="related_list">
<apex:pageblock id="CustomList" title="Y" >
<apex:pageBlockTable value="{!AllRelated}" var="y" rendered="true">
<apex:column value="{!y.id}"/>
</apex:pageBlockTable>
</apex:pageblock>
</apex:page>

To display sum of two fields entered on visualforce page and display the same on visualforce page

I want to calculate the sum of two fields which user has entered on visualforce page and calculate total in a total field and update the total field on visualforce page once fields are updated.
Logic for performing the calculation depends on whether you want to do it at controller level or at client side.
For controller:
On a click of command button, call action method in salesforce.
<apex:page controller="MathematicalOperations">
<apex:form id="frm">
<apex:inputText value="{!inputValue1}" id="theTextInput1"/>
<apex:inputText value="{!inputValue2}" id="theTextInput2"/>
<apex:outputText value="{!calculateSum}" id="sum"/>
<apex:commandbutton action="{!calcuateSum}" value="Calculate Sum" rerender="frm"/>
</apex:form>
</apex:page
>
public class MathematicalOperations()
{
public decimal inputValue1{get;set;}
public decimal inputValue2 {get;set;}
public decimal sum {get;set;}
public void calculateSum()
{
sum = inputValue1 + inputValue2;
}
}
If my solution has solved your issue please mark it as solved.
Thanks,
Mayank

Need a table for a custom object for community user VF page

I am new to salesforce developement. I am unable to create a table of a custom object records in a community-user accessed visual force page. I can access individual record by using wrapper class. However I cannot display a table and if I use list of wrapper objects in the apex:repeat value, I get this error (as they are not SObjects):
" can only be used with SObjects, or objects that are Visualforce field component resolvable."
I also need to support inline-editing once this is resolved. Are custom object access limited for customer-community users? Issue is there only if O access thru community portal. Any way of achieving inline-editing table of custom objects?
VF page
<apex:page controller="FHController" >
<apex:form >
<apex:repeat value="{!fhList}" var="rec">
Series: <apex:outputField value="{!rec.Series__c}" />
</apex:repeat>
</apex:form>
</apex:page>
Controller
public class FHController {
public List<Funding_History__c> fhList {get; set;}
public FHController() {
String id = ApexPages.currentPage().getParameters().get('id');
fhList = [SELECT id, Series__c, Date__c, Amount__c, Valuation__c, Investors__c FROM Funding_History__c WHERE Account__c = :id];
}
public PageReference save() {
System.debug('COUNT: ' + fhList.size());
update fhList;
return null;
}
}
Thanks!
You don't need any wrapper-classes for displaying SObject on VF-page. You need just select set of Funding_History__c objects and don't wrap it. Then you be able to get these objects on VF-page in {!fhList} variable.
For inline editing you can use apex:inlineEditSupport. Here is quote from SF documentation:
This component provides inline editing support to
and various container components. In order to support inline editing,
this component must also be within an tag.
The component can only be a descendant of the following tags: "apex:dataList", "apex:dataTable", "apex:form", "apex:outputField", "apex:pageBlock", "apex:pageBlockSection", "apex:pageBlockTable", "apex:repeat".
See also: the inlineEdit attribute of "apex:detail"
And here is short example how it looks for Contact object (your case is pretty similar, you just need to change page controller and SObject which you process):
<apex:page standardController="Contact">
<apex:form >
<apex:pageBlock mode="inlineEdit">
<apex:pageBlockButtons >
<apex:commandButton action="{!edit}" id="editButton" value="Edit"/>
<apex:commandButton action="{!save}" id="saveButton" value="Save"/>
<apex:commandButton onclick="resetInlineEdit()" id="cancelButton" value="Cancel"/>
</apex:pageBlockButtons>
<apex:pageBlockSection >
<apex:outputField value="{!contact.lastname}">
<apex:inlineEditSupport showOnEdit="saveButton, cancelButton"
hideOnEdit="editButton" event="ondblclick"
changedStyleClass="myBoldClass" resetFunction="resetInlineEdit"/>
</apex:outputField>
<apex:outputField value="{!contact.accountId}"/>
<apex:outputField value="{!contact.phone}"/>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
So, you can to investigate further in this way.
Why not use <apex:pageBlockTable> ? This will resolve your first issue as well ( not able to display a table ).

Resources