Cert++
  1. Home
  2. Platform Developer II

Platform Developer II

Checklist progressProgress

0/271Learned

Platform Developer II Study Checklist
  • Platform Administrator
  • Platform App Builder
  • Platform Foundations
  • Platform Developer
  • Platform Administrator II
  • Agentforce Sales Consultant
  • Agentforce Service Consultant
  • Platform Data Architect
  • Platform Development Lifecycle and Deployment Architect
  • Platform Identity and Access Management Architect
  • Platform Integration Architect
  • Platform Sharing and Visibility Architect
  • Heroku Architect
  • B2C Solution Architect
  • Experience Cloud Consultant
  • Agentforce Field Service and Operations Consultant
  • Agentforce Nonprofit Consultant
  • Data 360 Consultant
  • Omnistudio Consultant
  • CRM Analytics and Einstein Discovery Consultant
  • Platform User Experience Designer
  • Platform Strategy Designer
  • B2C Commerce Developer
  • JavaScript Developer
  • Omnistudio Developer
  • Platform Developer II
  • Marketing Cloud Engagement Administrator
  • Marketing Cloud Engagement Specialist
  • Marketing Cloud Engagement Consultant
  • Agentforce Sales Foundations
  • Business Analyst
  • Marketing Cloud Engagement Developer
  • Marketing Cloud Engagement Foundations
  • Agentforce Specialist
  • Agentforce Life Sciences Consultant
  • B2B Commerce Administrator AP
  • B2B Commerce Developer AP
  • Agentforce Consumer Goods AP
  • Agentforce Financial Services AP
  • Agentforce Health AP
  • Agentforce Manufacturing AP
  • MuleSoft Integration Foundations
  • MuleSoft Developer
  • MuleSoft Developer II
  • MuleSoft Platform Integration Architect
  • MuleSoft Platform Architect
  • Tableau Desktop Foundations
  • Tableau Data Analyst
  • Tableau Consultant
  • Tableau Server Administrator
  • Tableau Architect
  • Slack Administrator

Checklist progressProgress

0/271Learned

  • Custom labels for translated text in Apex, Visualforce and Lightning components
  • Translated picklist and record type values: toLabel() versus describe labels
  • User locale and time zone effects on Apex date, time and number methods
  • FORMAT() for locale-formatted SOQL results
  • Record currency (CurrencyIsoCode) after enabling multiple currencies
  • convertCurrency() in SOQL and SOSL select lists
  • Currency comparisons in SOQL WHERE and ORDER BY clauses
  • Currency of SOQL aggregate results in multi-currency orgs
  • Static versus dated exchange rates in Apex (CurrencyType, DatedConversionRate)
  • Apex that works in both single-currency and multi-currency orgs
  • Apex managed sharing versus declarative sharing features
  • Share object naming and field structure
  • Share access levels relative to organization-wide defaults
  • Sharing with roles, public groups, and territories through UserOrGroupId
  • Manual sharing versus Apex managed sharing created in code
  • Apex sharing reasons and RowCause references in code
  • Sharing context for Apex that creates or reads share records
  • Share table records versus implicit and hierarchy-derived access
  • Apex managed sharing recalculation classes
  • Testing Apex managed sharing logic
  • Custom metadata types versus custom settings for app configuration
  • List versus hierarchy custom settings
  • Hierarchy custom setting value resolution in Apex
  • Reading custom metadata type records in Apex
  • Custom metadata relationship fields for object and field mappings
  • Custom metadata and custom settings in formulas, validation rules and flows
  • Creating and updating custom metadata records from Apex
  • Custom settings and custom metadata records in Apex tests
  • Protected custom settings and custom metadata for application secrets
  • Migrating list custom settings to custom metadata types
  • Before-save sequencing of record-triggered flows, triggers, and validation rules
  • After-save sequencing of triggers, rules, processes, and flows through commit
  • Execution order among multiple triggers and flows on one object
  • Legacy workflow and process field updates and trigger re-execution
  • Recursion and cascading saves across related-object automations
  • Shared governor limits across flows, triggers, and Apex in one transaction
  • Asynchronous handoffs from triggers and record-triggered flows
  • Record-triggered Flow versus Apex trigger selection by automation density
  • Before-save flows versus after-save flows and before triggers for same-record updates
  • Validation rules versus Apex trigger addError for data integrity
  • Formula and roll-up summary fields versus code-maintained values
  • Invocable Apex methods called from Flow in the hybrid pattern
  • Declarative Flow callouts versus Apex callouts for outbound requests
  • Scheduled flows and scheduled paths versus Scheduled Apex and Batch Apex
  • Screen flows versus custom Lightning web components for guided processes
  • Before versus after trigger events for record updates
  • Trigger context variable availability across events
  • Bulk-safe related-record queries in triggers
  • Collecting trigger changes for bulk DML
  • Limiting trigger work to records with relevant field changes
  • Trigger recursion control within a transaction
  • Trigger handler frameworks and single-trigger-per-object design
  • Exception flow through try, catch, and finally blocks
  • Defining and throwing custom exception classes
  • Transaction boundaries and rollback on unhandled exceptions
  • All-or-none DML statements versus partial-success Database methods
  • Savepoints and Database.rollback for partial undo
  • Blocking record saves from triggers with addError
  • Governor limit exceptions and proactive Limits class checks
  • Failure handling across Batch Apex execute chunks
  • Transaction Finalizers for queueable job recovery
  • Clause order and keyword placement in a SOQL SELECT statement
  • WHERE clause logic with nested conditions, date literals and date functions
  • Multi-select picklist filtering with INCLUDES and EXCLUDES
  • Parent-to-child subqueries and child-to-parent relationship traversal
  • Semi-joins and anti-joins with IN and NOT IN subqueries
  • Polymorphic relationship queries with TYPEOF
  • Paging query results with LIMIT, OFFSET and ORDER BY
  • Aggregate queries with GROUP BY and HAVING in Apex
  • Subtotals with GROUP BY ROLLUP, GROUP BY CUBE and GROUPING()
  • FIELDS() keyword support in Apex queries
  • Filtering records by ownership scope with USING SCOPE
  • WITH USER_MODE versus WITH SECURITY_ENFORCED in Apex queries
  • WITH DATA CATEGORY filtering of Knowledge articles and questions
  • Record locking with FOR UPDATE for concurrent updates
  • Querying deleted and archived records with ALL ROWS
  • Benefits of moving Apex logic to asynchronous execution
  • Future method signature and invocation constraints
  • Mixed DML operations and asynchronous isolation
  • Queueable Apex versus future methods
  • Chaining Queueable jobs for sequential processing
  • Batch Apex design for large data volumes
  • Scheduled Apex with the Schedulable interface
  • Choosing among Queueable, Batch, Scheduled, and future Apex
  • Asynchronous invocation limits across execution contexts
  • Monitoring and aborting asynchronous Apex jobs
  • Schema describe tokens versus describe results and global describe cost
  • Field describe metadata and dynamic picklist value retrieval
  • Record type IDs from describe versus SOQL on RecordType
  • Dynamic SOQL with Database.query and bind variables
  • SOQL injection prevention in dynamic queries
  • Dynamic SOSL searches with Search.query
  • Dynamic DML and generic sObject handling at run time
  • Field sets and dynamic Visualforce bindings for configurable field lists
  • Describe-based CRUD and FLS checks versus stripInaccessible and user mode
  • Dynamic class instantiation with Type.forName
  • Dynamic Apex for packages and feature-optional orgs
  • Publishing event messages from Apex with EventBus.publish
  • Publish Immediately versus Publish After Commit behavior
  • Selecting among Apex, flow, and external API event publishers
  • Apex trigger subscriber execution context for platform events
  • Configuring platform event trigger running user and batch size
  • Retrying and resuming platform event triggers after failures
  • Subscribing to platform events in LWC with lightning/empApi
  • Selecting among Apex trigger, flow, Pub/Sub API, and CometD subscribers
  • Recursive publish loops and platform event anti-patterns
  • Platform events versus Change Data Capture and other event-driven options
  • Apex HTTP callouts to external REST services
  • Named credentials versus remote site settings for callout endpoints
  • Serializing and deserializing JSON integration payloads in Apex
  • SOAP callouts with WSDL2Apex-generated classes
  • Mocking HTTP and SOAP callouts in Apex tests
  • Request and Reply versus Fire and Forget remote process invocation
  • Exposing Apex classes as custom REST web services
  • Exposing Apex methods as SOAP web services
  • Custom Apex services versus standard Salesforce APIs for inbound calls
  • Running user and data security in inbound Apex web services
  • Salesforce Connect external objects versus data replication
  • Exposing Apex controller methods to LWC and Aura components
  • Cacheable Apex methods and the wire service
  • Wiring Apex to a property versus a function
  • Passing parameters from a Lightning web component to Apex
  • Wire service versus imperative Apex calls
  • Refreshing stale Apex data after a component update
  • Aura client controller calls to Apex server-side actions
  • Returning wrapper classes and complex types from Apex to components
  • Lightning Data Service versus custom Apex for record data
  • Enforcing sharing and field-level security in AuraEnabled controllers
  • Visualforce action methods, apex:param, and PageReference navigation
  • Partial page refresh with reRender and actionRegion
  • apex:actionStatus feedback during AJAX requests
  • Choosing among Visualforce AJAX action and polling components
  • JavaScript remoting with @RemoteAction versus actionFunction
  • Visualforce Remote Objects for DML from JavaScript
  • AuraHandledException versus unhandled Apex exceptions in component controllers
  • Wired Apex method error handling in Lightning web components
  • Imperative Apex error handling with async/await versus promise chains
  • Toast notifications for error feedback in LWC and Aura
  • Aura server-side action callback error states
  • Visualforce page messages for controller validation and exceptions
  • Trigger addError for record-level and field-level error display
  • Field-level validation feedback in LWC forms
  • Flow fault paths with custom error messages for screen flow users
  • errorCallback as an error boundary in Lightning web components
  • Choosing Lightning Web Components versus Aura for new development
  • Exposing LWC and Aura components to Lightning pages and quick actions
  • Wrapping a Lightning web component in an Aura container
  • Requirements where Visualforce remains the fitting solution
  • Choosing a Visualforce standard controller, extension, or custom controller
  • Rebuilding Visualforce as LWC versus reusing it in Lightning Experience
  • Embedding Lightning components in Visualforce pages
  • Supported form factors in LWC configuration files and Aura design resources
  • Responsive column sizing with lightning-layout and SLDS grid classes
  • Rendering LWC markup by device form factor with the formFactor module
  • Aura $Browser global value provider for device-specific markup
  • Width-aware components with flexipageRegionWidth
  • Parent-to-child communication through public properties and methods
  • LWC child-to-parent communication with custom events
  • LWC event propagation with bubbles and composed
  • Lightning message service publish and subscribe in LWC
  • Lightning message service across Aura components and Visualforce pages
  • Aura component event registration, firing, and handling
  • Aura component events versus application events
  • Sending events from an LWC to an enclosing Aura component
  • Choosing a component communication mechanism by containment relationship
  • Static resources versus Documents and externally hosted files
  • Referencing static resources and archive files in Visualforce pages
  • Importing static resource URLs in Lightning web components
  • Loading third-party libraries in LWC with platformResourceLoader
  • Aura static resources with $Resource and ltng:require
  • Static resource cache control and load-time benefits

Apply advanced techniques and tools for testing Apex classes and triggers, such as mocks and stubs

0/18

Reusable test data with @testSetup and test data factories

Learn this concept
Unseen

SeeAllData and environment-independent test data

Learn this concept
Unseen

Test.startTest and Test.stopTest governor limit context

Learn this concept
Unseen

Exposing private members to test methods with @TestVisible

Learn this concept
Unseen

Bulk, positive, and negative testing of Apex triggers

Learn this concept
Unseen

Asserting expected exceptions in negative tests

Learn this concept
Unseen

System.runAs for permission and sharing-based tests

Learn this concept
Unseen

Avoiding mixed DML errors in test methods

Learn this concept
Unseen

Testing batch, queueable, future, and scheduled Apex

Learn this concept
Unseen

Testing platform event publishing and subscriber triggers

Learn this concept
Unseen

HttpCalloutMock and Test.setMock for testing HTTP callouts

Learn this concept
Unseen

WebServiceMock for testing WSDL2Apex SOAP callouts

Learn this concept
Unseen

Sequencing test data DML and mock callouts in one test method

Learn this concept
Unseen

Unit testing Apex REST resource classes

Learn this concept
Unseen

Testing SOSL queries with Test.setFixedSearchResults

Learn this concept
Unseen

Dependency injection to make Apex classes stubbable

Learn this concept
Unseen

Building stubs with the StubProvider interface and Test.createStub

Learn this concept
Unseen

Apex Stub API mocking limitations

Learn this concept
Unseen

Apply techniques and tools for testing and debugging LWC, Aura Components, and Visualforce controllers and extensions, and JavaScript

0/12

  • LWC Jest test structure and DOM lifecycle in jsdom
  • Awaiting asynchronous rerendering in LWC Jest tests
  • Simulating user input and asserting fired events in Jest
  • Mocking wire service data and errors in Jest
  • Mocking imperative Apex and module imports in Jest
  • Running and debugging LWC Jest tests locally
  • Choosing Jest, Aura component tests, or end-to-end testing
  • Debug mode for Lightning component JavaScript
  • Chrome DevTools breakpoints versus debugger statements
  • Apex tests for @AuraEnabled controller methods and errors
  • Testing Visualforce custom controllers and controller extensions
  • Debugging Visualforce controller execution and performance in the Log Inspector

Given a scenario, Apex code, Apex trigger, or Apex tests that's not executing as expected, apply techniques tools to identify the cause

0/9

  • Trace flags and debug log levels for capturing a usable log
  • Log Inspector panels for tracing execution and limit consumption
  • Instrumenting code with System.debug logging levels and Limits methods
  • Exception details for locating the failing line and record
  • Debugging a failing Apex test with Apex Replay Debugger
  • Finding uncovered lines and stale code coverage results
  • Diagnosing failed or silent asynchronous and event-driven Apex
  • Intermittent test failures from parallel test execution
  • Query Plan tool for diagnosing non-selective query failures

Given a scenario, formulate the deployment process, supporting tools, and mechanisms for source-driven development

0/11

  • Org development versus package development versus change set models
  • Scratch orgs versus sandbox types across release stages
  • Salesforce DX project structure and configuration files
  • Source tracking to sync a local project with an org
  • Manifest, source-directory and metadata-based deploy and retrieve
  • Apex test levels and coverage requirements in production deployments
  • Validation-only deployments and quick deploy
  • Choosing a deployment mechanism for the team and change type
  • Developer Console versus VS Code, Code Builder, and Salesforce CLI
  • Unlocked packages versus managed and unmanaged packages
  • Scratch-org-based continuous integration and delivery pipelines
  • Visualforce view state size reduction
  • Visualforce page asset and markup optimization
  • JavaScript remoting versus action components for Visualforce responsiveness
  • Paging large record sets in Visualforce and Lightning components
  • Diagnosing slow Visualforce pages with the Developer Console and testing
  • Client-side caching with cacheable Apex versus Lightning Data Service
  • Reducing DOM size with conditional rendering and lazy instantiation
  • Expensive LWC event handlers: debouncing and CSS-based styling
  • Base components versus third-party UI libraries in LWC
  • Chrome DevTools performance profiling for Lightning web components
  • Aura performance warnings, rendering anti-patterns and debug mode
  • Selective SOQL filters, indexed fields and the query optimizer
  • Non-selective SOQL filter patterns and how to restructure them
  • Custom indexes versus skinny tables for slow large-object queries
  • Parent-to-child subqueries and child-to-parent relationship queries
  • SOSL versus SOQL for text search on large data sets
  • SOQL for loops versus list queries for heap-safe processing
  • Batch Apex with QueryLocator for large record volumes
  • Read-only mode for queries beyond synchronous row limits
  • Bulk API queries and PK chunking for large extracts
  • Data skew types and record-lock contention in bulk updates
  • Org versus session Platform Cache and choosing what to cache
  • Cache-aside pattern and cache-miss handling in Apex
  • Data tiering with big objects versus external objects
  • SOQL against big object index fields
  • Performance benefits of Continuation callouts for slow external services
  • Continuation action method and callback method structure
  • Continuation callback return values and the Visualforce request lifecycle
  • Continuations from Lightning components and JavaScript remoting
  • Parallel versus chained callouts and Continuation limits
  • Continuation versus future or Queueable Apex for user-facing callouts
  • Moving trigger and post-DML callouts to future or Queueable Apex
  • When to apply separation of concerns in Salesforce applications
  • Service layer reuse across controllers, batch jobs and API entry points
  • Service method design: bulk callers, sharing and caller-neutral naming
  • Domain classes and trigger handlers for reusable object-level logic
  • Selector layer for centralized and consistent SOQL
  • Interfaces versus abstract and virtual classes for reusable Apex behavior
  • Invocable Apex actions for sharing logic with Flow
  • Reusable JavaScript and composition in LWC and Aura components
  • Visualforce custom components versus templates versus apex:include
  • SOQL queries inside loops and bulkified query refactoring
  • DML statements inside loops versus bulk DML on collections
  • Redundant sequential queries and query consolidation
  • Map-keyed lookups and collection methods versus nested loops
  • Filtering in SOQL versus filtering in Apex code
  • Aggregate calculations in SOQL versus Apex loops
  • Describe call efficiency for known sObject types
  • Visualforce controller getter efficiency and lazy loading
  • Asynchronous method invocations inside loops and triggers

Prepare for the Exam

Play Today's Certle
Back to track

Study Community

Ask questions and get the latest info from other Platform Developer II studiers. 662 members and growing.

Go to Discord
  1. Platform Developer II Checklist
  2. Testing, Debugging, and Deployment

Asserting expected exceptions in negative tests

Explainer

Learn More

Practice Question

Keep going

Next conceptSystem.runAs for permission and sharing-based tests

Checklist progress

0/271 (0%)

0 of 271 concepts learned

Tip: You can filter concepts by status.

Prepare for the Exam

Play Today's Certle
Back to track

Study Community

Ask questions and get the latest info from other Platform Developer II studiers. 662 members and growing.

Go to Discord
Close
  1. Platform Developer II Checklist
  2. Testing, Debugging, and Deployment
Asserting expected exceptions in negative tests

Explainer

Learn More

Practice Question

Keep going

Next conceptSystem.runAs for permission and sharing-based tests

Explainer

A negative test runs your code with invalid data and passes only when the code fails in the expected way. An exception thrown during an Apex unit test normally fails the test, so the call goes inside a try/catch block. Assert.fail() is placed right after the call so the test fails if nothing is thrown, and the catch block asserts that the caught exception has the expected type, message and details.
Core information
  • Positive tests use valid inputs to show what happens when code works. Negative tests use invalid data or unexpected input to show that the code handles invalid data and exceptions. Apex testing best practices call for calling methods with both valid and invalid inputs and covering both positive and negative cases.
More details and nuances
  • A poorly written catch block can catch any instance or subclass of exception, so catching something proves little on its own. Once the exception is caught, best practice is to check that its type, message and details are what you expect.

Explainer

A negative test runs your code with invalid data and passes only when the code fails in the expected way. An exception thrown during an Apex unit test normally fails the test, so the call goes inside a try/catch block. Assert.fail() is placed right after the call so the test fails if nothing is thrown, and the catch block asserts that the caught exception has the expected type, message and details.
Core information
  • Positive tests use valid inputs to show what happens when code works. Negative tests use invalid data or unexpected input to show that the code handles invalid data and exceptions. Apex testing best practices call for calling methods with both valid and invalid inputs and covering both positive and negative cases.
More details and nuances
  • A poorly written catch block can catch any instance or subclass of exception, so catching something proves little on its own. Once the exception is caught, best practice is to check that its type, message and details are what you expect.