L'Apex de la sous-requête SOQL dans Visualforce
Je suis à la recherche d'une sous-requête SOQL requête dans une page Visualforce. C'est mon SOQL Expression.
public ApexPages.StandardSetController setCon {
get {
if(setCon == null) {
setCon = new ApexPages.StandardSetController(Database.getQueryLocator(
[SELECT Contact.Id, Opportunity.Id, Contact.FirstName, Contact.LastName, Contact.Phone,Contact.Account.Name, Contact.Email,Contact.Last_Contacted__c,Contact.Membership_Type__c,Opportunity.Call_Disposition__c, Opportunity.Sales_Stage__c,Opportunity.Name, Opportunity.CloseDate, Opportunity.StageName, Opportunity.CreatedDate FROM OpportunityContactRole where Opportunity.OwnerId=:Userinfo.getUserId()]));
}
return setCon;
}
set;
}
Il reçu un message 'OpportunityContactRole n'est pas pris en charge dans StandardSetController'. J'ai donc essayé d'obtenir de l'Occasion et des informations de Contact à partir d'un Compte...
Donc ma requête SOQL changé:
SELECT Name, (SELECT Name, Phone, Email, Last_Contacted__c, Contact.Membership_Type__c FROM Account.Contacts) , (SELECT Call_Disposition__c, StageName, CreatedDate, CloseDate FROM Account.Opportunities) FROM Account where Id=:UserInfo.getUserId()])
mais maintenant dans ma page Visualforce je ne suis pas en mesure d'accéder à la sous-requête des champs:
<apex:page controller="SalesRepPageControllerV3" tabstyle="contact" sidebar="false" showChat="true" >
<apex:form id="theForm">
<apex:sectionHeader title="Sales Rep Page for {!$User.FirstName}"/>
<apex:pageBlock id="innerblock" mode="edit">
<apex:pageMessages />
<apex:pageBlock id="innerblock">
<apex:pageBlockSection id="pagesection">
<apex:pageBlockTable value="{!ContactOpportunity}" var="co" id="pageblocktable">
<apex:column headerValue="Created Date" value="{!co.Opportunity.CreatedDate}"/>
<apex:column headerValue="First Name" value="{!co.Contact.FirstName}"/>
<apex:column headerValue="First Name" value="{!co.Contact.LastName}"/>
<apex:column headerValue="Phone" value="{!co.Contact.Phone}"/>
<apex:column headerValue="Account Name" value="{!co.Contact.Account.Name}"/>
<apex:column headerValue="Email" value="{!co.Contact.Email}"/>
<apex:column headerValue="Last Contacted" value="{!co.Contact.Last_Contacted__c}">
</apex:column>
<apex:column headerValue="Membership Type" value="{!co.Contact.Membership_Type__c}"/>
<apex:column headerValue="Call Disposition">
<apex:inputField value="{!co.Opportunity.Call_Disposition__c}"/>
</apex:column>
<apex:column headerValue="Sales Stage">
<apex:inputField value="{!co.Opportunity.Sales_Stage__c}"/>
</apex:column>
</apex:pageBlockTable>
</apex:pageBlockSection>
</apex:pageBlock>
<apex:pageBlockButtons >
<apex:commandButton value="Save" action="{!save}" reRender="pageblocktable"/>
<apex:commandButton value="Cancel" action="{!cancel}" reRender="pageblocktable"/>
</apex:pageBlockButtons>
</apex:pageBlock>
<apex:panelGrid columns="2">
<apex:commandLink action="{!previous}">Previous</apex:commandlink>
<apex:commandLink action="{!next}">Next</apex:commandlink>
</apex:panelGrid>
</apex:form>
</apex:page>
Il ne comprend pas les co.Occasion et co.Contact tel qu'il n'est pas un Compte. Et si je change de co.Des opportunités ou des co.Contacts il est une Arraylist qui ne peut être accessible que par la répétition.
Le problème avec l'apex:répétition est qu'il ne dispose pas d'en-tête de colonne les valeurs dont j'ai besoin pour effectuer le tri. S'il vous plaît si quelqu'un peut aider s'il vous plaît laissez-moi savoir comment.
OriginalL'auteur Thys Andries Michels | 2012-08-16
Vous devez vous connecter pour publier un commentaire.
Expurgé...
Je ne pense pas que vous pouvez utiliser un ensemble standard contrôleur pour cette. À l'aide d'un contrôleur personnalisé, j'ai été en mesure d'obtenir une liste consolidée de l'occasion de contacts de l'utilisateur actuel:
Page:
Contrôleur:
Vous aurez besoin de remplacer dans vos champs personnalisés. Si vous avez besoin de tri, ce blog donne une approche, mais vous pouvez probablement d'éviter la répétition des voyages à la base de données à l'aide d'une classe wrapper et l'Apex Comparable interface. Enfin, vous aurez besoin de mettre en place votre propre enregistrer logique. Bonne chance!
Vous êtes les bienvenus... Si cela fonctionne pour vous, veuillez upvote et le marquer comme réponse.
Il fonctionne, mais je suis à la recherche pour mettre à la fois le contact et la possibilité dans un pageBlockTable à laquelle je peux ensuite trier par. Est-ce possible?Est-il une autre alternative todo?
Je vois vos besoins réels maintenant dans votre question - j'étais concentré sur la création de Gerard code du travail. Laisser avec moi - je vais avoir un penser sur la façon de le faire et peut-être poster quelque chose la semaine prochaine.
Hey merci les gars, je n'ai pu tester la requête sur l'établi, mais la force visuelle de code. C'était une hypothèse que les blocs imbriqués serait de travailler. La moitié de la force visuelle de la programmation est de deviner, n'est-ce pas!
OriginalL'auteur metadaddy
Ce que vous avez est une table interne pour chaque requête imbriquée. Le pageblocktable ne peut itérer sur une seule table.
Suivre l'exemple de code ci-dessous. Sélectionnez vos comptes dans la liste des comptes et ensuite itérer sur la liste avec un pageblocktable et imbriquées pageblocktables.
Contrôleur
Visualforce
Salut Gerard pour une raison quelconque, il est juste le Nom de mon Compte champs et non des autres. Avez-vous peut-être savez-vous pourquoi?
OriginalL'auteur Gerard Sexton