Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DF18: Everything that's Awesome with Apex

DF18: Everything that's Awesome with Apex

Chris Peterson

September 26, 2018
Tweet

More Decks by Chris Peterson

Other Decks in Programming

Transcript

  1. Everything that's Awesome with Apex
    Dreamforce ’18
    September 26, 2018
    Chris Peterson
    Aaron Slettehaugh

    View Slide

  2. Aaron Slettehaugh
    Product Management,
    Salesforce Platform
    Chris Peterson
    Product Management,
    Salesforce Platform

    View Slide

  3. Forward-Looking Statements
    Statement under the Private Securities Litigation Reform Act of 1995
    This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if any of the
    assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward-looking statements we
    make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of product or service availability, subscriber
    growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of management for future operations, statements of belief,
    any statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services.
    The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our service, new
    products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth, interruptions or delays
    in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with completed and any possible mergers and acquisitions, the
    immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth,
    new releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to larger
    enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form
    10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter. These documents and others containing important
    disclosures are available on the SEC Filings section of the Investor Information section of our Web site.
    Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may not be
    delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently available.
    Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.

    View Slide

  4. Compiler rollout is complete
    Back to your regularly-scheduled roadmap

    View Slide

  5. What's New
    A Recap of Summer '18 and Winter '19

    View Slide

  6. Switch Statement 17,110 Points
    • Switch on most primitive types
    • Switch on a generic SObject instance
    • Use multiple literals for the same ‘when’ condition
    COUNT() Queries Without Worrying About Limits 7,010 Points
    • Count queries only consume one query row for limit purposes
    RecordTypeInfo.getDeveloperName() 4,990 Points
    • Get Record Type API names without a SOQL query
    Apex Code Size Limit Increase 360 Points
    • Organizations default to 6MB of Apex non-test code storage, up from 3MB
    Instantiate Custom Metadata Types in Apex
    • Construct and edit custom metadata fields in memory without DB update
    30,000 IdeaExchange Points
    Quality of Life

    View Slide

  7. IdeaExchange 30,000 points!

    View Slide

  8. Compile On Deploy
    • Apex will automatically recompile as part of metadata deployments to production organizations
    • Avoids performance overhead on first use from "cold cache"
    • Opt-in for sandbox and developer edition orgs
    Skip Test Coverage Calculation
    • Optionally bypass collecting fine-grained test coverage data for faster test execution
    • One less barrier to test-driven-development patterns
    Deployment Cache
    • Tests make better use of cache
    • Faster deployment times
    Always looking out for improvements
    Performance

    View Slide

  9. Detailed, actionable error reporting for Batch Apex
    Introducing: Batch Apex Error Events
    Batch Error Events include:
    • AsyncApexJobId
    • All recordIds in scope for the
    job chunk
    • Exception type
    • Exception message
    • Stack trace
    • RequestId (correlate with
    Event Monitoring data)
    Dramatically improved visibility into issues
    • Know which records were committed and which to retry
    Programmatically react to errors in real-time
    • Retry failed jobs - enqueue jobs from your event handler (if you want)
    Log with all the verbosity you could ever want
    • Full context available in events, including impacted records
    • For Iterator-based jobs, the Object.toString() value is used
    Opt-in, doesn't count for limits
    • To opt-in, implement Database.RaisesPlatformEvents
    • Standard platform event type doesn't count aginst org limits

    View Slide

  10. How's it work?

    View Slide

  11. How's it work?
    throws SObjectException if field
    is invalid

    View Slide

  12. How’s it work?

    View Slide

  13. What's Next
    A Sneak Peak at Spring '19 and Beyond

    View Slide

  14. Where we are investing
    ● Security
    ● Quality of life (true to the core)
    ● Language server
    ● Asynchronous Apex
    ● Platform Cache

    View Slide

  15. Coming soon (Spring ‘19, Summer '19)
    Better visibility of Org Limits
    • Daily Async Apex Executions
    • Daily API Requests
    • Data & File Storage
    • … everything else sfdx force:limits:api:display / Rest API shows you
    Platform Cache available in scratch orgs
    • Platform cache capacity as a scratch org feature
    • [Optional] Automatically shrink deployed partitions to 1MB
    • Reduced minimum partition size to allow testing multiple partitions
    Refactoring support in Apex Language Server (Visual Studio Code)
    • Rename Symbol
    CRUD/FLS checks

    View Slide

  16. Coming less soon
    Apex Language Server: expanded refactoring
    • Implement missing interface methods
    • Extract variable
    Platform Cache: Apex Metadata API Support
    • Allow ISV applications to automatically provision cache in post-install
    • Programatically re-configure cache partition sizing as needed
    Anonymous Inner Classes
    • Long-requested feature to cut down on boilerplate code
    Async enhancements
    • Continued batch robustness and visibility enhancements
    • Fast queueable
    • Consolidate futures and queueable

    View Slide

  17. Security Review and You

    View Slide

  18. Why?
    • A secure by default flexible sharing mode
    • Make developer intent explicit
    • Breeze through AppExchange Security Review
    What?
    • Sharing mode is inherited from calling class
    • If entry point, then sharing mode will be with sharing
    When?
    • Service layer classes, even if global
    • General use utility classes
    • Keep your controller classes with sharing
    New sharing mode in Winter '19
    Inherited Sharing

    View Slide

  19. Inherited sharing in practice
    Apex Entry Point:
    "SampleController" ….
    public inherited sharing
    class SampleController
    Effective Mode:
    WITH SHARING
    global inherited sharing
    ServiceLayerClass
    Effective Mode is
    unchanged, nothing
    has explicitly elevated
    permissions
    Apex Entry Point:
    controller=
    "OtherControllerClass" ….
    public without sharing
    class OtherController
    global inherited sharing
    ServiceLayerClass
    Effective Mode:
    WITHOUT SHARING

    View Slide

  20. How's it different?
    Apex Entry Point:
    controller=
    "OtherControllerClass" ….
    public class
    OtherController
    global ServiceLayerClass
    Effective Mode is
    unchanged, still
    WITHOUT SHARING
    Apex Entry Point:
    "SampleControllerClass" ….
    public class
    SampleController
    Effective Mode:
    WITHOUT SHARING
    global inherited sharing
    ServiceLayerClass
    Effective Mode is
    unchanged, still
    WITHOUT SHARING
    Avoid: mixing no
    sharing
    declaration and
    inherited
    sharing
    Effective Mode:
    WITHOUT SHARING

    View Slide

  21. Object and Field level security
    Roll-your-own security means
    1. Lots of boilerplate code
    2. Security gaps (inadvertently or intentionally
    ignored)
    3. Performance overhead
    4. Difficult to audit:
    ○ requires advanced static analysis tools
    ○ long security review cycles
    ○ higher risk of failing security review (see #2)
    FLS/CRUD

    View Slide

  22. FLS/CRUD
    Soon
    (Spring ‘19)
    WITH SECURITY_ENFORCED
    ● straightforward
    ● blunt tool
    Later
    SObjectAccessDecision Security.stripInaccessible(AccessType
    accessCheckType, List target) //Not finalized syntax
    ● gives dev more control
    ● requires more skill
    Access check enforcement roadmap


    View Slide

  23. Resources

    View Slide

  24. Apex in Trailhead
    Advanced
    Beginner Intermediate
    Apex Enterprise
    Patterns: Domain &
    Selector Layers
    Apex Enterprise
    Patterns: Service Layer
    Apex Metadata API
    Apex Specialist
    Advanced Apex
    Specialist
    Apex & .NET
    Asynchronous Apex
    Asynchronous
    Integration Services
    Apex Quick Start
    Apex Basics &
    Database
    Apex Triggers
    Apex Testing
    Apex Coding for
    Admins

    View Slide

  25. Check out these recent blog posts
    Salesforce developers blog (Emily Kapner): Keep Your Org in Tip-Top Shape with
    Deployment Best Practices
    Andy (Fawcett) in the cloud: Managing Dependency Injection within Salesforce
    Salesforce developers blog (Peter Chittum): Rethink Trigger Logic with Apex Switch

    View Slide

  26. Q&A

    View Slide

  27. View Slide