Not able to show related records - salesforce

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>

Related

Displaying Records based on keyword from vf page

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.

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>

implementing save and new button not working

I am following this link to Create Save and New Functionality on page
How to implement "Save & New" functionality in a VisualForce Page
According to that i have did following
1.Create a apex class Opportunity and implement extension method
public with sharing class Opportunity
{
ApexPages.standardController m_sc = null;
public Opportunity(ApexPages.standardController sc)
{
m_sc = sc;
}
public Pagereference doSaveAndNew()
{
SObject so = m_sc.getRecord();
upsert so;
string s = '/' + ('' + so.get('Id')).subString(0, 3) + '/e?';
ApexPages.addMessage(new ApexPages.message(ApexPages.Severity.Info, s));
return new Pagereference(s);
}
}
this compiles fine
2.create a new page , extend the controller ,create button and call method
<apex:page sidebar="false" standardController="Opportunity" extensions="Opportunity" >
<apex:form >
<apex:pageMessages />
{!Opportunity.Name}
<apex:commandButton action="{!doSaveAndNew}" value="Save & New"/>
</apex:form>
</apex:page>
this gives me error "Unknown method 'OpportunityStandardController.doSaveAndNew()'"
I dont know what step I am missing in this process
Any suggestions
The APEX Class extension should not be the same with object name
APEX Class Name
OpportunityController
APEX Page
OpportunityPage
The code should be
<apex:page sidebar="false" standardController="Opportunity" extensions="OpportunityController" >
I think maybe the class name equal the object standard name will error
As Joseph pointed out, the page is trying to access the method in the standard controller 'OpportunityStandardController.doSaveAndNew()' and cannot find it since both the extension and the standard controller are called the same thing and it's just looking in the wrong class.
You probably just need to rename your controller extension to something else. I typically throw "Extension" on the end of the class name so I know what it is for. As an example, maybe something like "OpportunitySaveExtension". Then update your visualforce page to reference the renamed class in the "Extensions" attribute.
extensions="OpportunitySaveExtension"

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