Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Implementation

To create a new Apex class, access Setup in SalesForce, and type in "Apex" in the quick search box. 

...

Code Block
languagejava
titleSample Apex getCallerInformation
@RestResource(urlMapping='/jtelACD/getCallerInformation')
global with sharing class JTELAcdRESTService {
    @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');
        
        // 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;
    }
}

Testing

CURL Test

First To test the class, first of all, obtain an OAUTH token must be obtained. Token, see Testing with CURL.

The following CURL command can be used to test this API:

Code Block
titleCURL - getCallerInformation Test
curl.exe --silent -i -X GET --header "Authorization: Bearer <OAUTH_TOKEN>" --header "Connection: Close" "https://<SALES_FORCE_INSTANCE_URL>/services/apexrest/jtelACD/getCallerInformation?CallerID=4989461495000&ServiceNumber=4980012345678&ServiceName=test"

 This can be obtained using the following curl command (replace parameters as appropriate!):