Sobject in Visualforce?
-
27-10-2019 - |
Domanda
Ho un controller APEX che crea un elenco da visualizzare in un dati. L'elenco combina un oggetto diverso, quindi la variabile che crea è un elenco
Dire che tutti gli oggetti in questo elenco hanno un campo "esterno__c". Come faccio a dire alla VisualForce di rendere questo campo? L'uso di {! Obj.external__c} non funzionerà poiché è un singhiozzo.
Soluzione
Se hai un elenco di singoli progetti puoi ottenere un campo comune utilizzando obj.get('external__c')
Anche se generalmente devi lanciare il risultato su un tipo per poterlo usare.
È possibile creare una classe personalizzata nel codice che puoi riempire con vari oggetti:
// inside the controller do this:
public class COutputObject
{
private SObject sObj = null;
public string strField get {return (string)sObj.get('external__c'); }
public COutputObject(SObject s)
{
sObj = s;
}
}
// -- snip --
// then have a list of these which you'll loop over in the page
public list<COutputObject> liObjects = new list<COutputObject>();
// fill this with data
for(CustomObj__c sCustom : [select Id, external__c from CustomObj__c limit 200])
{
liObjects.add(new COutputObject(sCustom));
// etc.
for(CustomObj2__c sCustom : [select Id, external__c from CustomObj2__c limit 200])
{
liObjects.add(new COutputObject(sCustom));
// etc.
Non sicuro al 100% se la mia sintassi su Getter sia corretta, ma è vicino;) Speriamo che questo ti aiuti a raggiungere ciò che stai cercando!
Altri suggerimenti
Supponiamo che la proprietà dell'elenco sia dichiarata così nel tuo controller: Public List<Beer__c> ColdOnes { get; set; }
. Bene in Visualforce, fai riferimento alle birre con il nome della loro proprietà nel controller ... {!ColdOnes}
. Quello che segue è prelevato per lo più dalla Guida di Visualforce, ma l'ho adattato per soddisfare il nostro argomento che inganna :)
<apex:dataTable value="{!ColdOnes}" var="co" id="theTable" rowClasses="odd,even" styleClass="tableClass">
<apex:facet name="caption">table caption</apex:facet>
<apex:facet name="header">table header</apex:facet>
<apex:facet name="footer">table footer</apex:facet>
<apex:column>
<apex:facet name="header">Beer Name</apex:facet>
<apex:facet name="footer">column footer</apex:facet>
<apex:outputText value="{!co.name}"/>
</apex:column>
<apex:column>
<apex:facet name="header">Alcohol Volume</apex:facet>
<apex:facet name="footer">column footer</apex:facet>
<apex:outputText value="{!co.alcohol_volume__c}"/>
</apex:column>
</apex:dataTable>
Basta essere consapevole che se stai impostando Coldones con un valore interrogato nel codice, devi selezionare i campi che intendi output nella tua forza visiva. Così:
ColdOnes=[select name, alcohol_volume__c from Beer__c where blahblahblah];
Bene, sono fuori per una pinta. Spero possa aiutare!