Q01 - Question
A team must publish Dataverse events to Azure by using a pre-configured Dataverse utility. The events come from application telemetry and form a large real-time stream. The team wants an ingestion service for big data streams. Which Azure service should the team use?
Domain: Develop integrations (5–10%) Type: Single choice
- A. Azure Event Hubs
- B. Azure Event Grid
- C. Azure API Management
- D. Azure Logic Apps
A is correct.
Explanation: Event Hubs provides a real-time data ingestion service for large data streams such as application telemetry, and Dataverse lets you publish events directly to an event hub. This service matches both the high-volume streaming requirement and the need for built-in Dataverse support because it handles millions of events per second.
B is incorrect: Event Grid is an event-driven publish-subscribe framework, but Dataverse doesn't provide out-of-the-box capabilities to integrate with an Event Grid instance.
C is incorrect: API Management manages and publishes custom APIs for internal and external developers, so it doesn't ingest large real-time event streams.
D is incorrect: Logic Apps orchestrates workflows with a Dataverse connector, but it isn't a high-volume streaming ingestion service for application telemetry.
Q02 - 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.
Q03 - Question
A Dataverse service endpoint uses a one-way contract to post messages to a Service Bus queue. The consuming listener application is stopped for maintenance. Dataverse posts a message during that time. What happens to the post?
Domain: Develop integrations (5–10%) Type: Single choice
- A. The message waits in the queue until a listener reads it
- B. Dataverse switches to a non-destructive read for the message
- C. The post fails, Dataverse retries it, and the system job eventually shows Failed
- D. Dataverse returns a string value to the plug-in
C is correct.
Explanation: One-way contracts require an active event listener to consume a message posted to the Service Bus queue. If no active listener is available, the post fails. Dataverse retries posting the message in exponentially larger time spans until the asynchronous system job is canceled, and the System Job status is set to Failed.
A is incorrect: Queuing without an active listener describes the queue contract, where no active listener is required, rather than the one-way contract.
B is incorrect: Destructive and non-destructive reads apply to consuming queue messages. They don't change how a failed one-way post behaves during maintenance.
D is incorrect: Returning a string value is a two-way or REST contract capability, and it requires an active listener to respond.
Q04 - 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.
Q05 - Question
A developer must autoformat a string value before it posts to Dataverse, and the update must perform as well as possible. The team considers moving the logic to an Azure Function called by a webhook. Which approach should the developer use?
Domain: Develop integrations (5–10%) Type: Single choice
- A. An asynchronous webhook step that calls the Azure Function
- B. A Logic Apps workflow that updates the row after creation
- C. A plug-in that runs in the Dataverse event pipeline
- D. A synchronous webhook step that calls the Azure Function
C is correct.
Explanation: Azure Functions don't run within the Dataverse event pipeline. For data updates that require the highest performance, such as autoformatting a string value before it posts to Dataverse, a plug-in is recommended. A plug-in also ensures that data operations roll back properly if an exception occurs later in the pipeline.
A is incorrect: An asynchronous webhook calls an external function outside the event pipeline, so it doesn't provide the highest-performing update before posting.
B is incorrect: Logic Apps operates outside the Dataverse pipeline and updates after the row is created, which doesn't meet the before-post requirement.
D is incorrect: A synchronous webhook runs outside the pipeline. Its data operations also don't roll back if the pipeline later has an exception.
Q06 - Question
A nightly integration service calls the Dataverse Web API without a signed-in person. You registered the app in Microsoft Entra ID and use Server-to-Server (S2S) authentication. Requests are authenticated but fail to perform operations. What should you configure in each Dataverse environment?
Domain: Develop integrations (5–10%) Type: Single choice
- A. An application user associated with the app registration, with Dataverse security roles assigned
- B. Delegated user impersonation permission on the app registration API permissions tab
- C. A Redirect URI of type Web in the Authentication section of the app registration
- D. A multitenant account type on the app registration
A is correct.
Explanation: When you use S2S authentication, a Dataverse application user must be configured in each environment you access. You must associate the application user with the Entra ID app and configure which Dataverse security roles apply. These roles permit the operations you perform using the Web API.
B is incorrect: Delegated permissions are not required for S2S authentication. They apply when an application accesses Dataverse on behalf of an interactive user.
C is incorrect: A Redirect URI applies to registering web apps. It does not give a non-interactive service account Dataverse roles or permissions.
D is incorrect: Account type controls which directories can use the app. It does not create a Dataverse application user or assign security roles.
Q07 - 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.
Q08 - Question
A developer must query Dataverse through the Web API and needs option set labels in the results. The filtering requirements are more complex than the OData connectors support. Which query approach should the developer choose?
Domain: Develop integrations (5–10%) Type: Single choice
- A. An OData query with $select
- B. FetchXML
- C. A PUT request to the attribute
- D. A change tracking request with odata.track-changes
B is correct.
Explanation: FetchXML is a query language that provides considerably more filtering options than the OData connectors. It also allows you to see the labels for reference data, such as option set labels or lookup fields. You can run these complex FetchXML queries by using the Dataverse Web API.
A is incorrect: The $select query controls which properties are returned. It does not provide the extra filtering options or option set labels.
C is incorrect: You use the HTTP PUT method to update a single attribute value. It is a write operation, not a data query.
D is incorrect: The odata.track-changes preference header retrieves changes for a table over time. It does not add complex filtering or option set labels.
Q09 - 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.
Q10 - Question
Change tracking is enabled on the account table. Your first request with the odata.track-changes preference returned all matching rows and an @odata.deltaLink. Later, you need only rows changed since that request. What should the app do?
Domain: Develop integrations (5–10%) Type: Single choice
- A. Resend the original request with the same preference header
- B. Filter the query by a date and time stamp that the app tracks
- C. Use the odata.track-changes header with $count only
- D. Run the stored @odata.deltaLink and save the new delta link from the response
D is correct.
Explanation: The initial response returns the full result set and an @odata.deltaLink. Running that link returns changes that have occurred since the initial request. It is up to your app to maintain the delta link, and each response provides a new link for the next time you query.
A is incorrect: Without a deltatoken, the request behaves like an initial request and returns the entire set of data that applies to it.
B is incorrect: Date and time stamp tracking is an older approach. Change tracking uses delta links that the app maintains to retrieve changes.
C is incorrect: Adding the $count parameter retrieves only the number of changes made in a given delta. It does not return changed rows.