Vous êtes sur la page 1sur 3

public class DynamicSOQlExample {

public List<String> fieldNames {set;get;}


public List<SelectOption> left {set;get;}
public List<selectOption> right {set;get;}
public Set<String> notselected {set;get;}
public Set<string> selected
{set;get;}
public List<String> addOptions {set;get;}
public List<String> removeOptions {set;get;}
public List<Account> accs {set;get;}
public List<String> fields {set;get;}
public String query {set;get;}
Public List<OperatorWrap> optList{set;get;}
public DynamicSOQLExample(){
fieldNames=new List<String>{'Name','Industry','Phone','Type'};
left=new List<SelectOption>();
right=new List<SelectOption>();
notselected=new Set<String>();
selected=new Set<string>();
notselected.addAll(fieldNames);
addOptions=new List<String>();
removeOptions=new List<String>();
optList=new List<OperatorWrap>();
OperatorWrap op=new OperatorWrap(fieldNames);
optList.add(op);
getOptions();
}
public void getOptions(){
left.clear();
right.clear();
SelectOption n=new selectOption('none','-None-');
if(notselected.size() >0){
for(String s1:notSelected){
SelectOption op1=new SelectOption(s1,s1);
left.add(op1);
}
}else{
left.add(n);
}
if(selected.size()>0){
for(String s2:selected){
SelectOption op2=new SelectOption(s2,s2);
right.add(op2);
}
}else{
right.add(n);
}
}
public void addElements(){
notSelected.removeAll(addOptions);
selected.addAll(addOptions);
getOptions();
}
public void removeElements(){
notSelected.addAll(removeOptions);
selected.removeAll(removeOptions);
getOptions();
}
public void getData(){
query='select id';
for(String s:selected){

query=query+','+s;
}
query=query+' from Account';
/* if(fieldSelected!='none'){
query=query+' where '+fieldSelected+''+operatorSelected+'\''+value+'
\'';
}*/
accs=Database.query(query);
fields=new List<String>(selected);
}
public void addRow(){
OperatorWrap op=new OperatorWrap(fieldNames);
optList.add(op);
}
}
public class OperatorWrap {
public List<SelectOption> fieldOptions {set;get;}
public List<SelectOption> operators {set;get;}
public String fieldselected {Set;get;}
public String operatorSelected {set;get;}
public String value {set;get;}
public OperatorWrap(List<String> fieldNames){
List<string> operatorList=new List<String>{'=','!=','<','>'};
fieldOptions=new List<SelectOption>();
Operators=new List<SelectOption>();
SelectOption n=new selectOption('none','-None-');
fieldOptions.add(n);
operators.add(n);
for(String s1:fieldNames){
SelectOption op1=new SelectOption(s1,s1);
fieldOptions.add(op1);
}
operators.add(n);
for(String s2:operatorList){
selectOption op2=new SelectOption(s2,s2);
operators.add(op2);
}
}
}

<apex:page controller="DynamicSoqlExample" >


<style>
.block{
width:100px;
height:100px;
}
</style>
<apex:form>
<apex:pageBlock title="Account SOQL">
<apex:pageBlockButtons location="top">
<apex:commandButton value="Search" action="{!getData}" />
</apex:pageBlockButtons>
<apex:pageBlockSection>
<apex:panelGrid columns="3">

<apex:selectList multiselect="true" styleClass="block" value="{


!addOptions}">
<apex:selectOptions value="{!left}" />
</apex:selectList>
<apex:panelGrid columns="1">
<apex:commandButton value="Add" action="{!addElements}" />
<br/><br/>
<apex:commandButton value="Del" action="{!removeElements}"/>
</apex:panelGrid>
<apex:selectList multiselect="true" styleClass="block" value="{!re
moveOptions}" >
<apex:selectOptions value="{!right}" />
</apex:selectList>
</apex:panelGrid>
<apex:pageBlockTable value="{!optList}" var="b">
<apex:column>
<apex:selectList size="1" value="{!b.fieldselected}">
<apex:selectOptions value="{!b.fieldOptions}" />
</apex:selectList>
</apex:column>
<apex:column>
<apex:selectList size="1" value="{!b.operatorSelected}">
<apex:selectOptions value="{!b.operators}" />
</apex:selectList>
</apex:column>
<apex:column >
<apex:inputText value="{!b.value}" />
</apex:column>
<apex:column >
<apex:commandButton value="add" action="{!addRow}" />
</apex:column>
</apex:pageBlockTable>
</apex:pageBlockSection>
</apex:pageBlock>
<apex:pageBlock title="SOQL QUERY RESULT" rendered="{! !ISNULL(accs)}">
<apex:pageBlockTable value="{!accs}" var="a">
<apex:repeat value="{!fields}" var="fieldName">
<apex:column value="{!a[fieldName]}" />
</apex:repeat>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>

Vous aimerez peut-être aussi