AB-400 · Sample questions
9 real questions from the CertifyDeck AB-400 bank, spread across the domains of the official Microsoft Certified: Power Platform Developer Associate skills outline, with the correct answer and a full explanation of why the other options are wrong. They are original questions written from the public syllabus, not exam dumps, and they are the same style you will find in the practice tests and mock exams.
Correct answer: A. Create an Entity object with only the id and the changed attribute set, then call service.Update(entity)
The Organization service Update method only requires the entity id and the attributes being changed to be set on the Entity object; unset attributes are left untouched on the server. Retrieving the full record first is unnecessary overhead, RetrieveMultipleRequest is for querying, not updating, and deleting/recreating a record changes its GUID and loses related data.
Correct answer: A. trim(concat(triggerBody()?['firstname'], ' ', coalesce(triggerBody()?['lastname'], '')))
Using coalesce() to substitute an empty string when lastname is null avoids a runtime error from concat() receiving a null argument, and wrapping the whole result in trim() cleans up any trailing space when lastname is missing. The workflow expression language does not support the "+" operator for string concatenation, using [] without ? risks failure on null, and substring() alone does not concatenate two fields.
Correct answer: A. It reduces the amount of data transferred and processing time by retrieving only what changed
The core efficiency benefit of change tracking is minimizing data transfer and processing by only retrieving the delta since the last sync, rather than the full dataset each time. It has no relation to translation, error handling elimination, or currency conversion.
Correct answer: A. PATCH to /vehicles(vin='1HGCM82633A004352') with the record payload in the body
In the Web API, sending a PATCH request to an entity addressed by its alternate key performs an upsert: Dataverse creates the record if it does not exist or updates it if it does. GET only retrieves data, delete-then-create is inefficient and loses the record's GUID/history, and there is no dedicated "/upsert" endpoint in the Web API.
Correct answer: D. The associate needs a Power Apps Premium license
The documentation specifically states that end users who run code apps need a Power Apps Premium license. A per-flow plan licenses Power Automate flow execution, not running a code app. A Dynamics 365 Customer Service Premium license is a different, app-specific license that isn't documented as a code apps requirement. A general Microsoft 365 license alone doesn't include the entitlement code apps require.
Correct answer: C. Only the accounts that Priya's security role and row-level security allow her to see
The documentation states that the MCP server bypasses nothing -- it 'respects Dataverse security roles and row-level security. Users can only access tables and records that their security role permits.' There's no documented elevation of access for managers through MCP, and read_query isn't restricted to system administrators; it's available to any user whose security role permits the underlying data access.
Correct answer: A. Import the solution .zip into the target environment (via the maker portal or pac solution import), then add the now-available component to the desired field, view, or canvas app screen
Consuming a component built elsewhere is simply a solution import: import the provided .zip (managed or unmanaged) into the target environment through the maker portal or pac solution import, after which the component becomes available in the environment's component gallery for a maker to attach to fields, views, or canvas app screens. Manually copying bundle files to browsers, regenerating the project from scratch, or asking Microsoft to globally deploy a custom component are not valid or supported approaches.
Correct answer: A. A connection reference (--connection-ref and --solution-id) instead of a raw --connection-id
Connection references are solution components that point to a specific connection for a connector; binding the data source to a reference (rather than to a user-specific connection) makes the solution environment-aware and portable across Dev, Test, and Prod for smooth application lifecycle management. Copying a single connection ID across environments doesn't achieve portability, since connection IDs are environment-specific. --org-url is used for retrieving table metadata, not for environment portability. Building a separate app per environment isn't the documented ALM approach for data sources.
Correct answer: C. 'self' <required platform sources> https://cdn.brightharbor.com, because a custom value merges with the default when the default isn't 'none'.
When you customize a directive whose default value isn't 'none', the values you supply are appended to (merged with) the default value, so script-src becomes 'self' plus the platform-required sources plus the added CDN source. The custom value only fully replaces the default when the default is 'none' (which script-src's isn't). Adding a source doesn't disable a directive — leaving the Source list blank after turning off the default toggle does that instead. script-src and style-src have different documented defaults ('self' <platform> vs 'self' 'unsafe-inline'), so they aren't interchangeable.
Answer each question before opening the explanation, and write down why you discarded the other options. On AB-400, most mistakes come from choosing an option that is technically possible but does not meet every requirement in the scenario.
These 9 questions are a taste of the format, not a diagnostic. To know which domains you fail, practice by domain for free and take a timed mock exam that mirrors the official weights and duration.
Start for free, no sign-up or card. Every question includes an explanation like the ones above, and the mock exam reproduces the official AB-400 format.