You need to sign in to do that
Don't have an account?
Query on picklist give exception using Special character
We have a custom field "Priority" of type Picklist in contact object.
If we execute query using Ajax using sforce.connection.query in the VF page using special character then it gives an error in the case of picklist field
I give an example
Paste the following code in your org
For that first create a custom fild name Priority of type Picklist Type in your Contact object having value "one", "two" ,"Folder~`!@#$%^$-&*()_+{}|":<>?/.,;'\][fsdsvghchx"
now create a contact in which Priority field having value "Folder~`!@#$%^$-&*()_+{}|":<>?/.,;'\][fsdsvghchx"
Page
-------
<apex:page standardController="contact" extensions="testclass" id="pg">
<script src="/soap/ajax/16.0/connection.js" type="text/javascript"></script>
<script src="/soap/ajax/16.0/apex.js" type="text/javascript"></script>
<apex:form id="frm">
<p><b>text1</b></p><input type="text" id="box"/>
<input type="button" value="ClickMe" id="box12" onclick="callfun()" />
<apex:outputPanel id="inputhiddenfld2">
<p><b>text2</b></p>
<apex:inputText value="{!passdata}" id="hid2" />
</apex:outputPanel>
<script>
sforce.connection.sessionId = "{!$Api.Session_ID}";
var check = '';
function callfun()
{
try
{
check = document.getElementById('box').value;
callname(check);
}
catch(err)
{
alert(err);
}
}
function calloncom()
{
try{
var check1 = document.getElementById('pg:frm:hid2').value;
var query = "Select Id, LastName, FirstName From Contact where Contact.Priority__c like \'" +check1+"%\'"; //query2
var forerror = sforce.connection.query(query);
alert('forerror '+forerror);
}
catch(err)
{
alert('err '+err);
}
}
</script>
<apex:actionFunction name="callname" action="{!cont}" reRender="inputhiddenfld2,hid2" oncomplete="calloncom()">
<apex:param name="passvalue" value="" assignTo="{!passvaluecont}"/>
</apex:actionFunction>
</apex:form>
</apex:page>
class
-------
public with sharing class testclass
{
public string passvaluecont{get; set;}
public string passdata{get; set;}
public testclass(ApexPages.StandardController controller)
{
}
public void cont()
{
system.debug('-----------passvaluecont------------------'+passvaluecont);
passdata = String.escapeSingleQuotes(passvaluecont.trim());
}
}
Now Enter value "Folder~`!@#$%^$-&*()_+{}|":<>?/.,;'\][fsdsvghchx" in the text box named as "text1" and then click on button "ClickME"
it give an error, in normal case(without special character) it working fine
I just want to know how we handel the special character so that this query execute properly using Picklist having like operator
if any thing is not clear then please contact me on
Email- abhishek0674@gmail.com
I guess this is not the breaking case for all the picklist values with any special characters, the problem I guess is with the single quote character. Based on the no of quotes you have the query is closed and left with few more characters after being closed.
Thanks,
Aravind
Hi AravindBabu512 ,
Thanks for reply ,
I just want to tell you that single quote character is not creating problem in rhis scenario because I handeled the single quote character in the controller using salesforce standerd function "escapeSingleQuotes" ;
And if we replace this query
var query = "Select Id, LastName, FirstName From Contact where Contact.Priority__c like \'" +check1+"%\'";
with
var query = 'Select Id, LastName, FirstName From Contact where Contact.LastName like \'' +check1+'%\'';
then it is working fine, and no exception was jenrate
so this is not the solution of my problem
can u please check
Thanks and Regards
Abhishek Tiwari