SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
Apex Code Analysis using the
Tooling API and Canvas
Andrew Fawcett, FinancialForce.com, CTO
@andyinthecloud
All about FinancialForce.com
Revolutionizing the Back Office
#1 Accounting, Billing and PSA Apps on the Salesforce platform

▪ 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
Why do I need to know more about my Apex code?
▪ Its hard to see code complexity from within the trenches
• Helps those unfamiliar learn complex code bases

▪ Tightly coupled code is harder to maintain and evolve

Goals of this Session
• What are the technologies that can help?
• Understand how to analyze your code with the Tooling API?
• Provide a take away demo of the Tooling API you can extend
Canvas: UI Integration with Salesforce
Provides a means of extending the Salesforce User Interface
▪ Chatter Tab
▪ Visualforce Tabs
▪ Publisher Actions
▪ Other areas see Canvas Developer Guide

Open to any new or existing external web page
▪ Pages can be developed and hosted within any web platform
▪ Developer SDK’s for Java and JavaScript are provided
▪ Pages must follow a specific authentication flow
Where do Canvas apps appear in Salesforce?
Chatter
Tab
Where do Canvas apps appear in Salesforce?
Visualforce Page
Where do Canvas apps appear in Salesforce?
Publisher Action
Canvas Architecture
Access Method: Signed Request (Recommended)

Canvas aware Web Site
(hold consumer secret)
https://mysite.com/mypage

Salesforce User Interface
(holds consumer secret)
Initial HTTP POST passing signed_request

Canvas Frame

User Web Page Interactions

1.

Receives HTTP POST, decodes
and validates request
2. Stores CanvasRequest and
presents page to user
3. Optionally calls back to Salesforce
via API’s using oAuth token

Salesforce API Interactions (using oAuth Token from CanvasRequest)
How do I make my web page Canvas aware?
Two Salesforce SDK’s
▪ Salesforce Canvas JavaScript SDK
▪ Salesforce Canvas Java SDK
• Includes JavaScript SDK

Handle Decoding and Parsing of the “CanvasRequest”
▪ Sent to the page when the user clicks in the Salesforce UI
▪ HTTP POST to the page via ‘signed_request’ parameter
• Contains amongst other information, oAuth token for Salesforce API access!
What is the Tooling API?
What: Manage Apex Code and Pages on the Platform
▪ More granular API than Metadata API built for …
• Building alternative IDE’s (Integrated Developer Environment)
– MavensMate
– Force.com IDE

• Build development tools
– Tools that perform further analysis on code via Symbol Table
What is the Tooling API?
▪ Use REST API bindings if you’re using a language that isn’t strongly typed, like
JavaScript.
▪ Use SOAP API bindings if you’re using a strongly typed language like Java that generates
Web service client code.
Tooling API Architecture and Objects
New Objects in the Salesforce Database
▪ Creating, querying, updating and deleting records
• NOTE: Only via Tooling API CRUD operations

▪ MetadataContainer Object
• Think, “Workspace” in your IDE for files being worked on
Tooling API Architecture and Objects
New Objects in the Salesforce Database
▪ Key Objects are ….
Use without MetadataContainer

Use with MetadataContainer

•
•
•
•

•
•
•
•

ApexClass
ApexPage
ApexComponent
ApexTrigger

ApexClassMember
ApexPageMember
ApexComponentMember
ApexTriggerMember
What is a Symbol Table?
Child of ApexClass, ApexClassMember and ApexTriggerMember
▪ Variables
▪ Methods
▪ Inner Classes
▪ External References
• Lists references to the above from other Apex Classes and Apex Triggers
• NOTE: Only available after a compile!
Birds Eye View : Symbol Table Object

Only available after an Apex
compilation!
Apex UML Canvas Application: Demo

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!

Salesforce SE Execute an Apex class using Ant build script
Summary
Read Documentation closely!
▪ Force.com Tooling API Developer’s Guide
▪ Force.com Canvas Developer’s Guide

Symbol Table
▪ Has some gaps, still maturing

Spring MVC rocks!
▪ Great for those not familiar with Java Servlet API
▪ Shades of JavaScript Remoting
Andrew Fawcett
CTO,
@andyinthecloud
Apex Code Analysis Using the Tooling API and Canvas

Weitere ähnliche Inhalte

Was ist angesagt?

컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항Opennaru, inc.
 
Salesforce Development Best Practices
Salesforce Development Best PracticesSalesforce Development Best Practices
Salesforce Development Best PracticesVivek Chawla
 
Salesforce integration best practices columbus meetup
Salesforce integration best practices   columbus meetupSalesforce integration best practices   columbus meetup
Salesforce integration best practices columbus meetupMuleSoft Meetup
 
Visualforce & Force.com Canvas: Unlock your Web App inside of Salesforce.com ...
Visualforce & Force.com Canvas: Unlock your Web App inside of Salesforce.com ...Visualforce & Force.com Canvas: Unlock your Web App inside of Salesforce.com ...
Visualforce & Force.com Canvas: Unlock your Web App inside of Salesforce.com ...Salesforce Developers
 
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
Highlights of WSO2 API Manager 4.0.0
Highlights of WSO2 API Manager 4.0.0Highlights of WSO2 API Manager 4.0.0
Highlights of WSO2 API Manager 4.0.0WSO2
 
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기NHN FORWARD
 
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET MicroservicesVMware Tanzu
 
From Sandbox To Production: An Introduction to Salesforce Release Management
From Sandbox To Production: An Introduction to Salesforce Release ManagementFrom Sandbox To Production: An Introduction to Salesforce Release Management
From Sandbox To Production: An Introduction to Salesforce Release ManagementSalesforce Developers
 
How to work with your salesforce contacts
How to work with your salesforce contactsHow to work with your salesforce contacts
How to work with your salesforce contactsSalesforce Partners
 
Performance Monitoring and Testing in the Salesforce Cloud
Performance Monitoring and Testing in the Salesforce CloudPerformance Monitoring and Testing in the Salesforce Cloud
Performance Monitoring and Testing in the Salesforce CloudSalesforce Developers
 
Next-Generation Cloud Native Apps with Spring Cloud and Kubernetes
Next-Generation Cloud Native Apps with Spring Cloud and KubernetesNext-Generation Cloud Native Apps with Spring Cloud and Kubernetes
Next-Generation Cloud Native Apps with Spring Cloud and KubernetesVMware Tanzu
 
[AWS Dev Day] 앱 현대화 | DevOps 개발자가 되기 위한 쿠버네티스 핵심 활용 예제 알아보기 - 정영준 AWS 솔루션즈 아키...
[AWS Dev Day] 앱 현대화 | DevOps 개발자가 되기 위한 쿠버네티스 핵심 활용 예제 알아보기 - 정영준 AWS 솔루션즈 아키...[AWS Dev Day] 앱 현대화 | DevOps 개발자가 되기 위한 쿠버네티스 핵심 활용 예제 알아보기 - 정영준 AWS 솔루션즈 아키...
[AWS Dev Day] 앱 현대화 | DevOps 개발자가 되기 위한 쿠버네티스 핵심 활용 예제 알아보기 - 정영준 AWS 솔루션즈 아키...Amazon Web Services Korea
 
Introduction to Force.com Canvas Apps
Introduction to Force.com Canvas AppsIntroduction to Force.com Canvas Apps
Introduction to Force.com Canvas AppsSalesforce Developers
 
Salesforce Streaming event - PushTopic and Generic Events
Salesforce Streaming event - PushTopic and Generic EventsSalesforce Streaming event - PushTopic and Generic Events
Salesforce Streaming event - PushTopic and Generic EventsDhanik Sahni
 
Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...
Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...
Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...Kai Wähner
 

Was ist angesagt? (20)

컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
 
Salesforce Development Best Practices
Salesforce Development Best PracticesSalesforce Development Best Practices
Salesforce Development Best Practices
 
Rest API
Rest APIRest API
Rest API
 
Salesforce integration best practices columbus meetup
Salesforce integration best practices   columbus meetupSalesforce integration best practices   columbus meetup
Salesforce integration best practices columbus meetup
 
Visualforce & Force.com Canvas: Unlock your Web App inside of Salesforce.com ...
Visualforce & Force.com Canvas: Unlock your Web App inside of Salesforce.com ...Visualforce & Force.com Canvas: Unlock your Web App inside of Salesforce.com ...
Visualforce & Force.com Canvas: Unlock your Web App inside of Salesforce.com ...
 
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
 
Highlights of WSO2 API Manager 4.0.0
Highlights of WSO2 API Manager 4.0.0Highlights of WSO2 API Manager 4.0.0
Highlights of WSO2 API Manager 4.0.0
 
Development Best Practices
Development Best PracticesDevelopment Best Practices
Development Best Practices
 
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
 
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET Microservices
 
From Sandbox To Production: An Introduction to Salesforce Release Management
From Sandbox To Production: An Introduction to Salesforce Release ManagementFrom Sandbox To Production: An Introduction to Salesforce Release Management
From Sandbox To Production: An Introduction to Salesforce Release Management
 
How to work with your salesforce contacts
How to work with your salesforce contactsHow to work with your salesforce contacts
How to work with your salesforce contacts
 
Performance Monitoring and Testing in the Salesforce Cloud
Performance Monitoring and Testing in the Salesforce CloudPerformance Monitoring and Testing in the Salesforce Cloud
Performance Monitoring and Testing in the Salesforce Cloud
 
Next-Generation Cloud Native Apps with Spring Cloud and Kubernetes
Next-Generation Cloud Native Apps with Spring Cloud and KubernetesNext-Generation Cloud Native Apps with Spring Cloud and Kubernetes
Next-Generation Cloud Native Apps with Spring Cloud and Kubernetes
 
[AWS Dev Day] 앱 현대화 | DevOps 개발자가 되기 위한 쿠버네티스 핵심 활용 예제 알아보기 - 정영준 AWS 솔루션즈 아키...
[AWS Dev Day] 앱 현대화 | DevOps 개발자가 되기 위한 쿠버네티스 핵심 활용 예제 알아보기 - 정영준 AWS 솔루션즈 아키...[AWS Dev Day] 앱 현대화 | DevOps 개발자가 되기 위한 쿠버네티스 핵심 활용 예제 알아보기 - 정영준 AWS 솔루션즈 아키...
[AWS Dev Day] 앱 현대화 | DevOps 개발자가 되기 위한 쿠버네티스 핵심 활용 예제 알아보기 - 정영준 AWS 솔루션즈 아키...
 
Architect day 20181128 - Afternoon Session
Architect day 20181128 - Afternoon SessionArchitect day 20181128 - Afternoon Session
Architect day 20181128 - Afternoon Session
 
Introduction to Force.com Canvas Apps
Introduction to Force.com Canvas AppsIntroduction to Force.com Canvas Apps
Introduction to Force.com Canvas Apps
 
Governor limits
Governor limitsGovernor limits
Governor limits
 
Salesforce Streaming event - PushTopic and Generic Events
Salesforce Streaming event - PushTopic and Generic EventsSalesforce Streaming event - PushTopic and Generic Events
Salesforce Streaming event - PushTopic and Generic Events
 
Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...
Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...
Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...
 

Andere mochten auch

Aligning Sales & Marketing: Not Mission Impossible
Aligning Sales & Marketing: Not Mission ImpossibleAligning Sales & Marketing: Not Mission Impossible
Aligning Sales & Marketing: Not Mission ImpossibleChristine Crandell
 
Accelerate Business Velocity with NetSuite and Salesforce Integration
Accelerate Business Velocity with NetSuite and Salesforce IntegrationAccelerate Business Velocity with NetSuite and Salesforce Integration
Accelerate Business Velocity with NetSuite and Salesforce IntegrationInformatica Cloud
 
Introducing Eclipse MoDisco
Introducing Eclipse MoDiscoIntroducing Eclipse MoDisco
Introducing Eclipse MoDiscoHugo Bruneliere
 
Professional Services Automation
Professional Services AutomationProfessional Services Automation
Professional Services AutomationAmbareesh Kulkarni
 
Service Automation: Enabling The Self Service Generation - Jan-Willem Middleburg
Service Automation: Enabling The Self Service Generation - Jan-Willem MiddleburgService Automation: Enabling The Self Service Generation - Jan-Willem Middleburg
Service Automation: Enabling The Self Service Generation - Jan-Willem MiddleburgPink Elephant
 
Financial force psa and salesforce crm
Financial force psa and salesforce crmFinancial force psa and salesforce crm
Financial force psa and salesforce crmjwpurl
 
Driving Profitability with Professional Services Automation
Driving Profitability with Professional Services AutomationDriving Profitability with Professional Services Automation
Driving Profitability with Professional Services AutomationProformative, Inc.
 
Partner Success Services (Overview & Framework)
Partner Success Services (Overview & Framework)Partner Success Services (Overview & Framework)
Partner Success Services (Overview & Framework)Salesforce Partners
 
Automation & Professional Services
Automation & Professional ServicesAutomation & Professional Services
Automation & Professional ServicesMarketingArrowECS_CZ
 
Microsoft PSA: Service Automation in Action
Microsoft PSA: Service Automation in ActionMicrosoft PSA: Service Automation in Action
Microsoft PSA: Service Automation in ActionAdvaiya Solutions, Inc.
 
Educateca 3º ano desafios
Educateca 3º ano desafiosEducateca 3º ano desafios
Educateca 3º ano desafiosSílvia Rocha
 
Fichas de Avaliação Estudo do Meio_3.º Ano
Fichas de Avaliação Estudo do Meio_3.º AnoFichas de Avaliação Estudo do Meio_3.º Ano
Fichas de Avaliação Estudo do Meio_3.º AnoMarta Viegas
 
What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)Rudy De Busscher
 

Andere mochten auch (17)

Uml
UmlUml
Uml
 
Aligning Sales & Marketing: Not Mission Impossible
Aligning Sales & Marketing: Not Mission ImpossibleAligning Sales & Marketing: Not Mission Impossible
Aligning Sales & Marketing: Not Mission Impossible
 
Ritesh Mehandiratta Resume
Ritesh Mehandiratta ResumeRitesh Mehandiratta Resume
Ritesh Mehandiratta Resume
 
Accelerate Business Velocity with NetSuite and Salesforce Integration
Accelerate Business Velocity with NetSuite and Salesforce IntegrationAccelerate Business Velocity with NetSuite and Salesforce Integration
Accelerate Business Velocity with NetSuite and Salesforce Integration
 
Karthik resume 2016
Karthik resume   2016Karthik resume   2016
Karthik resume 2016
 
Introducing Eclipse MoDisco
Introducing Eclipse MoDiscoIntroducing Eclipse MoDisco
Introducing Eclipse MoDisco
 
Professional Services Automation
Professional Services AutomationProfessional Services Automation
Professional Services Automation
 
Service Automation: Enabling The Self Service Generation - Jan-Willem Middleburg
Service Automation: Enabling The Self Service Generation - Jan-Willem MiddleburgService Automation: Enabling The Self Service Generation - Jan-Willem Middleburg
Service Automation: Enabling The Self Service Generation - Jan-Willem Middleburg
 
Financial force psa and salesforce crm
Financial force psa and salesforce crmFinancial force psa and salesforce crm
Financial force psa and salesforce crm
 
Driving Profitability with Professional Services Automation
Driving Profitability with Professional Services AutomationDriving Profitability with Professional Services Automation
Driving Profitability with Professional Services Automation
 
Partner Success Services (Overview & Framework)
Partner Success Services (Overview & Framework)Partner Success Services (Overview & Framework)
Partner Success Services (Overview & Framework)
 
Automation & Professional Services
Automation & Professional ServicesAutomation & Professional Services
Automation & Professional Services
 
Microsoft PSA: Service Automation in Action
Microsoft PSA: Service Automation in ActionMicrosoft PSA: Service Automation in Action
Microsoft PSA: Service Automation in Action
 
Educateca 3º ano desafios
Educateca 3º ano desafiosEducateca 3º ano desafios
Educateca 3º ano desafios
 
Ficha de avaliação de estudo do meio - 3º ano
Ficha de avaliação de estudo do meio - 3º anoFicha de avaliação de estudo do meio - 3º ano
Ficha de avaliação de estudo do meio - 3º ano
 
Fichas de Avaliação Estudo do Meio_3.º Ano
Fichas de Avaliação Estudo do Meio_3.º AnoFichas de Avaliação Estudo do Meio_3.º Ano
Fichas de Avaliação Estudo do Meio_3.º Ano
 
What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)
 

Ähnlich wie Apex Code Analysis Using the Tooling API and Canvas

Make your gui shine with ajax solr
Make your gui shine with ajax solrMake your gui shine with ajax solr
Make your gui shine with ajax solrlucenerevolution
 
Tutorial, Part 2: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
Tutorial, Part 2: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...Tutorial, Part 2: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
Tutorial, Part 2: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...SPTechCon
 
Progressive Web Apps and React
Progressive Web Apps and ReactProgressive Web Apps and React
Progressive Web Apps and ReactMike Melusky
 
Apex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong FoundationsApex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong FoundationsSalesforce Developers
 
Mike Taulty MIX10 Silverlight Frameworks and Patterns
Mike Taulty MIX10 Silverlight Frameworks and PatternsMike Taulty MIX10 Silverlight Frameworks and Patterns
Mike Taulty MIX10 Silverlight Frameworks and Patternsukdpe
 
SharePoint Saturday The Conference DC - How the client object model saved the...
SharePoint Saturday The Conference DC - How the client object model saved the...SharePoint Saturday The Conference DC - How the client object model saved the...
SharePoint Saturday The Conference DC - How the client object model saved the...Liam Cleary [MVP]
 
qooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkqooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkecker
 
Create Salesforce online IDE in 30 minutes
Create Salesforce online IDE in 30 minutesCreate Salesforce online IDE in 30 minutes
Create Salesforce online IDE in 30 minutesJitendra Zaa
 
Building intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryBuilding intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryAlek Davis
 
ASP.NET AJAX with Visual Studio 2008
ASP.NET AJAX with Visual Studio 2008ASP.NET AJAX with Visual Studio 2008
ASP.NET AJAX with Visual Studio 2008Caleb Jenkins
 
ASP.NET Presentation
ASP.NET PresentationASP.NET Presentation
ASP.NET PresentationRasel Khan
 
RapidApp - YAPC::NA 2014
RapidApp - YAPC::NA 2014RapidApp - YAPC::NA 2014
RapidApp - YAPC::NA 2014Henry Van Styn
 
Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Lucas Jellema
 
Building intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryBuilding intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryAlek Davis
 
Web development concepts using microsoft technologies
Web development concepts using microsoft technologiesWeb development concepts using microsoft technologies
Web development concepts using microsoft technologiesHosam Kamel
 
Developing Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDeveloping Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDmitry Vinnik
 
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...CodeMill digital skills
 

Ähnlich wie Apex Code Analysis Using the Tooling API and Canvas (20)

Make your gui shine with ajax solr
Make your gui shine with ajax solrMake your gui shine with ajax solr
Make your gui shine with ajax solr
 
Tutorial, Part 2: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
Tutorial, Part 2: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...Tutorial, Part 2: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
Tutorial, Part 2: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
 
SynapseIndia asp.net2.0 ajax Development
SynapseIndia asp.net2.0 ajax DevelopmentSynapseIndia asp.net2.0 ajax Development
SynapseIndia asp.net2.0 ajax Development
 
Progressive Web Apps and React
Progressive Web Apps and ReactProgressive Web Apps and React
Progressive Web Apps and React
 
Apex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong FoundationsApex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong Foundations
 
Mike Taulty MIX10 Silverlight Frameworks and Patterns
Mike Taulty MIX10 Silverlight Frameworks and PatternsMike Taulty MIX10 Silverlight Frameworks and Patterns
Mike Taulty MIX10 Silverlight Frameworks and Patterns
 
SharePoint Saturday The Conference DC - How the client object model saved the...
SharePoint Saturday The Conference DC - How the client object model saved the...SharePoint Saturday The Conference DC - How the client object model saved the...
SharePoint Saturday The Conference DC - How the client object model saved the...
 
qooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Frameworkqooxdoo - Open Source Ajax Framework
qooxdoo - Open Source Ajax Framework
 
Create Salesforce online IDE in 30 minutes
Create Salesforce online IDE in 30 minutesCreate Salesforce online IDE in 30 minutes
Create Salesforce online IDE in 30 minutes
 
Building intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryBuilding intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQuery
 
ASP.NET AJAX with Visual Studio 2008
ASP.NET AJAX with Visual Studio 2008ASP.NET AJAX with Visual Studio 2008
ASP.NET AJAX with Visual Studio 2008
 
ASP.NET Presentation
ASP.NET PresentationASP.NET Presentation
ASP.NET Presentation
 
RapidApp - YAPC::NA 2014
RapidApp - YAPC::NA 2014RapidApp - YAPC::NA 2014
RapidApp - YAPC::NA 2014
 
Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...
 
Building intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryBuilding intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQuery
 
Web development concepts using microsoft technologies
Web development concepts using microsoft technologiesWeb development concepts using microsoft technologies
Web development concepts using microsoft technologies
 
Atlas Php
Atlas PhpAtlas Php
Atlas Php
 
Developing Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDeveloping Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptx
 
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...
Containerisation Hack of a Legacy Software Solution - Alex Carter - CodeMill ...
 
AJppt.pptx
AJppt.pptxAJppt.pptx
AJppt.pptx
 

Mehr von Salesforce Developers

Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSalesforce Developers
 
Maximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceMaximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceSalesforce Developers
 
Local development with Open Source Base Components
Local development with Open Source Base ComponentsLocal development with Open Source Base Components
Local development with Open Source Base ComponentsSalesforce Developers
 
TrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsTrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsSalesforce Developers
 
Why developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaWhy developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaSalesforce Developers
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentSalesforce Developers
 
CodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsCodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsSalesforce Developers
 
Enterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsEnterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsSalesforce Developers
 
TrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsTrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsSalesforce Developers
 
Lightning web components - Episode 4 : Security and Testing
Lightning web components  - Episode 4 : Security and TestingLightning web components  - Episode 4 : Security and Testing
Lightning web components - Episode 4 : Security and TestingSalesforce Developers
 
LWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilityLWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilitySalesforce Developers
 
Lightning web components episode 2- work with salesforce data
Lightning web components   episode 2- work with salesforce dataLightning web components   episode 2- work with salesforce data
Lightning web components episode 2- work with salesforce dataSalesforce Developers
 
Lightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionLightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionSalesforce Developers
 
Migrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPMigrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPSalesforce Developers
 
Scale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceScale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceSalesforce Developers
 
Replicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureReplicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureSalesforce Developers
 
Modern Development with Salesforce DX
Modern Development with Salesforce DXModern Development with Salesforce DX
Modern Development with Salesforce DXSalesforce Developers
 
Integrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectIntegrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectSalesforce Developers
 

Mehr von Salesforce Developers (20)

Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce Developers
 
Maximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceMaximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component Performance
 
Local development with Open Source Base Components
Local development with Open Source Base ComponentsLocal development with Open Source Base Components
Local development with Open Source Base Components
 
TrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsTrailheaDX India : Developer Highlights
TrailheaDX India : Developer Highlights
 
Why developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaWhy developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX India
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local Development
 
CodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsCodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web Components
 
Enterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsEnterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web Components
 
TrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsTrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer Highlights
 
Live coding with LWC
Live coding with LWCLive coding with LWC
Live coding with LWC
 
Lightning web components - Episode 4 : Security and Testing
Lightning web components  - Episode 4 : Security and TestingLightning web components  - Episode 4 : Security and Testing
Lightning web components - Episode 4 : Security and Testing
 
LWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilityLWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura Interoperability
 
Lightning web components episode 2- work with salesforce data
Lightning web components   episode 2- work with salesforce dataLightning web components   episode 2- work with salesforce data
Lightning web components episode 2- work with salesforce data
 
Lightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionLightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An Introduction
 
Migrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPMigrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCP
 
Scale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceScale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in Salesforce
 
Replicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureReplicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data Capture
 
Modern Development with Salesforce DX
Modern Development with Salesforce DXModern Development with Salesforce DX
Modern Development with Salesforce DX
 
Get Into Lightning Flow Development
Get Into Lightning Flow DevelopmentGet Into Lightning Flow Development
Get Into Lightning Flow Development
 
Integrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectIntegrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS Connect
 

Kürzlich hochgeladen

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 

Kürzlich hochgeladen (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 

Apex Code Analysis Using the Tooling API and Canvas

  • 1. Apex Code Analysis using the Tooling API and Canvas Andrew Fawcett, FinancialForce.com, CTO @andyinthecloud
  • 2. All about FinancialForce.com Revolutionizing the Back Office #1 Accounting, Billing and PSA Apps on the Salesforce platform ▪ 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!
  • 3. Introduction Why do I need to know more about my Apex code? ▪ Its hard to see code complexity from within the trenches • Helps those unfamiliar learn complex code bases ▪ Tightly coupled code is harder to maintain and evolve Goals of this Session • What are the technologies that can help? • Understand how to analyze your code with the Tooling API? • Provide a take away demo of the Tooling API you can extend
  • 4. Canvas: UI Integration with Salesforce Provides a means of extending the Salesforce User Interface ▪ Chatter Tab ▪ Visualforce Tabs ▪ Publisher Actions ▪ Other areas see Canvas Developer Guide Open to any new or existing external web page ▪ Pages can be developed and hosted within any web platform ▪ Developer SDK’s for Java and JavaScript are provided ▪ Pages must follow a specific authentication flow
  • 5. Where do Canvas apps appear in Salesforce? Chatter Tab
  • 6. Where do Canvas apps appear in Salesforce? Visualforce Page
  • 7. Where do Canvas apps appear in Salesforce? Publisher Action
  • 8. Canvas Architecture Access Method: Signed Request (Recommended) Canvas aware Web Site (hold consumer secret) https://mysite.com/mypage Salesforce User Interface (holds consumer secret) Initial HTTP POST passing signed_request Canvas Frame User Web Page Interactions 1. Receives HTTP POST, decodes and validates request 2. Stores CanvasRequest and presents page to user 3. Optionally calls back to Salesforce via API’s using oAuth token Salesforce API Interactions (using oAuth Token from CanvasRequest)
  • 9. How do I make my web page Canvas aware? Two Salesforce SDK’s ▪ Salesforce Canvas JavaScript SDK ▪ Salesforce Canvas Java SDK • Includes JavaScript SDK Handle Decoding and Parsing of the “CanvasRequest” ▪ Sent to the page when the user clicks in the Salesforce UI ▪ HTTP POST to the page via ‘signed_request’ parameter • Contains amongst other information, oAuth token for Salesforce API access!
  • 10. What is the Tooling API? What: Manage Apex Code and Pages on the Platform ▪ More granular API than Metadata API built for … • Building alternative IDE’s (Integrated Developer Environment) – MavensMate – Force.com IDE • Build development tools – Tools that perform further analysis on code via Symbol Table
  • 11. What is the Tooling API? ▪ Use REST API bindings if you’re using a language that isn’t strongly typed, like JavaScript. ▪ Use SOAP API bindings if you’re using a strongly typed language like Java that generates Web service client code.
  • 12. Tooling API Architecture and Objects New Objects in the Salesforce Database ▪ Creating, querying, updating and deleting records • NOTE: Only via Tooling API CRUD operations ▪ MetadataContainer Object • Think, “Workspace” in your IDE for files being worked on
  • 13. Tooling API Architecture and Objects New Objects in the Salesforce Database ▪ Key Objects are …. Use without MetadataContainer Use with MetadataContainer • • • • • • • • ApexClass ApexPage ApexComponent ApexTrigger ApexClassMember ApexPageMember ApexComponentMember ApexTriggerMember
  • 14. What is a Symbol Table? Child of ApexClass, ApexClassMember and ApexTriggerMember ▪ Variables ▪ Methods ▪ Inner Classes ▪ External References • Lists references to the above from other Apex Classes and Apex Triggers • NOTE: Only available after a compile!
  • 15. Birds Eye View : Symbol Table Object Only available after an Apex compilation!
  • 16. Apex UML Canvas Application: Demo NOTE: Code shown is from my “Building Strong Foundation: Apex Enterprise Patterns” session
  • 17. 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
  • 18. 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
  • 19. 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"; } }
  • 20. 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)
  • 21. Apex UML Canvas : Code Walkthrough umlcanvas.jsp ▪ Java Servlet Page (JSP) ▪ AJAX calls to UmlCanvasController.java ▪ JavaScript calls UmlCanvas JavaScript library to render UML
  • 22. Apex UML Canvas : Code Walkthrough UmlCanvasController.java ▪ jQuery Ajax calls controller as user selects classes 1. /umlcanvas/{apexclass}/symboltable
  • 23. 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
  • 24. Apex UML Canvas : Code Walkthrough UmlCanvasController.java : /{apexclass}/symboltable
  • 25. Apex UML Canvas : Code Walkthrough UmlCanvasController.java : /{apexclass}/compile
  • 26. Apex UML Canvas : Code Walkthrough UmlCanvasController.java : /{apexclass}/compile
  • 27. Apex UML Canvas : Code Walkthrough UmlCanvasController.java : /{apexclass}/compile
  • 28. Apex UML Canvas : Code Walkthrough UmlCanvasController.java : /{apexclass}/compile
  • 29. Apex UML Canvas : Code Walkthrough UmlCanvasController.java : /containerasyncrequest/{id}
  • 30. Apex UML Canvas : Code Walkthrough UmlCanvasController.java : /navigator/containerasyncrequest/{id}/{classname}/symboltable
  • 31. 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
  • 32. Other Uses of Tooling API Ant Integration : Execute Apex Code from Ant! Salesforce SE Execute an Apex class using Ant build script
  • 33. Summary Read Documentation closely! ▪ Force.com Tooling API Developer’s Guide ▪ Force.com Canvas Developer’s Guide Symbol Table ▪ Has some gaps, still maturing Spring MVC rocks! ▪ Great for those not familiar with Java Servlet API ▪ Shades of JavaScript Remoting