Apex Code Analysis With Tooling API
Apex Code Analysis With Tooling API
Native apps
San Francisco HQ, 595 Market St
R&D in San Francisco, Harrogate UK, and Granada ES
We are hiring! Meet us at Rehab!
Introduction
NOTE: Code shown is from my “Building Strong Foundation: Apex Enterprise Patterns” session
Apex UML Canvas Application: Architecture
Hosted on Heroku
Jetty Web Server
• Java Spring MVC Framework
• SOAP Tooling API (via JAX-WS)
– via wsimport Maven plugin
Web Page
• jQuery
• UMLCanvas JS Library
Maven Build System
Configuring a Canvas Application in Salesforce
Makes HTTP POST to URL https://localhost:8443/app/canvas
• Note: /app/ is managed by Spring MVC and forwards to Java Controllers…
Setup > Create > Applications
Integrating the Canvas SDK with Spring MVC
CanvasController.java
Handles the HTTP POST made by Salesforce to /canvas
Uses Salesforce Canvas SDK to decode and store in HTTP session
@Controller
@RequestMapping("/canvas")
public class CanvasController {
@RequestMapping(method = RequestMethod.POST)
public String canvasRequest(@RequestParam("signed_request") String signedRequest, HttpSession session)
{
String secret = System.getenv("CANVAS_CONSUMER_SECRET");
CanvasRequest request = SignedRequest.verifyAndDecode(signedRequest, secret);
session.setAttribute("canvasRequest", request);
return "redirect:umlcanvas";
}
}
Apex UML Canvas : Code Walkthrough
UmlCanvasController.java
Redirection from /canvas to /umlcanvas
Page load, rendered by umlcanvas.jsp
@Controller
@RequestMapping("/umlcanvas")
public class UmlCanvasController {
@RequestMapping(method = RequestMethod.GET)
public String load(HttpSession session, Map<String, Object> map) throws Exception
{
// List classes on the page
ToolingAPIConnection toolingAPI = createToolingAPIConnection(session);
ApexClass[] apexClasses =
toolingAPI.service.query(
"SELECT Id, Name, SymbolTable " +
"FROM ApexClass"
, toolingAPI.session).getRecords().toArray(new ApexClass[0]);
for(ApexClass apexClass : apexClasses)
Apex UML Canvas : Code Walkthrough
umlcanvas.jsp
Java Servlet Page (JSP)
AJAX calls to
UmlCanvasController.java
JavaScript calls UmlCanvas
JavaScript library to
render UML
Apex UML Canvas : Code Walkthrough
UmlCanvasController.java
jQuery Ajax calls controller as user selects classes
1. /umlcanvas/{apexclass}/symboltable
Apex UML Canvas : Code Walkthrough
UmlCanvasController.java
1. /umlcanvas/{apexclass}/symboltable
2. /umlcanvas/{apexclass}/compile
3. /umlcanvas/containerasyncrequest/{id}
4. /umlcanvas/containerasyncrequest/{id}/{classname}/symboltable
Apex UML Canvas : Code Walkthrough
UmlCanvasController.java : /{apexclass}/symboltable
Apex UML Canvas : Code Walkthrough
UmlCanvasController.java : /{apexclass}/compile
Apex UML Canvas : Code Walkthrough
UmlCanvasController.java : /{apexclass}/compile
Apex UML Canvas : Code Walkthrough
UmlCanvasController.java : /{apexclass}/compile
Apex UML Canvas : Code Walkthrough
UmlCanvasController.java : /{apexclass}/compile
Apex UML Canvas : Code Walkthrough
UmlCanvasController.java :
/containerasyncrequest/{id}
Apex UML Canvas : Code Walkthrough
UmlCanvasController.java :
/navigator/containerasyncrequest/{id}/{classname}/symboltable
Tooling API Other Features
Debug Logs
Execute Anonymous Apex Code
Static Resources
Inject Execution of Apex or SOQL Code for Debug
Checkpoints to capture Heap Dumps
Manage Custom Fields
Accces Code Coverage Results
Other Uses of Tooling API
Ant Integration : Execute Apex Code from Ant!