@RestResource(urlMapping='/jtelACD/getCallerInformation')
global with sharing class JTELACD_GetCallerInformation {
@HttpGet
global static String doGet() {
RestRequest req = RestContext.request;
RestResponse res = RestContext.response;
// This is how to access URLParams if required
// List<String> URLParams = req.requestURI.split('/');
// Example: ["","jtelACD","getCallerInformation"]
// Extract the request parameters
String CallerID = req.params.get('CallerID');
String ServiceNumber = req.params.get('ServiceNumber');
String ServiceName = req.params.get('ServiceName');
// From release 3.25 - 2021-07-02 and upwards
String Function = req.params.get('Function');
String UserData = req.params.get('UserData');
String UserData2 = req.params.get('UserData2');
String UserData3 = req.params.get('UserData3');
// Specifying a Function is intended to allow the developer to perform different types of query.
// As an example, we just return the data back if a function is specified.
// In a real world case, a query for example to search for and return a ticket, contract or some other record would be performed.
if( Function != null && Function != '' ) {
JSONGenerator gen = JSON.createGenerator( true );
gen.writeStartObject();
gen.writeStringField( 'CallerID', CallerID );
gen.writeStringField( 'ServiceNumber', ServiceNumber );
gen.writeStringField( 'ServiceName', ServiceName );
gen.writeStringField( 'Function', Function );
gen.writeStringField( 'UserData', UserData );
gen.writeStringField( 'UserData2', UserData2 );
gen.writeStringField( 'UserData3', UserData3 );
gen.writeEndObject();
return gen.getAsString();
}
// Perform SOSL Query over contacts and leads, searching for the phone number with *wildcards*
String soslSearchString = '*' + CallerID + '*';
List<List<SObject>> searchList = [FIND :soslSearchString IN ALL FIELDS
RETURNING
Contact,
Lead];
List<Contact> contacts = ( (List<Contact>) searchList[0] );
List<Lead> leads = ( (List<Lead>) searchList[1] );
// Multple hits?
if( contacts.size() + leads.size() > 1 )
{
// Multiple hits
res.statusCode = 300;
return null;
}
if( contacts.size() > 0 )
{
// Query for exact contact
String Id = (String) contacts.get(0).get('Id');
Set<String> fieldSet = schema.describeSObjects(new String[] { 'Contact' } )[0].fields.getMap().keyset();
List<String> fieldList = new List<String>( fieldSet );
String query = 'SELECT ' + String.join( fieldList, ',' ) + ' FROM Contact WHERE Id = \'' + Id + '\'';
Contact contact = Database.query( query );
// 200 OK will be returned by default
return JSON.serialize( contact );
}
if( leads.size() > 0 )
{
// Query for exact lead
String Id = (String) leads.get(0).get('Id');
Set<String> fieldSet = schema.describeSObjects(new String[] { 'Lead' } )[0].fields.getMap().keyset();
List<String> fieldList = new List<String>( fieldSet );
String query = 'SELECT ' + String.join( fieldList, ',' ) + ' FROM Lead WHERE Id = \'' + Id + '\'';
Lead lead = Database.query( query );
// 200 OK will be returned by default
return JSON.serialize( lead );
}
// Nothing found
res.statusCode = 404;
return null;
}
} |