Versions Compared

Key

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

Status
colourBlue
titleFROM RELEASE 3.34

Classic

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

Select "Build ... Develop ... Apex Classes".

Image Modified

Lightning

Access Setup, and search for "Apex" in the search box.

Image Modified

Classic and Lightning

...

We provide two examples here. 

The first example queries email Task objects from the Salesforce system:

Code Block
titleSample Apex genericQuery
@RestResource(urlMapping='/jtelACD/genericQuerygetEmailTasks')
global with sharing class JTELACD_GenericQueryGetEmailTasks {
    // Class to decode the parameters
    public class GenericQueryParams {
        public String Param1;
        public String Param2;
        public String Param3;
        public String Param4;
        public String Query;
    }
    
    @HttpPost
    global static String doPost() {
        RestRequest req = RestContext.request;
        RestResponse res = RestContext.response;
        
        // Deserialize the JSON (not used in this example - just for illustration purposes)
        GenericQueryParams genericQueryParams= (GenericQueryParams) System.JSON.deserialize( req.requestBody.toString(), GenericQueryParams.class );
 
        // Find next task to schedule in jtel system.
        // Note - the exact logic of this will be dependent on the Salesforce installation - this is JUST AN EXAMPLE.
        List<Task> tasks = [SELECT FIELDS(STANDARD),
                                   TYPEOF Who
                                         WHEN Lead THEN FirstName, LastName, Email
                                         WHEN Contact THEN FirstName, LastName, Email
                                   END
                          FROM Task
                          WHERE Status = 'Inbound Email'
                          WITH USER_MODE
                          LIMIT 1];
                          
        if( tasks.size() >= 0 ) {                    
            return JSON.serialize( tasks[0] );
        }
        res.statusCode = 404;
        return null;
    }
}

The second example sets Task objects to "In Progress" in Salesforce:

Code Block
titleSample Apex genericQuery
@RestResource(urlMapping='/jtelACD/setEmailTaskStatus')
global with sharing class JTELACD_SetEmailTaskStatus {
     // Class to decode the parameters
    public class GenericQueryParams {
        public String Param1;
        public String Param2;
        public String Param3;
        public String Param4;
        public String Query;
    }
    
 
    @HttpPost
    global static String doPost() {
        RestRequest req = RestContext.request;
        RestResponse res = RestContext.response;
 
         // Deserialize the JSON
        GenericQueryParams genericQueryParams = (GenericQueryParams) System.JSON.deserialize( req.requestBody.toString(), GenericQueryParams.class );
 
        Task task = [SELECT FIELDS(STANDARD) FROM Task WHERE id =:  genericQueryParams.Param1];
        task.Status = genericQuery.Param2;
        update task;
        return System.JSON.serialize(task);
    }
}

CURL Test

First of all, obtain an OAUTH Token, see Testing with CURL.

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

Code Block
titleCURL - genericQuery Test
curl --silent -i -X POST -d '{ "Param1" : "Example Param 1", "Param2" : "Example Param 2", "Param3" : "Example Param 3", "Param4" : "Example Param 4", "Query" : "Example Query" }' --header "Content-Type: application/json" --header "Authorization: Bearer <OAUTH_TOKEN>" --header "Connection: Close" "https://<SALES_FORCE_INSTANCE_URL>/services/apexrest/jtelACD/genericQuery"

...