Q001 - Question
A developer must register a plug-in that runs through a system job after the operation completes. Which registration meets the requirement?
Domain: Create a technical design (10–15%) Type: Single choice
- A. Asynchronous mode in the Pre-Validation stage
- B. Asynchronous mode in the Pre-Operation stage
- C. Synchronous mode in the PostOperation stage
- D. Asynchronous mode in the PostOperation stage
D is correct.
Explanation: Asynchronous plug-ins are executed via a system job after the operation completes. Dataverse allows asynchronous registration only for the PostOperation stage. Registering in that stage with asynchronous mode meets the requirement that the logic run after the operation without making the operation wait for the logic to finish.
A is incorrect: Asynchronous plug-ins can only be registered for the PostOperation stage, so Pre-Validation registration is not available even though the asynchronous mode is correct.
B is incorrect: Pre-Operation supports synchronous logic that changes values before save, but asynchronous plug-ins cannot be registered for that specific execution pipeline stage.
C is incorrect: Synchronous plug-ins run immediately and the entire operation waits until they complete, which does not match the system job that runs after completion.
Q002 - Question
Two managed solutions are installed in a Dataverse environment. Solution B was installed after Solution A, and both define the same component differently. Users see the behavior from Solution B. What happens if you uninstall Solution B?
Domain: Build Power Platform solutions (10–15%) Type: Single choice
- A. The managed solution below it takes effect, which is Solution A.
- B. The system solution defaults apply, even though Solution A remains installed.
- C. The unmanaged layer takes effect because it holds the previous customizations.
- D. Both solutions are removed because they define the same component.
A is correct.
Explanation: In Dataverse, managed layers stack in their installation order, meaning the last one installed sits above the earlier ones. When you uninstall Solution B, the managed solution directly below it takes effect, which is Solution A in this scenario. System defaults apply only after all managed solutions are uninstalled.
B is incorrect: System solution defaults apply only when you uninstall all managed solutions, and Solution A is still installed in this environment.
C is incorrect: The unmanaged layer holds unmanaged solutions and impromptu customizations, and it is not the layer directly beneath a managed solution.
D is incorrect: Uninstalling one managed solution does not remove another; the solution below it takes effect, so Solution A remains installed and active.
Q003 - Question
You must measure how long OnStart takes for a canvas app and avoid influence from data caching. You add Trace() calls before and after the ClearCollect formula. Which approach gives reliable Monitor results?
Domain: Implement Power Apps improvements (5–10%) Type: Single choice
- A. Rerun OnStart manually from Power Apps Studio, then open Monitor
- B. Rerun OnVisible on the first screen several times, then compare the traces
- C. Enable Debug published app, save, publish, and launch Monitor from make.powerapps.com
- D. Use browser developer tools to capture the control names and formulas
C is correct.
Explanation: A cold start keeps captured events free of data caching effects. To ensure a cold start, you must enable the Debug published app setting, save, publish, and launch Monitor from make.powerapps.com. The custom Trace messages will then accurately mark the start and end of the OnStart processing in the event log.
A is incorrect: Manually rerunning OnStart from within Power Apps Studio can introduce data caching, which negatively influences the captured events and invalidates the test.
B is incorrect: Rerunning OnVisible manually from within the studio also risks data caching influence and does not provide a cold start of the published app.
D is incorrect: Browser developer tools show similar event information but lack specific app context details such as the control name and the exact formula.
Q004 - Question
A form must make a column required based on the address of an account's primary contact. The rule must also be evaluated when the user saves the form. Which implementation should you choose?
Domain: Extend the user experience (10–15%) Type: Single choice
- A. A form-scoped business rule that runs on field change
- B. A client script that uses the Web API and runs on the Save event
- C. A table-scoped business rule that references the related table
- D. A calculated column that updates instantly as the user edits the form
B is correct.
Explanation: Referencing data in a related table, such as the address of a primary contact, requires using a client script and the Web API. Furthermore, business logic that must run on the Save form event also requires a client script. A single script meets both of these requirements.
A is incorrect: Business rules run on form load and field change unless the scope is table, and they cannot reference related table data.
C is incorrect: A table-scoped rule applies logic on the backend, but referencing related table data still requires using a client script and the Web API.
D is incorrect: Calculated columns run logic on retrieve, so client-side changes do not appear until the form refreshes. They do not update instantly.
Q005 - Question
You secure a custom service on Azure App Service with Microsoft Entra ID and a custom connector. You registered both apps, delegated permissions, entered the client ID, secret, and resource URL, and added the redirect URLs. The service uses Cross-Origin Resource Sharing (CORS). What should you do next?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Add the service domain to the redirect URLs on the connector app registration
- B. Change the connector authentication type to Basic authentication
- C. Remove the resource URL from the connector definition
- D. Allow list the Azure API Management domains, usually azure-apim.net, for CORS on the service
D is correct.
Explanation: When the service uses Cross-Origin Resource Sharing, the Azure API Management domains, usually azure-apim.net, should be on its CORS allow list. The other Microsoft Entra ID steps are already done, so the remaining documented step is the CORS setting on the service. This lets the service accept requests that come through the connector.
A is incorrect: Redirect URLs are added to the connector app registration, not to the service, and that step is already complete here.
B is incorrect: Basic authentication would remove Microsoft Entra ID identity pass-through and does not address the CORS configuration on the service.
C is incorrect: The resource URL is a required connector parameter for the service. Removing it does not configure CORS on the service.
Q006 - Question
You registered a Service Bus step that runs when an account row is created. You created an account to test it. You need to confirm that Dataverse started the integration step and to read error details if it failed. Where should you check?
Domain: Develop integrations (5–10%) Type: Single choice
- A. The Shared access policy in the Azure portal
- B. The System Jobs view in the Admin center
- C. The Message Format setting on the endpoint
- D. The Plug-in Registration Tool connection string
B is correct.
Explanation: The System Jobs view in the Admin center shows whether the integration step ran successfully after you create an account. A successful run displays a Status Reason of Succeeded. If the step fails, you must open the specific System Job record to view the detailed error information and troubleshoot the integration run.
A is incorrect: The Shared access policy supplies the connection string credentials for Dataverse. It doesn't show whether a step ran or failed.
C is incorrect: The Message Format setting specifies JSON, XML, or .NETBinary for the message. It doesn't report step run status or errors.
D is incorrect: The connection string only gives Dataverse access to the namespace. It doesn't display integration run results or error information.
Q007 - Question
Two synchronous plug-ins are registered on the Update message for the same pipeline stage. The validation plug-in must run before the formatting plug-in, and both must stay in that stage. What should you configure?
Domain: Create a technical design (10–15%) Type: Single choice
- A. Register the validation plug-in as asynchronous so it starts earlier.
- B. Set the execution order attribute for each step in the Plug-in Registration tool.
- C. Register the plug-ins on different messages, such as Create and Update.
- D. Rely on the sequence in which the plug-ins were registered.
B is correct.
Explanation: When multiple synchronous plug-ins are registered for the same pipeline stage, the execution order attribute determines which one runs first. Set this attribute for each step in the Plug-in Registration tool so the validation plug-in has the earlier order while both remain in the same stage.
A is incorrect: Asynchronous plug-ins are dispatched as a system job and run after the operation completes, so this makes the plug-in run later, not earlier.
C is incorrect: Messages represent the type of operation, so changing the message changes when the logic runs, not the order of plug-ins on the same message.
D is incorrect: Registration sequence is not the documented control. The execution order attribute, set in the Plug-in Registration tool, determines which synchronous plug-in runs first.
Q008 - Question
A parent managed solution is in production. A team must add one new component and later remove an obsolete component. They plan to use a patch solution for both changes. Which statement correctly describes the result?
Domain: Build Power Platform solutions (10–15%) Type: Single choice
- A. The patch can add the component and delete the obsolete one.
- B. The patch replaces the parent solution and removes its layer.
- C. The patch can add the component but can't delete components.
- D. The patch is placed below the parent solution when imported.
C is correct.
Explanation: A patch solution contains only the changes for a parent-managed solution, such as adding or editing components and assets. While patches are useful for making small updates like hotfixes, you cannot delete components with a patch. The team must use a different update method to remove the obsolete component.
A is incorrect: A patch solution can add or edit components, but the platform strictly restricts you from deleting existing components with a patch.
B is incorrect: A patch contains only specific changes and is layered on top of the parent solution rather than completely replacing the parent layer.
D is incorrect: When patches are imported into a Dataverse environment, they are layered on top of the parent solution, not placed below it.
Q009 - Question
A form adds a Desk row and includes the many-to-many Desk Features field. The combo box works, but submitting the form returns an error. You want the desk and its feature associations to be created. What should you do?
Domain: Implement Power Apps improvements (5–10%) Type: Single choice
- A. Set the card DisplayMode to View and submit the form
- B. Clear the Update property, save the selection to a collection, submit, then relate the saved features
- C. Replace the Items property with Filter() on the Desks table
- D. Relate the features before submitting the form without saving the selection
B is correct.
Explanation: Clearing the Update property allows the form to submit, but it does not automatically create the relationships. Saving the combo box selection to a collection first preserves the data, because form submission resets the fields. You can then use the saved collection to establish the relationship.
A is incorrect: View mode prevents editing. The edit capability requires the DisplayMode property set to Edit, and this change does not fix the form submit error.
C is incorrect: The Items property must use the Choices() function for the table on the other side of the relationship to resolve the initial control error.
D is incorrect: The new desk row does not exist until the form is submitted, and the form submission resets the fields and loses the selected values.
Q010 - Question
You built the EditablePCF component. Users edit the Name value and select Save, but the host app never receives the new value. The textbox value is copied to the name variable in buttonClick. Which call must run so the framework retrieves the change?
Domain: Extend the user experience (10–15%) Type: Single choice
- A. updateView
- B. notifyOutputChanged
- C. destroy
- D. init
B is correct.
Explanation: The buttonClick method copies the textbox value to the name variable and then calls the notifyOutputChanged method. This callback alerts the framework that the control has new outputs ready to be retrieved asynchronously. The framework can then retrieve them through the getOutputs method and push the updated value to the host app.
A is incorrect: The updateView method handles updates coming from the host app into the component, not changes pushed from the component to the host.
C is incorrect: The destroy method only removes the event listener during cleanup and does not report output changes to the framework.
D is incorrect: The init method runs once to set up the component and create its elements, so it cannot report later user edits.
Q011 - Question
A custom connector and a cloud flow that uses it are developed in one environment. You must move both to a test environment as part of the application life cycle. Test users must use their own connection there. What should you do?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Include the connection in the solution so it is imported with the connector
- B. Share the connector on the Share tab with the test users before import
- C. Include a connection reference in the solution and provide a connection for it during import
- D. Delete the connector in the source environment so its connections move with it
C is correct.
Explanation: Connections can't be included in a solution. A connection reference can be included, and it points to a connection outside the solution. During import to the target environment, the user is prompted to provide a connection, and can create one if needed. The solution's apps and flows then use that connection.
A is incorrect: Connections can't be within a solution. Only a connection reference can be included, which points to a connection outside the solution.
B is incorrect: Sharing applies to standalone connectors. Access to connectors and connection references in solutions is controlled by Dataverse role-based security instead of sharing.
D is incorrect: Deleting a shared connector deletes all associated connections. It does not move connections to another environment.
Q012 - Question
A company must call an existing third-party Web API during account creation. The entire transaction must fail unless the external service processes the payload successfully. The API doesn't use Shared Access Signature authentication. Which integration method should you register?
Domain: Develop integrations (5–10%) Type: Single choice
- A. A webhook
- B. A Service Bus queue endpoint
- C. A Service Bus endpoint with multiple subscribers
- D. An Event Hubs endpoint
A is correct.
Explanation: Webhooks are the correct choice when synchronous processing is required, when the whole transaction must fail unless the external service succeeds, and when a third-party Web API already exists. Furthermore, webhooks support header and query string authentication instead of Shared Access Signature authentication, which perfectly matches all the scenario constraints.
B is incorrect: Dataverse supports only asynchronous processing against Service Bus endpoints, so the transaction can't fail based on the external service's result.
C is incorrect: Multiple subscribers suit Service Bus scenarios, but this scenario requires synchronous processing and integration with an existing third-party Web API.
D is incorrect: Event Hubs ingests event streams and doesn't make the Dataverse transaction fail based on the external service's processing result.
Q013 - Question
A developer plans to write custom code to restrict access to individual columns in Dataverse because they did this in earlier custom applications. The requirement is only to limit who can see certain column data. What should the developer do?
Domain: Create a technical design (10–15%) Type: Single choice
- A. Write a plugin that removes column values before they return
- B. Write client scripting that hides the columns on the form
- C. Configure the out-of-the-box column-level security feature
- D. Create a custom API that returns only permitted columns
C is correct.
Explanation: Column-level security is an out-of-the-box Dataverse feature that simply needs to be configured. Developers should use what the platform does well instead of rebuilding behavior from earlier custom applications. Writing custom code for achieving desired business application functionality should be considered as an exception to no-code and low-code approaches.
A is incorrect: A plugin would add custom code for a capability Dataverse already provides through configuration, which adds maintenance without need.
B is incorrect: Client scripting runs only on model-driven forms and is an alternative when declarative options are insufficient, which is not true here.
D is incorrect: A custom API is a code-first message for custom logic and would duplicate a feature that needs only configuration.
Q014 - Question
A team stores an exported solution .zip file in source control. The schema definition is in one large customizations.xml file, which is hard to maintain. They want output that a source control system can maintain more readily. What should they use?
Domain: Build Power Platform solutions (10–15%) Type: Single choice
- A. The solution pack command to rebuild the .zip file
- B. The solution upgrade process to optimize the import
- C. The Power Apps admin center to split the schema file
- D. The Power Platform CLI solution unpack command
D is correct.
Explanation: The solution unpack command reversibly decomposes a solution zip file by dividing it into a logical folder structure. This process splits the massive schema definition file into smaller files, producing an output that can be more readily maintained by a source control system.
A is incorrect: The solution pack command is not used to decompose a zip file; unpack is the command that creates the logical folder structure.
B is incorrect: The solution upgrade process optimizes the import of managed solutions, but it does not decompose an exported zip file for source control.
C is incorrect: The Microsoft Power Platform CLI provides the solution unpack command; the admin center does not divide the solution into a folder structure.
Q015 - Question
You are testing a canvas app before release. Monitor shows thousands of events. You need to list only connector actions that took longer than one second, so you can find slow queries. What should you do?
Domain: Implement Power Apps improvements (5–10%) Type: Single choice
- A. Use the global filter to search for the word Error.
- B. Clear the data and rerun the app without filtering.
- C. Filter the Result column to show Error entries.
- D. Filter the Duration column to show values above 1000 ms.
D is correct.
Explanation: The Duration column helps you identify slow actions, and its recorded values are always represented in milliseconds. By filtering this column to show values exceeding 1000 ms, you isolate the long-running events that take more than one second, allowing you to optimize query criteria or reduce the volume of returned data.
A is incorrect: The global filter searches all columns for text matches. Searching for Error finds failures, not successful actions that exceed a specific duration threshold.
B is incorrect: Clearing data provides an empty event log for new tests, but without applying a column filter, you must still scan every captured event manually.
C is incorrect: The Result column labels errors to help identify failures. A slow action often succeeds, meaning this filter would completely miss the long-running queries.
Q016 - Question
You build a solution project for a code component with msbuild. The team needs an unmanaged solution zip for another environment, but the output is managed. What should you change?
Domain: Extend the user experience (10–15%) Type: Single choice
- A. Use the /restore flag on every build
- B. Set the msbuild configuration to Release
- C. Edit the SolutionPackageType node in the cdsproj file to Unmanaged
- D. Run pac pcf push with a different publisher prefix
C is correct.
Explanation: The default package type is a Managed solution. If you want to export as Unmanaged, you can uncomment the PropertyGroup section from your Solutions.cdsproj file and edit the SolutionPackageType node accordingly. You can then rebuild the project to generate the solution zip file with the required package type.
A is incorrect: The /restore flag is needed only for the first time the solution project is built and does not affect the package type.
B is incorrect: The Release configuration issues a production build and changes the output folder, but it does not change the package type.
D is incorrect: The pac pcf push command creates a temporary solution for testing and does not set the package type of the output.
Q017 - Question
A custom connector has a List Invoices action that takes fromAmount. You need a List Big Invoices action with a default fromAmount. Both actions currently point to /ListInvoices, which causes an error. Which approach should you use?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Apply Set host URL to List Big Invoices and use a different host
- B. Define List Big Invoices with path /ListBigInvoices and apply Route request to /ListInvoices
- C. Apply Set property to List Big Invoices to change its path
- D. Apply Set query string parameter with Append to rename the path
B is correct.
Explanation: Two actions cannot point to the same path. Give the new action a path that does not exist on the API, such as /ListBigInvoices. Then use the Route request policy template to send these action calls to /ListInvoices. Route request modifies the path, so both actions work without conflict.
A is incorrect: Set host URL changes the host, not the path, so it does not resolve the duplicate path conflict.
C is incorrect: Set property adds or updates properties on an object or collection in the body, not the action path.
D is incorrect: Set query string parameter adds or updates query parameters and cannot change the request path to /ListInvoices.
Q018 - Question
An integration synchronizes accounts between two systems. Each message carries an account ID and several changed attribute values. You want one request that updates the row and can also create it if it doesn't exist. Which HTTP method should you use?
Domain: Develop integrations (5–10%) Type: Single choice
- A. POST to the accounts collection
- B. PUT to the name attribute of the account row
- C. PATCH to the account row URI with the ID
- D. DELETE the account row, then POST it again
C is correct.
Explanation: You should use the HTTP PATCH method when you perform an update of multiple attribute values. PATCH methods provide upsert capability if you provide an ID value as part of your request. This is a highly beneficial feature when you synchronize data between systems.
A is incorrect: You use the HTTP POST method to create rows. It is not the documented method for updating multiple attributes with upsert.
B is incorrect: You use the HTTP PUT method if you are updating a single attribute value. This scenario changes several attributes, preventing PUT.
D is incorrect: Using the HTTP DELETE method followed by POST requires two requests. PATCH performs the update and upsert in a single request.
Q019 - Question
A model-driven app must update several Dataverse rows as one unit of work. If any step fails, all changes must be rolled back. Power Automate cannot meet the synchronous requirement. Which extension should you design?
Domain: Create a technical design (10–15%) Type: Single choice
- A. A cloud flow that runs when a row is created
- B. A plug-in that runs synchronously
- C. An HTML web resource on the form
- D. A Power Apps component framework code component
B is correct.
Explanation: Extending Dataverse as a platform is required whenever there is a need for automation or behavior not supported by existing features. Plug-ins run as server-side code in Dataverse. Synchronous processing by plug-ins allows any Dataverse modifications to be treated as a single unit of work in a transaction.
A is incorrect: Cloud flows provide asynchronous automation and cannot do everything plug-ins do for synchronous behavior, so they do not provide the required single unit of work transaction.
C is incorrect: HTML web resources display custom presentation logic on forms. They extend the user experience and do not run server-side transactional logic.
D is incorrect: PCF code components extend the user experience across Power Apps types. They do not extend Dataverse platform processing with transactions.
Q020 - Question
A team built a canvas app and a flow in a development environment. They must move the app and its table definitions to a test environment. A manager expects the existing table records to arrive in test too. What should you tell the team?
Domain: Build Power Platform solutions (10–15%) Type: Single choice
- A. The solution transports metadata only, so the records must be moved separately.
- B. The solution transports table records when you export it as managed.
- C. The solution transports records only for tables that a model-driven app uses.
- D. The solution transports records when the flow is included in the solution.
A is correct.
Explanation: Solutions transport only metadata, such as tables, their columns, and configuration data. No business data is transported. The test environment receives the table definitions and the app, but the existing records stay in the source environment. You must inform the manager that business data requires a separate migration process.
B is incorrect: Exporting as managed changes the solution type for deployment, but business data still is not transported with the solution.
C is incorrect: The documented behavior has no exception for model-driven apps. Only metadata is transported, not business data, for any table.
D is incorrect: Adding a flow packages the flow as a component. It does not cause table records to be included in the solution.
Q021 - Question
A maker uses AddColumns(Products, "Supplier Name", LookUp(Suppliers, Suppliers.ID = Product.SupplierID).Name). Both sources are potentially delegable, and Products is large. The maker expects all products to appear. Why might products be missing?
Domain: Implement Power Apps improvements (5–10%) Type: Single choice
- A. LookUp is nondelegable, so Suppliers is limited to 500 records.
- B. AddColumns is partially delegable, so its output is subject to the nondelegation record limit.
- C. AddColumns is fully delegable, but LookUp reduces the result to matching suppliers.
- D. Products must be cached first, because AddColumns cannot use a data source.
B is correct.
Explanation: The AddColumns table shaping function is only partially delegable. While formulas in its arguments, such as LookUp, can be delegated to the data source, the final output of AddColumns remains subject to the nondelegation record limit. Consequently, the outcome is constrained to the initial segment of the Products data source.
A is incorrect: The LookUp function is delegable in this pattern. The record limit comes from the AddColumns output constraint, not from the LookUp function itself.
C is incorrect: AddColumns is not fully delegable. It possesses partial delegability, meaning the entire formula result remains constrained to the initial segment of the data.
D is incorrect: AddColumns can use a data source directly. Caching with Collect is an alternative approach for a small, stable Suppliers dataset, not a requirement.
Q022 - Question
A maker adds a command to the main grid. The command must be visible only when at least one row is selected. Which Power Fx formula should the maker enter for the command's Visible property, with visibility set to Show on condition formula?
Domain: Extend the user experience (10–15%) Type: Single choice
- A. CountRows(Self.Selected.AllItems) > 0
- B. Self.Selected.Item.Name <> Blank()
- C. Self.Selected.Unsaved = true
- D. Self.Selected.State = 1
A is correct.
Explanation: On the main grid, the active data is the table of rows shown. The Self.Selected.AllItems property holds all of the rows selected from the data source. Counting them with CountRows and comparing the result to zero ensures the command is visible only when at least one row is selected.
B is incorrect: Item is available only for a single selected row or a form showing one row, so it is not suited to a grid.
C is incorrect: The Unsaved property returns true only when there are unsaved changes. It does not indicate whether any rows are currently selected.
D is incorrect: The State property indicates the Edit, New, or View state of the hosting control. The value 1 means New, not row selection.
Q023 - Question
The Get Invoice response includes a semicolon-separated tags string. Makers find it hard to use in flows. You want the response to include a new array named taglist. Which policy template and run setting should you configure?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Convert an array to an object, run on request
- B. Convert an object to an array, run on response
- C. Convert delimited string into an array of objects, run on request
- D. Convert delimited string into an array of objects, run on response
D is correct.
Explanation: Because the tags string is in the API output, the policy must run on the response. The Convert delimited string into an array of objects template parses the string and adds a new array, such as taglist, to the response. This improves usability for apps and flows.
A is incorrect: Convert an array to an object does not parse a delimited string, and the request does not carry this data.
B is incorrect: Convert an object to an array starts from an object, not a delimited string, so it does not create taglist from tags.
C is incorrect: The template is correct, but running on the request shapes data sent to the API, not the response output.
Q024 - Question
An integration account creates account rows on behalf of sales users. Security roles of each sales user must apply, and auditors must see who actually made the call. Which implementation meets both requirements?
Domain: Develop integrations (5–10%) Type: Single choice
- A. Set the CallerObjectId header to the user's Microsoft Entra ID object ID, and review createdonbehalfby
- B. Assign the sales user's security roles to the integration account, and review createdby
- C. Set the CallerObjectId header to the integration account's object ID, and review owninguser
- D. Add odata.track-changes to the request, and review the deltaLink
A is correct.
Explanation: You can provide a CallerObjectId in your message header with the user's Microsoft Entra ID object ID. The logic applies all appropriate roles based on the user you are impersonating. The createdonbehalfby value contains the ID of the user who actually performed the operation for another user.
B is incorrect: Assigning roles to the integration account does not run the request as the sales user. The createdby value omits the caller.
C is incorrect: The CallerObjectId must hold the impersonated user's ID. Using the integration account's ID does not apply the sales user's security roles.
D is incorrect: The odata.track-changes preference header retrieves table changes over time. It does not impersonate users or identify who actually performed an operation.
Q025 - Question
An analytics team needs Dataverse table data and metadata changes copied to Azure Data Lake. They do not want to configure refresh intervals or run additional actions after setup. Which service should the design use?
Domain: Create a technical design (10–15%) Type: Single choice
- A. Azure Service Bus topics
- B. Azure Event Grid
- C. Azure Synapse Link for Dataverse
- D. Azure SQL connector in Power Automate
C is correct.
Explanation: Azure Synapse Link for Dataverse supports initial and incremental writes for table data and metadata. Any data or metadata changes in Dataverse are automatically pushed to Azure Data Lake without any additional action. This is a push operation, meaning changes are pushed to the destination without needing to set up refresh intervals.
A is incorrect: Service Bus publishes Dataverse events to queues and topics for messaging. It is not the service that pushes table data and metadata to Azure Data Lake.
B is incorrect: Event Grid routes events between Power Platform and other Azure services. It does not write table data and metadata incrementally to Azure Data Lake.
D is incorrect: The Azure SQL connector lets apps and flows work with data in Azure SQL. It is not a push service for Dataverse changes.
Q026 - Question
You created a solution named Volunteer Request in Power Apps. A flow and a table already exist outside the solution. You want both items in the solution without rebuilding them. Which action should you use in the solution?
Domain: Build Power Platform solutions (10–15%) Type: Single choice
- A. Select + New, and then create a flow and a table.
- B. Select + Add existing, and then select Flow and Table.
- C. Select Export solution, and then select the flow and the table.
- D. Select Import, and then select the flow and the table.
B is correct.
Explanation: Inside the solution, the + Add existing menu lets you incorporate existing apps, tables, and flows. You select Table for existing tables and Flow for existing flows. This action brings the current items into the solution container without requiring you to recreate them from scratch.
A is incorrect: + New creates new items in the solution, so it would produce duplicates instead of using the existing flow and table.
C is incorrect: Export solution packages a solution into a zip file for another environment. It does not add existing items to the solution.
D is incorrect: Import brings a solution zip file into an environment. It does not add existing flows or tables to a solution.
Q027 - Question
A React-based code component is loaded and unloaded repeatedly in a browser session. Users report performance problems over time. The developer wants to release the memory the component uses when it is removed from the DOM tree. Where should the cleanup code run?
Domain: Extend the user experience (10–15%) Type: Single choice
- A. In the init method
- B. In the updateView method
- C. In the destroy method
- D. In the getOutputs method
C is correct.
Explanation: The destroy method is invoked when the component is removed from the Document Object Model (DOM) tree. You must use this method to clean up and release any memory the component uses. For React, calling ReactDOM.unmountComponentAtNode prevents performance issues from repeated loading and unloading.
A is incorrect: The init method initializes the component instance. It does not run when the component is removed from the DOM tree.
B is incorrect: The updateView method runs when a value in the property bag changes, not when the component is removed from the DOM.
D is incorrect: The getOutputs method returns bound property values to the framework. It is not the correct cleanup point for releasing memory.
Q028 - Question
You applied a policy template to all actions and triggers of a custom connector. Some actions now return runtime errors. The policy parameters use a data path that exists only in some responses. What should you do?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Disable the policy in the connector designer and keep the actions
- B. Reimport the API definition so it overwrites the policy
- C. Move the policy to the top of the policy list
- D. Apply the policy only to actions where the data path is valid
D is correct.
Explanation: When configuring a policy to run on all actions and triggers, you must ensure that any data paths used in the policy parameters are valid for all of them. Limiting the template to specific actions where the data path is valid prevents the runtime errors from occurring.
A is incorrect: The evidence does not support disabling a policy in the designer, and removing the policy would not fix the scope problem.
B is incorrect: API properties are stored separately from the API definition, so importing an updated definition does not overwrite configured policies.
C is incorrect: Policy order controls the sequence of application when using multiple templates. It does not make an invalid data path valid.
Q029 - Question
A developer is building a custom connector for a third-party API. The connector must be prepared for open-sourcing and certification. The developer needs to perform advanced editing of the connector definition and validate it before submission. Which tool should the developer use?
Domain: Create a technical design (10–15%) Type: Single choice
- A. Power Platform CLI pac connector commands
- B. Microsoft Power Platform Connector CLI
- C. Power Platform Tools for Visual Studio
- D. Code Generation Tool Microsoft.CrmSdk.CoreTools
B is correct.
Explanation: The Microsoft Power Platform Connector CLI provides a dedicated command-line tool to create, download, update, and validate custom connectors. It allows advanced editing of the connector definition. You must use this specific tool when preparing a custom connector for open-sourcing or certification, which directly meets the developer's requirement.
A is incorrect: The Power Platform CLI has a Connector category, but open-sourcing and certification preparation specifically requires the separate Connector CLI tool.
C is incorrect: Power Platform Tools for Visual Studio supports building Dataverse plug-ins and project templates, not custom connector validation or certification preparation.
D is incorrect: The Code Generation Tool generates early-bound .NET Framework classes for the table data model and does not manage custom connector definitions.
Q030 - Question
A maker must review the columns, relationships, and business rules of a table in the Volunteer Request solution. The maker is in Power Apps and has opened Solutions. What should the maker do next?
Domain: Build Power Platform solutions (10–15%) Type: Single choice
- A. Select the flow, and then select Edit.
- B. Select the canvas app, and then select Edit.
- C. Select Volunteer Request, select the table, and then select Edit.
- D. Select Export solution, and then open the downloaded zip file.
C is correct.
Explanation: You must open the solution first, because editing solution-aware items starts from within the solution container. Selecting the table and then choosing Edit opens the specific area where you can view the columns, relationships, business rules, and other table details required by the maker.
A is incorrect: Selecting Edit on a flow opens the flow edit mode, which does not display the table columns, relationships, or business rules.
B is incorrect: Selecting Edit on a canvas app opens Power Apps studio, which is used for the app interface and not the table definition.
D is incorrect: Exporting creates a zip file for transport to another environment. It is not the correct way to view or edit table columns.
Q031 - Question
An interactive code component changes its output after a user action. The host runs a business rule and finds the new output invalid. What does the framework do next with the component?
Domain: Extend the user experience (10–15%) Type: Single choice
- A. It calls destroy and removes the component from the DOM tree
- B. It calls init again to reinitialize the component
- C. It calls updateView with the old value and an error message
- D. It skips updateView and leaves the user interface unchanged
C is correct.
Explanation: After the runtime calls the getOutputs method, the host validates the output. If a business rule finds the new output invalid, the framework calls the updateView method and passes the old value along with an error message. The component can then update the user interface appropriately.
A is incorrect: The destroy method is invoked only when the component is removed from the DOM tree, not when output validation fails.
B is incorrect: The init method initializes the component instance. Invalid output does not trigger a reinitialization of the code component instance.
D is incorrect: The updateView method is called in both valid and invalid scenarios, allowing the component to display an error message if needed.
Q032 - Question
An action uses the path https://myapi.myservice.com/customers/{country}. The underlying API expects the country value to be double URL-encoded because values can contain characters such as a slash. Makers should not encode the value themselves. What should you configure?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Add x-ms-url-encoding: double to the country path parameter
- B. Add chunkTransfer: true to the operation definition
- C. Add a testConnection operation that passes country as a static parameter
- D. Add x-ms-dynamic-values to the country parameter
A is correct.
Explanation: The x-ms-url-encoding extension applies to parameters that are included in the request URL path. Path parameters are single URL-encoded by default, so setting the value to double makes the connector send double-encoded text. This simplifies handling because connector users do not need to encode the path parameters.
B is incorrect: chunkTransfer supports messages larger than the runtime limit and does not change how path parameters are encoded.
C is incorrect: testConnection runs an operation during connection creation to validate configuration. It does not change encoding of the path parameter.
D is incorrect: x-ms-dynamic-values provides a list of options for a parameter and does not change URL encoding.
Q033 - Question
A developer is building a deployment package that includes two managed solutions. During a solution upgrade, when both the old and new solutions are present in the system, the package must transform existing data. Which event handler in PackageImportExtension.cs should contain this logic?
Domain: Create a technical design (10–15%) Type: Single choice
- A. InitializeCustomExtension
- B. PreSolutionImport
- C. AfterPrimaryImport
- D. RunSolutionUpgradeMigrationStep
D is correct.
Explanation: The RunSolutionUpgradeMigrationStep event handler is called during a solution upgrade when both the old and new solutions are present in the system. This function provides a means to do data transformation or upgrade while a solution update is occurring, which directly matches the developer's requirement.
A is incorrect: InitializeCustomExtension is called to initialize any functions in the custom extension, not to transform data while both solution versions are present.
B is incorrect: PreSolutionImport is raised before the named solution is imported to allow configuration settings, not to transform data during an upgrade.
C is incorrect: AfterPrimaryImport is called after all import steps are complete to allow for final customizations, so it is not the upgrade-time step.
Q034 - Question
A team exports a solution as one compressed file and checks it into source control. Reviewers can see that the file changed but not which component changed. The team uses Power Platform Build Tools. Which task should they add before check-in?
Domain: Build Power Platform solutions (10–15%) Type: Single choice
- A. Unpack Solution
- B. Pack Solution
- C. Set Solution Version
- D. Import Solution
A is correct.
Explanation: The Unpack Solution task breaks the compressed solution file into individual files for each component. Checking those separate files into source control gives the team a detailed log of exactly what changed, instead of showing only that the single large file was modified during the export process.
B is incorrect: Pack Solution builds a solution.zip file from source control for import. It does the reverse of what the reviewers need in this scenario.
C is incorrect: Set Solution Version updates the version number to implement a consistent versioning strategy. It does not split the compressed file into components.
D is incorrect: Import Solution loads a solution into a target environment. It does not create per-component files for checking into a source control system.
Q035 - Question
An existing script uses Xrm.Page.getAttribute("firstname").getValue() in an OnChange handler registered through form properties. You must update it to the supported approach. Which change should you make?
Domain: Extend the user experience (10–15%) Type: Single choice
- A. Replace Xrm.Page with formContext.data.process
- B. Replace Xrm.Page with Xrm.Navigation
- C. Pass execution context to the handler and call executionContext.getFormContext()
- D. Replace getAttribute with formContext.ui.controls
C is correct.
Explanation: The global Xrm.Page object is deprecated. To update the script, the handler should receive the execution context as its first parameter, which you enable when registering the event handler. You then call the getFormContext method to retrieve the form context and use formContext.getAttribute to read the column value.
A is incorrect: The formContext.data.process namespace interacts with business process flow data. It does not replace Xrm.Page for reading a standard column value.
B is incorrect: The Xrm.Navigation namespace automates overall application navigation. It does not provide access to the current form's column values.
D is incorrect: The UI object holds controls, and a column can have multiple controls. The data object is easier for manipulating attribute values.
Q036 - Question
An action's parameters must change based on the selected invoice type. The API provides a GetInvoiceSchema operation that returns a valid JSON schema and accepts typeId. You support only newly created flows. Which extension should you add by editing the OpenAPI definition?
Domain: Extend the platform (40–45%) Type: Single choice
- A. x-ms-dynamic-list on the typeId parameter
- B. x-ms-dynamic-values on the Invoice object
- C. x-ms-dynamic-properties that calls GetInvoiceSchema
- D. x-ms-capabilities with testConnection that calls GetInvoiceSchema
C is correct.
Explanation: The x-ms-dynamic-properties extension is version 2 of the dynamic schema extension. When you support only new flows, you can configure it alone by directly editing the OpenAPI definition. The custom connector runtime calls GetInvoiceSchema with typeId and shows the parameters that the returned schema defines.
A is incorrect: x-ms-dynamic-list is version 2 of the drop-down list of values. It does not change which parameters appear.
B is incorrect: x-ms-dynamic-values returns a list of options for one parameter. It does not retrieve a schema for the object's properties.
D is incorrect: testConnection runs an operation at connection creation to validate configuration. It does not change the parameter list on the action.
Q037 - Question
A developer runs an ASP.NET Core web API locally and connects it to Power Platform through the connected service in Visual Studio 2022. In the canvas app, the connector returns no data. The API is not running. What should the developer do?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Keep the API running in a browser tab while building the app
- B. Delete the connector and recreate it with a public tunnel
- C. Change the tunnel type from Persistent to another type
- D. Regenerate the canvas app by using the pac canvas create command
A is correct.
Explanation: The custom connector reaches the API through a dev tunnel connected to the locally running API. If the API is not running, the connector has nothing to call, so no data returns. You must keep the API running in a browser tab while building the app.
B is incorrect: The connector and public tunnel already exist. Recreating them does not start the local API that the tunnel forwards requests to.
C is incorrect: The tunnel type does not cause missing data in this scenario. The API must be running for the tunnel to return results.
D is incorrect: Regenerating the app creates an .msapp file from the connector operations. It does not start the API that returns the data.
Q038 - Question
A citizen developer receives a web API's OpenAPI document from the development team. The developer wants to create a custom connector without waiting for anyone and wants lower architectural complexity and no extra cost. Which approach fits?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Create the connector from the OpenAPI document
- B. Request an export from Azure API Management
- C. Create the connector from a local web API with dev tunnels
- D. Wait for the team to add usage control policies
A is correct.
Explanation: A custom connector can be created for any web API that an OpenAPI document describes. This removes dependencies on others, allowing you to create the connector yourself. The comparison table also lists lower architectural complexity and no extra cost for the OpenAPI document approach compared to Azure API Management.
B is incorrect: Exporting from Azure API Management depends on someone else, adds extra cost, and has higher architectural complexity than an OpenAPI document.
C is incorrect: Dev tunnels connect a locally running API for testing. They do not fit a developer who already holds an OpenAPI document.
D is incorrect: Usage control is a feature of Azure API Management, not OpenAPI. It adds the extra cost and complexity the developer wants to avoid.
Q039 - Question
A company must retrieve data from an external system during a record save. Business users currently maintain a workflow for related logic, but the workflow can't meet this requirement. Developers will maintain the new logic. Which approach should you choose?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Create a synchronous workflow
- B. Write a plug-in
- C. Create an on-demand workflow
- D. Add a client script triggered on form load
B is correct.
Explanation: A plug-in is the correct approach because it can access external data and is maintained by developers. This matches the requirement to retrieve external data synchronously when the save event occurs. A workflow cannot access external data, which is why the existing declarative approach cannot meet the business requirement.
A is incorrect: Synchronous workflows cannot access external data, so they cannot meet the requirement even though they can run synchronously during a save.
C is incorrect: An on-demand workflow cannot access external data, and it must be triggered manually rather than running automatically during a record save.
D is incorrect: Client scripts have limitations when accessing external data, and a form load trigger does not execute during the required save event.
Q040 - Question
A plug-in on Update of an account also starts an update on the same account, and it runs repeatedly. You want an extra safeguard that stops it after five runs. What should you implement?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Store a RunCount shared variable and throw an exception when it exceeds five
- B. Read OutputParameters and compare the values with the Target
- C. Register a PreEntityImage and count the attributes in it
- D. Replace the plug-in with a Retrieve request in the Execute method
A is correct.
Explanation: To prevent an infinite recursion scenario, you can use shared variables to manually track the execution depth. You should check if a RunCount shared variable exists, initialize it to zero, increment it, and throw an InvalidPluginExecutionException if the value is greater than five to stop execution.
B is incorrect: Output parameters are only provided after the operation occurs and do not contain execution depth tracking data to prevent infinite recursion.
C is incorrect: Entity images provide an immutable snapshot of data before or after an operation, so they cannot store a dynamic run counter.
D is incorrect: A Retrieve request queries entity values from the organization context, which does not track or limit plug-in execution runs during recursion.
Q041 - Question
Contact phone numbers are stored as digits. You need a plug-in to display them as (###) ###-#### when a list of contacts is returned. The plug-in must read the returned data. Which configuration should you use?
Domain: Extend the platform (40–45%) Type: Single choice
- A. PreOperation on Update, reading Target from InputParameters
- B. PostOperation on RetrieveMultiple, reading BusinessEntityCollection from OutputParameters
- C. PostOperation on Retrieve, reading BusinessEntity from OutputParameters
- D. PreOperation on Create, reading Target from InputParameters
B is correct.
Explanation: A list of contacts is returned by the RetrieveMultiple message. You must register the step at the PostOperation stage, read the BusinessEntityCollection from the output parameters, and iterate through each entity to format the phone number. This modifies the returned values without altering the stored digits.
A is incorrect: PreOperation on an Update message modifies data before saving, and it does not execute when a list of records is returned.
C is incorrect: The Retrieve message with a BusinessEntity output parameter handles a single record, but the scenario requires formatting a list using RetrieveMultiple.
D is incorrect: PreOperation on a Create message affects new records before saving and does not format values returned by a multiple-record query.
Q042 - Question
You import an OpenAPI definition with 12 actions. Makers rarely use most of them, but three are used daily. You want the three daily actions listed first and the others available only after the maker selects the connector, without hiding any action. What should you configure?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Set the three daily actions to Important and leave the others as None
- B. Set the three daily actions to Advanced and the others to Internal
- C. Set all 12 actions to Internal and share only the three daily actions
- D. Set the three daily actions to None and the others to Advanced
A is correct.
Explanation: Actions marked as important are prioritized and show first in the maker experience. Actions marked as none or advanced appear only after the user selects the connector. Configuring the daily actions as important meets the requirement to list them first without hiding the remaining actions from the makers.
B is incorrect: The advanced option does not prioritize an action, and the internal option hides the other actions, which violates the stated requirement.
C is incorrect: The internal option hides actions, so all twelve actions would be hidden. Furthermore, sharing does not control individual action visibility settings.
D is incorrect: The none option is the default and shows actions normally. The three daily actions would not be prioritized to appear first.
Q043 - Question
A custom connector was created in a solution in the development environment. Dataverse is available in both the development and production environments. You want production to use the connector with no extra connector configuration and to support build automation. Which deployment option should you use?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Download the OpenAPI definition and import it into production
- B. Export the solution and import it into production
- C. Use the Connectors CLI to download and import the definition
- D. Recreate the connector manually in production
B is correct.
Explanation: A custom connector created in the context of a solution can be exported and imported into another environment. After the solution is imported, no extra configuration of the connector is required. This option requires Dataverse in both environments and supports robust build automation tooling for deployment.
A is incorrect: Download and import still requires some configuration in the target environment and is used mostly when you cannot use a solution.
C is incorrect: The Connectors CLI automates the manual download and import process when you are not using solutions, so it does not fit.
D is incorrect: Manual recreation is not a documented deployment option and does not provide the robust application lifecycle management capability of solutions.
Q044 - Question
A team stores contacts in an Excel table on OneDrive. You must send each contact an email once a day, including contacts added later. Copilot generated a flow with a Recurrence trigger. Which action configuration sends one email per row?
Domain: Extend the platform (40–45%) Type: Single choice
- A. List rows present in a table, then Send an email inside a For Each action
- B. Send an email with the first ContactEmail value entered in the To field
- C. List rows present in a table, then Send an email outside any loop
- D. Recurrence trigger only, with the table name entered in the Subject field
A is correct.
Explanation: The Recurrence trigger runs the flow daily. The List rows present in a table action retrieves all current rows from the Excel workbook, including any newly added contacts. Placing the Send an email action inside a For Each loop ensures the flow sends an individual message to every row returned.
B is incorrect: A fixed first value would send to one address only, not to every row added to the workbook.
C is incorrect: Without the For Each action, the email step is not run for each row returned by the table.
D is incorrect: A trigger alone does not read workbook rows, and the Subject field does not retrieve table data.
Q045 - Question
You created a shared flow that uses your credentials for a connection. You are removing yourself as an owner after adding a co-owner. The flow must keep working correctly. What should you do for the connection?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Update the credentials for the connection that used your account
- B. Ask the co-owner to change the credentials on your connection
- C. Move the connection to another flow as a shared connection
- D. Leave the connection unchanged because the co-owner inherits it
A is correct.
Explanation: When you remove an owner whose credentials are used to access Power Automate services, you must update the credentials for those specific connections. Performing this update ensures that the shared flow continues to work correctly and authenticate properly after your account is removed from the owners list.
B is incorrect: Owners can't change the credentials for a connection that another owner created, so the co-owner can't do this.
C is incorrect: Shared connections can be used only in the flow in which they were created, so moving one is not possible.
D is incorrect: Nothing in the evidence says credentials transfer. Co-owners can use services but not modify another owner's credentials.
Q046 - Question
You write a convertFromUtc expression in a Compose action input. You select outside the input field to check another action, then return and find the formula is gone. You need to keep the expression you wrote. What should you do when editing it?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Select Add at the bottom of the expression editor to save the expression.
- B. Wait for AutoSave to store the formula in the Compose input.
- C. Type a forward slash in the input field to commit the formula.
- D. Select Test in the top right to store the formula.
A is correct.
Explanation: You must select Add at the bottom of the expression editor to save the expression to the input. If you select out of the inputs first, you lose your changes. Power Automate does not use AutoSave, so the formula is not stored until you explicitly select Add.
B is incorrect: Power Automate does not have AutoSave, so waiting does not store the formula, which is why your changes were lost.
C is incorrect: Typing a forward slash only opens the options drop-down that leads to the expression editor. It does not save the formula.
D is incorrect: Test runs the flow after the expression is saved. It does not save an unsaved formula from the expression editor.
Q047 - Question
A flow reads the text values "12" and "12.4" from a data source. You must test whether the first value is greater than the second and return Yes or No. Which expression returns the correct result?
Domain: Extend the platform (40–45%) Type: Single choice
- A. if(greater(int('12'), int('12.4')),'Yes','No')
- B. if(greater(float('12'), int('12.4')),'Yes','No')
- C. if(greater('12','12.4'),'Yes','No')
- D. if(greater(int('12'), float('12.4')),'Yes','No')
D is correct.
Explanation: The values are stored as text, so you must convert them into actual numbers before the comparison. You use the int function for "12" and the float function for "12.4" because it has a decimal digit. The expression then returns No, because 12 is not greater than 12.4.
A is incorrect: The value "12.4" has a decimal digit, so it requires the float function rather than int to be converted correctly.
B is incorrect: It applies int to "12.4", which needs float because of the decimal digit. The source pairs int with "12".
C is incorrect: Both values remain text. You must convert text numbers to actual numbers before you use them in a logical function.
Q048 - Question
A manual flow has Square Footage and Cost number inputs. The first Compose multiplies them. In the second Compose, you need the result shown as currency with two decimal places. Which expression should you enter?
Domain: Extend the platform (40–45%) Type: Single choice
- A. formatNumber(outputs('Compose'), 'C')
- B. formatNumber(outputs('Compose'), 'N2')
- C. mul(outputs('Compose'), 'C2')
- D. formatNumber(outputs('Compose'), 'C2')
D is correct.
Explanation: The formatNumber function converts the multiplied result from the first Compose action into a formatted string. The format string 'C2' applies the currency format, and the number 2 sets the exact number of decimal places. The final output displays the total carpet cost as currency for the user.
A is incorrect: The 'C' format string formats the number as currency but does not explicitly specify two decimal places, which the scenario requires.
B is incorrect: The 'N2' string is not the currency format string used in the exercise. The C character formats the number as currency.
C is incorrect: The mul function multiplies numbers. It does not format a value, and 'C2' is not a valid number to multiply.
Q049 - Question
John owns a flow that runs when a Project row is created and adds task rows. Task rows must show the user who created the Project row as the creator, not John. John has the Delegate security role. Which configuration meets this requirement?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Set Run as to Modifying user and select Use invoker's connection on the Add a new row action
- B. Set Run as to Flow owner and select Use invoker's connection on the Add a new row action
- C. Set Scope to User and leave the Add a new row action unchanged
- D. Set Run as to Row owner and leave the Add a new row action unchanged
A is correct.
Explanation: Run as set to Modifying user uses the context of the user who acted on the row. The action must also use Use invoker's connection on its Settings tab. Then the task rows show that user as the creator, and the Delegate role gives John the required privilege.
B is incorrect: Flow owner keeps John as the context, so the tasks would still show John as the creator.
C is incorrect: Scope only determines which rows trigger the flow by ownership and does not change the identity that creates tasks.
D is incorrect: Run as alone does not apply to an action until you select Use invoker's connection, and Row owner might not be the creator.
Q050 - Question
A flow runs a Get a row by ID action on an Account row and uses Expand Query with primarycontactid($select=contactid,fullname). The output contains the contact data, but fullname does not appear in the Dynamic content pane. What should you do to use it?
Domain: Extend the platform (40–45%) Type: Single choice
- A. Add fullname to the Select columns option
- B. Use a workflow expression to access the related data
- C. Change the action to Upsert a row
- D. Turn on Pagination in the action settings
B is correct.
Explanation: The Expand Query option includes related table data in the action output, but it does not add those related columns to the Dynamic content pane for selection. To use the primary contact data in later steps, you must use a workflow expression to access the data.
A is incorrect: Select columns limits the primary table columns, and fullname belongs to the related Contact table, so it does not appear in dynamic content.
C is incorrect: Upsert a row creates or updates a row and does not retrieve related data for display in dynamic content.
D is incorrect: Pagination applies to returning more than 5,000 rows from List rows and has no effect on expanded data visibility.