Microsoft Certification

PL-400 — Microsoft Power Platform Developer Study Guide

62 practice questions with correct answers and detailed explanations. Use this guide to review concepts before taking the practice exam.

▶ Take Practice Exam 62 questions  ·  Free  ·  No registration

About the PL-400 Exam

The Microsoft Microsoft Power Platform Developer (PL-400) certification validates professional expertise in Microsoft technologies. This study guide covers all 62 practice questions from our PL-400 practice test, complete with correct answers and explanations to help you understand each concept thoroughly.

Review each question and explanation below, then test yourself with the full interactive practice exam to measure your readiness.

62 Practice Questions & Answers

Q1 Medium

You are developing a model-driven app that requires custom business logic to execute when a record is created or updated. Which plugin execution stage should you use to prevent invalid data from being saved to the database?

  • A Pre-validation
  • B Post-validation
  • C Post-operation
  • D Pre-operation ✓ Correct
Explanation

Pre-operation stage executes before data is committed to the database, allowing you to cancel the operation or modify data. Pre-validation runs before security checks and cannot prevent saves in the same way.

Q2 Hard

When configuring a cloud flow to trigger on a Power Apps button click, what is the primary limitation you must consider?

  • A Cloud flows cannot accept input parameters from Power Apps
  • B Cloud flows triggered from Power Apps have a 10-second response time requirement for button feedback ✓ Correct
  • C Multiple flows cannot be triggered from the same button simultaneously
  • D The flow must complete within 2 minutes or it will timeout
Explanation

Power Apps expects immediate feedback from triggered flows within approximately 10 seconds; longer-running operations should use background flows or asynchronous patterns.

Q3 Easy

You need to retrieve data from the Dataverse using the WebAPI. Which HTTP method should you use to retrieve a single record by its ID?

  • A GET ✓ Correct
  • B DELETE
  • C PATCH
  • D POST
Explanation

GET is the standard HTTP method for retrieving data. POST creates records, PATCH updates them, and DELETE removes them.

Q4 Hard

You are implementing a solution where you need to perform complex calculations and transformations on large datasets before storing them in Dataverse. What is the recommended approach?

  • A Use Power Automate cloud flows to perform all transformations before creating records
  • B Create a model-driven app view with calculated columns for all transformations
  • C Use Power Query connectors to transform data externally before importing
  • D Implement batch operations in a custom plugin with the ExecuteMultipleRequest message ✓ Correct
Explanation

ExecuteMultipleRequest in plugins is optimized for batch processing and complex transformations in a server-side context, providing better performance and transactional control than cloud flows.

Q5 Medium

In a canvas app, you want to display data from a SQL Server database. Which connector type provides the best real-time data synchronization?

  • A Import data into Dataverse and use native Dataverse connector ✓ Correct
  • B Premium SQL Server connector with server-side filtering
  • C Use the Power Query Web connector to fetch data via REST API
  • D Standard SQL Server connector with delegation
Explanation

Importing data to Dataverse and using native connectors provides the best real-time synchronization, delegation support, and offline capabilities for canvas apps.

Q6 Medium

You have created a custom PCF component that needs to refresh data when the parent form's field values change. Which property binding method should you implement?

  • A Use the updateView() method to react to context changes including bound field updates ✓ Correct
  • B Bind the component to the form's onchange event through manifest configuration
  • C Create a separate cloud flow to monitor field changes and update the component
  • D Implement the getOutputs() method to return new data on field changes
Explanation

The updateView() method is called when the component's bound properties or context changes, making it the proper lifecycle method for responding to field updates.

Q7 Medium

When deploying solutions across multiple environments, what is the primary risk of using unmanaged solutions in production?

  • A Components in unmanaged solutions can be customized by other developers, making updates difficult to track ✓ Correct
  • B Unmanaged solutions require manual dependency resolution before importing
  • C Unmanaged solutions are automatically deleted after 30 days of inactivity
  • D Unmanaged solutions cannot be exported from production environments
Explanation

Unmanaged solutions allow layers of customization that are difficult to maintain and update, making them unsuitable for production. Managed solutions should be used for production deployments.

Q8 Medium

You need to create a plugin that responds to the Delete message on the Account entity. At which execution stage would you perform calculations that depend on the record's current data before it is deleted?

  • A Pre-operation stage ✓ Correct
  • B Post-operation stage
  • C Pre-validation stage
  • D Pre-delete hook stage
Explanation

Pre-operation stage executes after data retrieval but before deletion, allowing you to access the record's current data and perform calculations. Post-operation executes after deletion when data is already gone.

Q9 Medium

In a Power Automate cloud flow, you want to iterate through a collection and perform an action for each item, but only if the item meets specific criteria. Which action should you use?

  • A Apply to each with a Filter array action before the loop ✓ Correct
  • B Apply to each with a Condition action inside the loop to skip non-matching items
  • C Use a Scope action to isolate items that don't meet criteria
  • D Use a Do until loop with a manual condition check
Explanation

Using Filter array before Apply to each reduces iterations and improves performance. While a Condition inside the loop works, filtering first is more efficient.

Q10 Hard

You are developing a canvas app that requires offline functionality. Which data source approach best supports offline access?

  • A Connect directly to a SharePoint Online list without downloading data
  • B Connect to a SQL Server database through the standard connector
  • C Use the Mobile offline feature with Dataverse tables configured for offline use ✓ Correct
  • D Load data from Dataverse into the app's offline storage through a cloud flow
Explanation

Mobile offline with Dataverse tables is the officially supported approach for offline canvas apps, providing automatic synchronization and conflict resolution.

Q11 Hard

When writing a plugin that uses the IOrganizationService to create records, what must you consider regarding the execution context user?

  • A The plugin executes with the current user's credentials unless you use CreateAsyncRequest
  • B The plugin always executes with the system user credentials regardless of who triggered the action
  • C The plugin executes with the current user's credentials by default, but you can impersonate another user by setting the UserId property ✓ Correct
  • D Plugins cannot access IOrganizationService without impersonation setup
Explanation

Plugins execute in the context of the calling user by default. You can impersonate other users by setting the UserId in the IOrganizationService proxy or using the impersonation syntax in your service calls.

Q12 Medium

You need to implement a solution where users can upload files to SharePoint from a model-driven app. Which approach provides the best integration?

  • A Implement a custom PCF component with built-in file upload capability
  • B Add a notes subgrid and configure file attachments to sync with SharePoint
  • C Use the Notes (Annotation) entity with attachments and configure Sharepoint Document Management ✓ Correct
  • D Create a custom action that calls a cloud flow using the RunFlow action
Explanation

SharePoint Document Management integration with Notes is the native approach that provides folder synchronization, version control, and maintains the relationship between records and documents.

Q13 Medium

When implementing a JavaScript web resource in a model-driven app form, what is the recommended way to access form data safely?

  • A Use formContext object passed to form libraries or Xrm.PageContext for ribbon commands ✓ Correct
  • B Access form data through the global Dynamics object which is always available
  • C Use the ExecutionContext object which contains all form and entity information
  • D Directly access window.parent.Xrm.Page form object methods
Explanation

The formContext passed to form handlers or Xrm.PageContext is the recommended approach as window.parent.Xrm.Page is deprecated, and proper context passing ensures reliability.

Q14 Hard

You are creating a PCF component that needs to display a large dataset with pagination. What performance consideration is most critical?

  • A Implement client-side sorting to avoid server requests for data organization
  • B Implement virtual scrolling to render only visible items and improve rendering performance ✓ Correct
  • C Use the manifest property paging settings to automatically handle pagination in the framework
  • D Load all data upfront and use CSS to hide non-visible items for faster interaction
Explanation

Virtual scrolling significantly improves performance with large datasets by rendering only visible DOM elements. Loading all data upfront would cause performance degradation.

Q15 Medium

In Power Automate, you need to handle errors gracefully when an HTTP action fails. Which configuration should you use?

  • A Use the 'Configure run after' setting on subsequent actions to run even if the HTTP action fails
  • B Add a Terminate action set to 'Failed' after each HTTP action
  • C Wrap HTTP actions in a Scope action and add an error handler to that Scope ✓ Correct
  • D Configure the HTTP action with 'Retry policy' enabled to automatically retry failed requests
Explanation

Using Scope actions with error handling provides robust error management. While retry policies are useful, they should be combined with proper error handlers for comprehensive error management.

Q16 Medium

You need to create a calculated field in Dataverse that sums values from related records. Why would you choose a Rollup column instead of a calculated column?

  • A Calculated columns require manual refreshes while Rollup columns update automatically
  • B Rollup columns are the only option for creating many-to-many relationship calculations
  • C Calculated columns cannot reference related entity data, but Rollup columns can ✓ Correct
  • D Rollup columns execute faster because they run server-side and can use aggregate functions
Explanation

Rollup columns are specifically designed for aggregating data from related records using functions like SUM, AVG, COUNT, whereas calculated columns operate on fields within the same record.

Q17 Hard

When configuring a webhook in Dataverse, what is a critical security consideration?

  • A Dataverse webhooks bypass all firewall rules automatically to ensure delivery
  • B You must validate the webhook signature to ensure requests come from Dataverse, not unauthorized sources ✓ Correct
  • C Webhooks automatically encrypt all data transmitted to external endpoints
  • D Webhooks can only be configured for publicly accessible endpoints without authentication
Explanation

Validating webhook signatures using the X-MS-Dynamics-Webhook-Signature header is essential security practice to verify requests authenticity and prevent unauthorized access.

Q18 Medium

You are developing a model-driven app and need to control which records users can see based on their department. Which security feature provides the best solution?

  • A Set up views with saved filters visible only to specific security roles
  • B Use row-level security (RLS) with business units or custom rules to restrict record access ✓ Correct
  • C Configure field-level security to hide sensitive fields from non-managers
  • D Implement a cloud flow that hides records in the UI based on user roles
Explanation

Row-level security (RLS) is the proper mechanism for controlling data access at the record level based on user attributes. Views and cloud flows are not security boundaries.

Q19 Hard

When developing a canvas app that connects to multiple data sources, what is the primary benefit of using a Dataverse table as an intermediary data source?

  • A You can replicate external data in Dataverse and benefit from offline sync, search, and standard features like audit logs ✓ Correct
  • B Dataverse tables are faster to query than external data sources
  • C Dataverse automatically synchronizes changes from all external sources without manual configuration
  • D Using Dataverse eliminates the need to set up authentication for external connectors
Explanation

Using Dataverse as an intermediary allows you to leverage platform features like offline sync, full-text search, audit trails, and reduce connector dependencies.

Q20 Medium

You have a plugin that performs a long-running operation synchronously. What is the best approach to improve user experience?

  • A Move the logic to a cloud flow triggered by the plugin and execute it asynchronously
  • B Split the operation into multiple smaller plugins that execute in sequence
  • C Increase the plugin timeout setting in the platform configuration
  • D Convert the plugin to run asynchronously using the AsyncOperation entity ✓ Correct
Explanation

Using AsyncOperation (async plugins) allows long-running operations to execute without blocking the user interface. The default timeout increase is not recommended and doesn't improve UX.

Q21 Medium

In a Power Automate cloud flow, you need to process data conditionally based on multiple criteria. Which structure provides the best readability and maintainability?

  • A Use nested Condition actions for each criteria check
  • B Combine Condition and Switch actions where Condition handles complex logic and Switch handles simple branching ✓ Correct
  • C Use Scope actions to organize conditional logic into separate sections
  • D Use a Switch action with complex expression conditions for each case
Explanation

Using Condition for complex multi-criteria logic and Switch for simpler multiple-case scenarios provides optimal readability. Overly nested Conditions reduce maintainability.

Q22 Hard

You are implementing a solution that requires sending real-time notifications to users when specific records are updated. Which approach is most suitable?

  • A Configure the Notification entity with a cloud flow to send emails when records change
  • B Implement a plugin that creates notification records and a PCF component that polls the database
  • C Use Dataverse webhooks to trigger a cloud flow that sends real-time notifications via Teams or Power Apps notifications ✓ Correct
  • D Create a custom service that continuously monitors the audit log and sends notifications based on changes
Explanation

Webhooks provide event-driven, real-time notification capabilities that are more efficient than polling. Combining webhooks with cloud flows and native notification channels is the recommended approach.

Q23 Easy

When creating a custom Dataverse table, what is the primary advantage of enabling the 'Audit' setting?

  • A Audit prevents users from modifying records unless they have explicit Audit permissions
  • B Audit enables encryption for all data stored in the table to meet security requirements
  • C Audit automatically backs up table data to prevent accidental deletion
  • D Audit tracks all create, update, and delete operations, providing a compliance and troubleshooting record ✓ Correct
Explanation

Enabling Audit creates a permanent log of data changes for compliance, troubleshooting, and analysis purposes. It does not provide backup, encryption, or access control.

Q24 Hard

You are developing a model-driven app with a complex business process flow (BPF) that requires conditional stages. How should you implement this?

  • A Create multiple BPFs and use JavaScript to switch between them based on conditions
  • B Implement conditional logic in plugins to automatically move records through appropriate BPF stages
  • C Create separate BPFs for each workflow path and manually move records between them using cloud flows
  • D Use a single BPF with branching based on the value of a specific field at each stage ✓ Correct
Explanation

BPF branching based on field values is the native feature for conditional stage progression. This provides the best user experience and maintainability without complex workarounds.

Q25 Hard

When implementing a PCF component that uses external libraries, what must you do to ensure proper encapsulation and prevent namespace conflicts?

  • A Bundle all external libraries within the component using webpack or similar bundlers ✓ Correct
  • B Import libraries using global scope to ensure they are available throughout the application
  • C Use module resolution and proper import statements to encapsulate dependencies within the component
  • D Register libraries in the manifest file with specific version numbers
Explanation

Bundling external libraries within the PCF component using tools like webpack ensures encapsulation, prevents namespace conflicts, and makes the component self-contained and portable.

Q26 Hard

You need to implement a solution that syncs data bidirectionally between Dataverse and an external system. What is the critical consideration for handling conflicts?

  • A Always prioritize Dataverse as the source of truth and overwrite external system changes
  • B Create duplicate records in both systems to preserve all changes and let users manually merge them
  • C Implement timestamp-based or version-based conflict resolution logic that determines which system's data wins ✓ Correct
  • D Configure cloud flows to send conflict notifications but let the external system make final decisions
Explanation

Implementing proper conflict resolution using timestamps, versions, or business rules ensures data consistency. Always having one system override creates data loss risks.

Q27 Easy

You are building a model-driven app that requires custom business logic. Which of the following is the primary method to execute server-side code in the Power Platform?

  • A Power Automate cloud flows
  • B Custom connectors to external APIs
  • C Plug-ins registered on the server ✓ Correct
  • D JavaScript web resources in the form
Explanation

Plug-ins are the primary mechanism for executing server-side business logic in Dataverse. They execute in the server process and have access to the organization service for data operations.

Q28 Medium

You need to create a plug-in that listens for create and update events on the Account entity. What is the correct approach to register this plug-in for both events?

  • A Create two separate plug-in classes, each handling one message type
  • B Register the same plug-in twice, once for Create and once for Update message
  • C Use a Power Automate trigger instead, as plug-ins only support one message type per registration
  • D Register a single plug-in with logic inside to handle both Create and Update messages ✓ Correct
Explanation

A single plug-in can be registered multiple times for different messages and events. The plug-in's Execute method receives the message context, allowing you to branch logic based on the message type.

Q29 Medium

When implementing a plug-in that performs a Create operation on a related entity, which execution stage should you use to ensure the parent record is created first?

  • A Post-operation stage ✓ Correct
  • B Pre-validation stage
  • C Asynchronous stage
  • D Pre-operation stage
Explanation

The post-operation stage executes after the database transaction completes. This ensures the parent record exists in Dataverse before creating related records in your plug-in logic.

Q30 Medium

You are developing a canvas app that requires real-time data from Dataverse. Which connector option provides the most efficient two-way data binding for frequently changing records?

  • A Implement the Patch() function in response to a Button click
  • B Create a Power Automate flow that updates the canvas app variable collection every 30 seconds
  • C Use the Dataverse connector with delegation and automatic refresh on form submission ✓ Correct
  • D Use a Timer control with Refresh() function every second
Explanation

The Dataverse connector in Power Apps canvas apps supports efficient querying with delegation and can automatically refresh data. This approach is more efficient than polling with timers or pushing updates through flows.

Q31 Hard

A custom JavaScript function in a model-driven app form needs to update a field without triggering the form's OnSave event. What is the correct approach?

  • A Use formContext.data.setDirty(false) after making changes to prevent triggering OnSave
  • B Use formContext.getAttribute('fieldname').setValue() which never triggers OnSave
  • C Fields updated programmatically via setValue() will mark the form as dirty and trigger OnSave on save ✓ Correct
  • D Use the Web API directly to update the record without loading the form context
Explanation

When you use setValue() on a form field, it marks the form as dirty. The form's OnSave event will trigger when the user saves. To prevent unwanted saves, you should conditionally execute your OnSave logic or use setDirty(false) before the user save action.

Q32 Medium

You are implementing a solution where a plug-in needs to prevent a record deletion under certain conditions. Which approach is correct?

  • A Return false from the plug-in Execute method to cancel the operation
  • B Throw an InvalidPluginExecutionException in the pre-operation stage with a user-friendly message ✓ Correct
  • C Use the IOrganizationService to restore the record after deletion in the post-operation stage
  • D Create a workflow that runs after deletion and recreates the record with original values
Explanation

To prevent a record deletion, throw an InvalidPluginExecutionException in the pre-operation stage. This cancels the operation before the database transaction and displays the exception message to the user.

Q33 Hard

When developing a canvas app that uses Dataverse, you need to filter records based on a user's security role. What is the best approach to implement row-level security?

  • A Use plug-ins to inject security filtering into all queries from the canvas app
  • B Implement business unit ownership and team permissions in Dataverse, then use those filters in Power Apps ✓ Correct
  • C Create separate canvas apps for each security role with different data sources
  • D Filter records in the Power Apps formula using User().Email field to determine visible records
Explanation

Dataverse security roles, business unit ownership, and team permissions provide declarative row-level security. These permissions are enforced at the platform level and respected by Power Apps connectors without additional code.

Q34 Medium

You are creating a custom page in a model-driven app using Power Fx. How should you retrieve data from Dataverse most efficiently?

  • A Use the Search() function to query all tables and filter in the app
  • B Use the Filter() function with CdsDataSource to query Dataverse with server-side filtering ✓ Correct
  • C Create a dedicated Power Automate flow to retrieve and store data in a static collection
  • D Implement a plug-in that returns cached data to avoid repeated queries
Explanation

The Filter() function with a CdsDataSource (Dataverse source) applies filtering at the server level through delegation, which is more efficient than retrieving all records and filtering client-side.

Q35 Hard

A plug-in is throwing an exception that is crashing the entire platform. You need to update the plug-in code to handle errors gracefully. What is the best practice?

  • A Disable the plug-in entirely and use a Power Automate flow instead
  • B Wrap all code in try-catch blocks and log errors using ITracingService, but allow critical exceptions to propagate
  • C Use try-catch to log errors with ITracingService and throw InvalidPluginExecutionException only for user-facing business rule violations ✓ Correct
  • D Catch all exceptions and silently continue execution to prevent platform crashes
Explanation

Best practice is to use ITracingService for detailed logging, then throw InvalidPluginExecutionException only for intentional business rule violations that should alert users. Unhandled exceptions in plug-ins should be fixed, not silently ignored.

Q36 Hard

You need to implement a bulk data operation that creates 10,000 records in Dataverse. Which approach is most efficient and follows best practices?

  • A Create a loop in a plug-in that calls Create for each record using IOrganizationService
  • B Import data using Power Query in Power BI, then sync back to Dataverse
  • C Use a canvas app with a Timer control to create records one at a time to avoid throttling
  • D Use the BatchRequest class with ExecuteMultiple to group operations and reduce round-trips ✓ Correct
Explanation

ExecuteMultiple with BatchRequest is the recommended approach for bulk operations. It reduces network round-trips and is significantly faster than individual service calls while respecting platform throttling limits.

Q37 Medium

When configuring a canvas app to work offline, what is the primary limitation you must consider?

  • A Offline mode only works for Dataverse data sources, not SharePoint or SQL databases
  • B All data must be loaded into the app before going offline; real-time updates are not available offline ✓ Correct
  • C Offline mode requires additional licensing beyond the standard Power Apps license
  • D Users must manually sync data by clicking a Sync button; changes do not sync automatically
Explanation

Canvas apps in offline mode require data to be pre-loaded into collections. Once offline, users cannot query new data or receive real-time updates. Changes are synced when connectivity is restored.

Q38 Hard

You are implementing a solution where a model-driven app form must display a custom control based on a plug-in calculation. What is the correct sequence?

  • A Custom control triggers the plug-in synchronously and waits for the result before rendering
  • B Custom control reads directly from the plug-in context and renders based on plug-in state
  • C Plug-in executes and sets a field value; the custom control monitors that field for changes and updates the UI ✓ Correct
  • D Plug-in executes before the form loads; custom control reads the calculated field value from Dataverse on form load
Explanation

Plug-ins run server-side and can set field values. Custom controls can bind to form fields and listen for OnChange events, allowing them to update the UI when plug-in calculations change field values.

Q39 Medium

A canvas app requires a lookup field that shows records from a related table filtered by the current user's department. How should you configure the data source?

  • A Use a Lookup control and filter the source with User().Department in the Items property
  • B Use a Combo Box control with a Filter formula that compares the lookup table's department field to User().Department ✓ Correct
  • C Create a relationship in Dataverse and configure the Lookup control to use the related table filtered by business unit ownership
  • D Implement a Power Automate flow that queries the lookup table and updates a collection in the canvas app on every form load
Explanation

A Combo Box control with a Filter formula allows you to filter options dynamically based on the current user's department. This provides flexibility and real-time filtering without pre-loading all data.

Q40 Hard

You are developing a plug-in that uses the RetrieveMultiple message to fetch records with complex filtering logic. What is the primary consideration for performance?

  • A Execute separate RetrieveMultiple calls for each filter condition to ensure accurate results
  • B Cache the result in a static variable to avoid repeated queries with the same filter criteria
  • C Use ColumnSet with All columns to ensure all data is available for filtering in the plug-in
  • D Specify only required columns in ColumnSet and use QueryExpression with filters at the server level instead of filtering in code ✓ Correct
Explanation

To optimize plug-in performance, use QueryExpression filters that execute server-side, and specify only necessary columns in ColumnSet. This reduces network bandwidth and improves query efficiency compared to client-side filtering.

Q41 Medium

A model-driven app's form contains a subgrid that must refresh when a related record is updated. Which event handler should you implement?

  • A OnChange event of a hidden control that tracks related record updates
  • B OnLoad event of the main form to refresh the subgrid
  • C OnSave event of the main form to refresh the subgrid after saving ✓ Correct
  • D A plug-in that sends a notification to refresh the subgrid when related records change
Explanation

Subgrids should be refreshed in the OnSave event handler using formContext.getControl('subgridname').refresh(). This ensures the subgrid displays the latest data after the main form is saved and related records may have been updated.

Q42 Medium

You need to create a reusable Power Fx component in a canvas app that accepts input parameters and returns calculated values. What is the correct approach?

  • A Use a Power Automate flow as a shared action that other canvas apps can call with parameters
  • B Build a reusable component with Input and Output properties defined in the component's advanced settings ✓ Correct
  • C Create a Power Fx formula in a gallery and share it across screens using global variables
  • D Create a table in Dataverse to store component definitions and query it from multiple canvas apps
Explanation

Canvas app components can have Input properties (for receiving parameters) and Output properties (for returning values). This is the standard way to create reusable, encapsulated logic within Power Apps.

Q43 Medium

A plug-in for the Update message needs to compare the old and new values of a field to trigger custom logic. How should you access the pre-image data?

  • A Use inputParameters['Target'] to get the new values and check the database for old values
  • B Use the Audit table in Dataverse to retrieve historical field values after the update completes
  • C Register the plug-in with a pre-image and access it via preEntityImages in the PluginExecutionContext ✓ Correct
  • D Call RetrieveMultiple before the update to capture the old values in the plug-in logic
Explanation

Pre-images are snapshots of entity data captured before the operation executes. Register the plug-in with a pre-image, then access it via context.PreEntityImages to compare old and new values efficiently.

Q44 Medium

You are implementing a canvas app with multiple screens that share common data. What is the best practice for state management?

  • A Use App.OnStart to initialize collections that persist across screen navigation and support data sharing ✓ Correct
  • B Pass data between screens using Navigation parameters and local variables on each screen
  • C Use global variables to store all shared data and access them across screens
  • D Create a Dataverse table to store temporary app state and query it on each screen
Explanation

Collections initialized in App.OnStart persist throughout the app's lifecycle and are accessible from all screens. This is the standard approach for managing shared state in canvas apps without requiring repeated data queries.

Q45 Hard

A custom control in a model-driven app form must handle a large dataset and respond quickly to user interactions. What optimization technique should you implement?

  • A Implement virtual scrolling or pagination to load only visible data and defer loading of off-screen items ✓ Correct
  • B Use a Power Automate flow to pre-cache all data in a static collection before the form loads
  • C Disable all validation logic to improve rendering speed and rely on server-side validation instead
  • D Load all data into the control during initialization using RetrieveMultiple with All columns
Explanation

Virtual scrolling or pagination loads only the visible portion of a large dataset, significantly improving performance and responsiveness. This technique allows custom controls to handle large datasets efficiently without loading everything upfront.

Q46 Medium

You are debugging a plug-in that is executing in an unexpected order relative to other plug-ins on the same message. What is the primary factor that determines plug-in execution order?

  • A The alphabetical order of plug-in names as displayed in the Plug-in Registration Tool
  • B The execution stage (pre-operation vs. post-operation) and the Execution Order (rank) value set during registration ✓ Correct
  • C The Depth of Execution setting, which prevents infinite recursion and determines order automatically
  • D The order in which plug-ins are created in the organization
Explanation

Plug-in execution order is determined first by stage (pre-operation before post-operation) and then by the Execution Order (rank) value assigned during registration. Lower rank values execute first within the same stage.

Q47 Medium

A canvas app must integrate with an external API that returns data in a non-standard format. What is the most flexible approach?

  • A Create a custom connector that transforms the API response format into standard Power Apps tables
  • B Build a Power Automate flow that reformats the API data and returns it to the canvas app as a structured object ✓ Correct
  • C Use the HTTP connector and manually parse the JSON response with Power Fx formulas like ParseJSON()
  • D Import the API data into a Dataverse table and query it instead of calling the API directly
Explanation

A Power Automate flow can transform external API data into a structured format that Power Apps expects. The flow acts as a middleware layer, providing flexibility and reusability across multiple canvas apps.

Q48 Hard

When implementing a model-driven app solution with multiple environments, what is the critical consideration for plug-in deployment?

  • A Plug-in code must include environment detection logic to behave differently in development versus production
  • B All plug-in registrations must be manually re-created in each environment; they cannot be transported via solutions
  • C Plug-in assemblies compiled in development must be recompiled for each environment to match environment-specific settings
  • D Plugin assemblies are binaries that execute the same code regardless of environment; deploy the same assembly across all environments ✓ Correct
Explanation

Plug-in assemblies are compiled binaries that execute identically across environments. The same assembly can be deployed to development, test, and production. Solution export/import handles plugin registration configuration across environments.

Q49 Hard

You are developing a solution where a canvas app must support both online and offline scenarios with data synchronization. What is the correct approach?

  • A Use a custom connector that queues offline requests and processes them when the app detects connectivity
  • B Implement a Power Automate flow triggered on app resume to manually sync offline changes back to Dataverse
  • C Use the Dataverse connector with offline mode enabled; the app automatically syncs changes when connectivity is restored ✓ Correct
  • D Create two separate canvas apps: one for online with real-time Dataverse connectivity, and one for offline with local collections
Explanation

Canvas apps with Dataverse connector can be configured for offline mode, which automatically caches data and syncs changes when connectivity is restored. This provides seamless offline-to-online transitions without additional code.

Q50 Hard

A plug-in that imports data from an external system needs to handle records that already exist in Dataverse. What is the best approach to avoid duplicates?

  • A Query Dataverse for matching records using a unique identifier, then update if found or create if not found ✓ Correct
  • B Always create new records and let the user manually delete duplicates after import
  • C Configure duplicate detection rules and rely on Dataverse to automatically merge duplicate records during import
  • D Use the CreateMultiple message with a flag to ignore duplicate detection
Explanation

The most reliable approach is to query Dataverse for existing records using a business key or unique identifier, then perform an upsert operation (update if found, create if not). This prevents duplicates and maintains data integrity.

Q51 Medium

You need to implement a calculation in a model-driven app form that updates every time a dependent field changes. What is the recommended approach?

  • A Implement a plug-in on the Update message that recalculates the field after every change
  • B Implement an OnChange event handler on the dependent field and update the calculation field using setValue() ✓ Correct
  • C Use a calculated column in Dataverse to compute the value automatically
  • D Create a rollup column that aggregates related records and refreshes automatically
Explanation

OnChange event handlers on dependent fields provide real-time client-side calculations. This approach is efficient, provides immediate visual feedback, and doesn't require server round-trips for simple calculations.

Q52 Hard

A custom canvas app control must display real-time data from Dataverse that updates every few seconds. What is the most efficient approach that minimizes API calls?

  • A Use a Timer control with a 1-second interval to refresh data from Dataverse continuously
  • B Load all historical data into a collection and use a Timer to refetch the entire dataset every 5 seconds
  • C Use a Power Automate cloud flow with a recurrence trigger to push data updates to the canvas app variable
  • D Implement a web socket connection or use Dataverse events to receive change notifications and refresh only when data changes ✓ Correct
Explanation

Event-driven updates are more efficient than polling. Power Apps can leverage Dataverse change notifications or web socket connections to trigger refreshes only when data actually changes, reducing unnecessary API calls and improving performance.

Q53 Medium

You are creating a model-driven app and need to customize the ribbon to add a custom button that calls a JavaScript function. Which file should you modify to add ribbon customizations?

  • A The app.config.json file
  • B The ribbon XML file in the solution
  • C The customizations.xml file within the solution package ✓ Correct
  • D The form JavaScript file directly
Explanation

Ribbon customizations are defined in the customizations.xml file contained within a solution package. This XML file controls ribbon button definitions, command rules, and display rules for model-driven apps.

Q54 Medium

You need to implement a plug-in that executes during the Create message of an Account entity in Dynamics 365. At which stage should the plug-in be registered to access the pre-image data before the database transaction?

  • A Stage 10 (Pre-operation) ✓ Correct
  • B Stage 30 (Post-operation Deprecated)
  • C Stage 20 (Post-operation)
  • D Stage 40 (Post-operation Asynchronous)
Explanation

Stage 10 (Pre-operation) executes before the database transaction and allows access to the pre-image data. This is the correct stage to intercept and modify data before it is committed to the database.

Q55 Medium

You are developing a Power Apps canvas app that needs to authenticate to an external REST API protected by OAuth 2.0. What is the recommended approach to securely handle the authentication tokens in Power Apps?

  • A Store tokens in global variables and use them directly in API calls
  • B Hardcode the tokens in the app formulas for immediate access
  • C Implement token storage in the browser's local storage for persistence across sessions
  • D Create a custom connector that handles OAuth 2.0 authentication and token management automatically ✓ Correct
Explanation

Custom connectors in Power Apps handle OAuth 2.0 authentication and manage token lifecycle automatically, providing a secure and maintainable approach. This eliminates the need to manually handle sensitive credentials in the app.

Q56

You are configuring a cloud flow in Power Automate to process records created in Dataverse. The flow must execute different logic based on the account type. Which trigger type should you use for optimal performance with near real-time processing?

  • A Custom polling trigger using a HTTP request action
  • B When a row is created or modified trigger (Dataverse connector) ✓ Correct
  • C Batch processing trigger with manual interval selection
  • D Scheduled cloud flow running every 5 minutes
Explanation

The 'When a row is created or modified' trigger from the Dataverse connector provides near real-time, event-driven execution without polling overhead, making it the optimal choice for processing Dataverse records efficiently.

Q57 Hard

You are building a plug-in that needs to retrieve related records from a child entity when a parent Account record is updated. Which approach provides the best performance when dealing with large datasets?

  • A Use RetrieveMultiple with a query expression and apply paging to retrieve records in batches ✓ Correct
  • B Use multiple Retrieve requests in a loop for each related record ID
  • C Retrieve all child records at once using RetrieveMultiple without pagination
  • D Query the database directly through SQL Server connections within the plug-in
Explanation

Using RetrieveMultiple with query expressions and implementing paging allows efficient retrieval of large datasets by processing records in manageable batches, reducing memory consumption and improving performance.

Q58 Medium

You have created a model-driven app with multiple views. Users report that the main grid view is loading very slowly. What is the most effective optimization technique to improve load performance?

  • A Reduce the number of columns displayed in the view and remove unnecessary calculations or rollup fields ✓ Correct
  • B Switch all users to use Quick Find instead of the default view
  • C Increase the server-side cache timeout values in the web.config file
  • D Convert the model-driven app to a canvas app to eliminate grid rendering overhead
Explanation

Reducing displayed columns and removing unnecessary calculated or rollup fields decreases the data payload and processing overhead, resulting in faster view rendering. This is a direct and effective optimization technique.

Q59 Medium

You are implementing early-bound classes in a console application that interacts with Dataverse. Which NuGet package should you install to generate these classes from your Dynamics 365 environment?

  • A Microsoft.Dynamics365.SDK with the Visual Studio extension only
  • B Microsoft.PowerPlatform.Dataverse.Client package directly without additional tools
  • C EntityFramework.Dynamics365 with the automated mapper
  • D Microsoft.Xrm.Sdk package and run the CrmSvcUtil.exe code generation tool ✓ Correct
Explanation

The Microsoft.Xrm.Sdk NuGet package is the foundational SDK, and the CrmSvcUtil.exe tool is used to generate early-bound entity classes from your Dataverse metadata. This is the standard approach for creating strongly-typed classes.

Q60 Hard

In a Power Apps canvas app, you need to display data from a Dataverse table and allow users to filter records based on multiple criteria. The filter logic is complex with nested AND/OR conditions. What is the recommended data retrieval approach?

  • A Implement a custom Power Automate flow that returns pre-filtered data to reduce client-side processing ✓ Correct
  • B Use SearchBox controls and combine Filter, Search, and Sort functions for better user experience
  • C Use the Filter function directly in the gallery's Items property with deeply nested formulas
  • D Create a server-side model-driven view with the filtering logic and reference it in the canvas app
Explanation

Delegating complex filtering logic to a Power Automate flow reduces client-side processing, improves performance, and makes the filtering logic maintainable and reusable. This approach is especially effective for complex nested conditions.

Q61 Hard

You are troubleshooting a Power Automate cloud flow that intermittently fails when calling a Dataverse action. The error indicates a timeout after 120 seconds. What is the most appropriate solution to resolve this issue?

  • A Replace the Dataverse action with multiple individual Retrieve/Update operations instead
  • B Implement the action call in a child flow with retry policies and appropriate timeout handling ✓ Correct
  • C Convert the cloud flow to a scheduled flow running at off-peak times to reduce server load
  • D Increase the HTTP request timeout setting in the flow connector configuration to 600 seconds
Explanation

Child flows allow independent timeout and retry policy configuration. By implementing the action in a child flow, you can set appropriate timeout values and implement retry logic to handle intermittent timeouts gracefully.

Q62 Medium

You have deployed a solution containing a plug-in to a production environment. The plug-in performs complex calculations on Account records and is causing transaction timeout errors. What is the best practice to optimize plug-in performance?

  • A Move non-critical business logic outside the plug-in synchronous execution path to an asynchronous workflow or Power Automate cloud flow ✓ Correct
  • B Increase the organization's transaction timeout setting to allow longer plug-in execution times
  • C Rewrite the plug-in using parallel processing with multiple threads within the plug-in assembly
  • D Disable all form validations to reduce overhead on the plug-in execution path
Explanation

Moving non-critical logic to asynchronous processes (workflows or Power Automate) keeps the synchronous plug-in execution lean and responsive, preventing timeout errors while maintaining functionality. This is a recommended best practice for performance optimization.

Ready to test your knowledge?

You've reviewed all 62 questions. Take the interactive practice exam to simulate the real test environment.

▶ Start Practice Exam — Free