Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Write Generic Code with the Tooling API


Published on

Learn how to write generic code in Salesforce and use that to build tools using the Tooling API

Published in: Software
  • Login to see the comments

Write Generic Code with the Tooling API

  1. 1. Adam Olshansky Salesforce Developer, Salesforce MVP @adam17amo Writing Highly Genericized Code Using Dynamic Apex and the Tooling API
  2. 2. Adam Olshansky Salesforce Developer, YouTube @adam17amo
  4. 4. NAMASTE Thank you to dQuotient for sponsoring!
  5. 5. Agenda • An overview of Generic code for Apex • Salesforce Dynamic Coding Examples • Tooling API
  6. 6. Generic Programming in Apex
  7. 7. Who are we talking to today? • ISV developers • Don’t know all conditions of customer orgs • Individual app developers • May need to accept input from clients/customers • Any developer accepting user input • Tailor your queries and results based on user conditions
  8. 8. What problem are we solving for? ● Rigid/Fragile ● Poor (Re)usability ● Lots of patches/quick fixes ● Duplicate code ● Overly complicated data structures ○ Maps of Maps of Maps of….. ○ Managing the data in a 5-D Arrays
  9. 9. 2 Different Ways of Writing Code ​Static ​Dynamic/Generic
  10. 10. Different Ways of Writing Code: Static vs Dynamic Static • Generated at compile time • Hard coded • Doesn’t usually have dependencies • Works well if you know what’s in the org • Most commonly used by developers at a company developing for their own org Dynamic/Generic • Generated at run time • Dependent on user input • May have org-specific dependencies • Works well if you DON’T know what’s in the org • Most commonly used by developers whose code needs to run in customized orgs
  11. 11. Tradeoffs of Dynamic Coding Negatives • More code to write • More code to test • Less readabillity Positives • More detailed information • Less chance of an error down the road • Endless possibilities
  12. 12. Dynamic Coding Examples
  13. 13. Tools of the trade ● Custom Settings/Metadata ● Schema class ● Dynamic Apex ● Dynamic Visualforce ● Dynamic SOQL ● Limits class
  14. 14. Dynamic Apex (Metadata)
  15. 15. Dynamic Apex (Data)
  16. 16. Dynamic Controller
  17. 17. Dynamic Visualforce
  18. 18. Dynamic SOQL • Don’t always know what parameters are available in a user’s org • In your org this works fine Database.query() Thanks to Dan Appleman, Advanced Apex Programming • What if your customer doesn’t have record types defined for Lead
  19. 19. Limits Class • Limits.getDMLRows(); • Limits.getDMLStatements(); • Limits.getHeapSize(); • Limits.getQueries(); • Limits.getQueryRows(); • (Apex Limits Class) Dynamically make adjustments based on limits
  20. 20. Tying it Together ● You know how to design apps efficiently ● You know how to write generic code ● You know how to find information about org metadata ● What’s next?
  21. 21. Tooling API An API for building...TOOLS
  22. 22. Tooling API Highlights • Gather finely grained metadata about Apex classes, triggers, and tests in an org • Classes, triggers, construction of symbol tables • Query for code coverage, logs, SOQL results • Query metadata about setup objects • Business Processes, Flows, Custom items, Workflow components • Can be utilized for source control/continuous integration • Metadata containers, deployment details, code file metadata • Can be queried through REST or SOAP • Similar to Metadata API but with a ton of additional functionality Great for!
  23. 23. Tooling API Examples Create a class
  24. 24. Additional Tooling API Use Cases • Show all objects that can be analyzed • /services/data/v39.0/tooling/sobjects/ • Show list of all classes • /services/data/v39.0/tooling/apexManifest • Show all metadata about a class • /services/data/v39.0/tooling/sobjects/ApexClass/01po0000004SL5b
  26. 26. Tools To Be Built ● UML Diagram Tool ● Symbol Table Visualizer ● Automated Testing Tools? ● Tools to identify unused code? ● Customize managed packages based on org’s config ● Use your imagination!
  27. 27. Summary Next Steps from Here
  28. 28. Summary and Next Steps • Be thinking about the right type of code for the app you’re building • Utilize design patterns • Write dynamic code • Gather granular details to build any app • Get out there and build!
  29. 29. Where to Learn More ● Follow @andyinthecloud and his blog! ● Andy Fawcett’s Blog ● Andy and James Loghry’s Apex Tooling API Wrapper: ● Pat Patterson’s Java Tooling API Wrapper: ling-api.html ● Tom Patros VF page Utilizing Symbol Tables (The Documenter):
  30. 30. Thank Y u