Extend Microsoft Power Platform
AB-400 · 118 questions
- A synchronous plug-in must set cr5a2fullcode on an inspection row, combining two other columns, whenever the row is created. The value must be saved with the row in the same operation, without issuing a second update request. Which stage should the step use?
- A plug-in must block deletion of any account that still has open invoices, returning a clear message to the user. The check should run before the database transaction begins so that a rejected request never starts one. Which stage meets this requirement?
- When a project row is created, a plug-in must create five milestone rows, each with a lookup to the new project. Which stage gives the plug-in the new project's ID, and where does it read it?
- A synchronous PostOperation plug-in on Update of the case table sets Target["cr5a2lastreviewed"] to the current time. The plug-in runs without errors, but the column is never saved. What is the correct fix?
- A developer is writing one plug-in class registered on Create, Update and Delete of a table. How does the plug-in get the record being processed from IPluginExecutionContext for each of these messages?
- A synchronous PostOperation plug-in on Update of the opportunity table updates the same opportunity to set a calculated score. Saving any opportunity now runs repeatedly until Dataverse stops it with an infinite loop error. What is the appropriate guard in the plug-in?
- A PreOperation plug-in on Create of the order table calculates a pricing tier that a separate PostOperation plug-in on the same message must use. The tier must not be stored in a column. How should the value be passed between the two steps?
- A plug-in step is registered to run in the context of a dedicated integration user rather than the calling user. An audit row that the plug-in writes must record the human who saved the original record. Which execution context property gives that person's ID?
- A synchronous PreOperation plug-in on the opportunity Create message checks the estimated revenue against a discount policy. When the policy is violated, the save must be cancelled for every caller, including the Web API, and the person using the model-driven form must see a readable explanation instead of a generic error. What should the plug-in do?
- A developer is registering a synchronous PreOperation step on the Update message of the account table. The plug-in recalculates a risk score and must run only when the creditlimit column changes, not when a user edits the phone number, address or any other column. How should the step be configured?
- Users report that saving any change to a contact, even a single phone number edit, takes several seconds. The plug-in trace log shows a synchronous Update plug-in that validates the contact's parent account running on every save, although its code reads only the parentcustomerid column. What is the most likely cause?
- A synchronous PreOperation plug-in on the Update message of the invoice table must calculate a total from the quantity and unitprice columns. When a user changes only quantity, the code throws a KeyNotFoundException reading unitprice from the Target entity. What is the correct explanation and fix?
- An Update plug-in on the account table must write an audit note only when the creditlimit value actually changes, recording both the previous amount and the new amount. Some integrations send creditlimit in every update even when the value is the same. What should the developer register so the code can compare the two values?
- A developer plans plug-in steps on the Update message of the case table and wants to read the full row, including columns that were not part of the update, as it looks after the save has been applied. In which step registration can a post-image be configured and populated?
- A developer registers a pre-image named PreImage on a PostOperation Update step of the contact table and selects the emailaddress1 column. At runtime the code calls context.PreEntityImages["Before"] and throws a KeyNotFoundException even though the step fires correctly. What is the most likely cause?
- A developer registers a pre-image on a PreOperation step for the Create message of the lead table so the plug-in can see the lead's values before they are saved. At runtime the PreEntityImages collection is always empty. What explains this behavior?
- A plug-in on the Create of a service request must create a follow-up task. Business rules require that the task creation respect the security role of the user who submitted the request, so it fails if that user cannot create tasks. How should the plug-in obtain its IOrganizationService instance?
- A PostOperation plug-in on the account Update message must read the email address of every active contact whose parentcustomerid is the updated account, then flag the account if any address is missing. Some accounts have hundreds of contacts. Which approach should the developer use?
- A PostOperation plug-in on the order table creates one shipment line per order line. A developer proposes wrapping the line creations in an ExecuteMultipleRequest to reduce overhead, as they do in their nightly console import. What is the recommended guidance for this plug-in?
- A synchronous PostOperation plug-in on the expense report Create message creates a related approval record. It works for administrators, but salespeople receive an access-denied error when saving expense reports. Policy states that approval records must always be created, even though salespeople have no privileges on the approval table. What should the developer change?
- A plug-in intermittently fails in production with a generic business process error, and the team cannot attach a debugger there. The developer wants the plug-in to record its execution path and key values so the details can be reviewed after a failure. What should the developer implement?
- After a contract row is created in Dataverse, a plug-in must call a partner's REST API that sometimes takes many seconds to respond. Users must not wait for the call when they save, and the result is written back to the contract later. How should the developer register and code the plug-in?
- A plug-in class stores the current account's name in a private instance field during Execute and reads it later in the same method. Under load, the plug-in occasionally writes one user's account name onto another user's record. What is the cause, and how should the developer fix it?
- A synchronous plug-in on the case table retrieves the related customer account to read two columns, accountnumber and creditonhold, and profiling shows the retrieval is a large share of the save time. The code currently calls Retrieve with new ColumnSet(true). What change best improves performance without changing the logic?
- A developer is defining a custom API named contosoGetOrderStatus that callers invoke with the ID of an order and that returns the order's status as text. The order ID must always be supplied. How should the request parameter and response property be defined?
- A software vendor ships a custom API in a managed solution. Customers' developers must be able to react after the operation completes, for example by sending a notification, but must never be able to change its behavior or cancel it. Which AllowedCustomProcessingStepType value should the vendor set?
- An ISV builds a custom API that only its own model-driven app calls. The team does not want to support other developers taking a dependency on it, so it should not appear in the Web API $metadata document or in generated early-bound classes. Which setting should the team use before shipping the managed solution?
- A developer creates a custom API that recalculates priority for a set of case rows and should be invoked against the cases entity set in the Web API, as in /api/data/v9.2/incidents/Microsoft.Dynamics.CRM.contosoRecalcPriority. Which binding type should the developer select?
- A developer has built a plug-in class that must run synchronously in PostOperation when an account is updated, with access to the account's previous name. Using the Plug-in Registration Tool against a Dataverse environment, in what order should the developer register the components?
- A developer tries to register a single plug-in assembly, not a plug-in package, with the Plug-in Registration Tool. The project targets .NET Framework 4.6.2, the DLL is 2 MB, and it references only the Dataverse core assemblies. Registration is rejected. The project's Signing settings have never been configured. What is the cause?
- A team migrating from an on-premises deployment asks which isolation mode to select when registering plug-in assemblies in their new Dataverse online environment, because their old assemblies were registered with isolation set to None. Which isolation mode applies?
- A plug-in needs a third-party JSON library and an internal helper assembly at runtime, neither of which is present in the Dataverse sandbox. The team previously used ILMerge to combine them, but wants the supported approach. What should the developer do?
- A developer has created a custom API named contosoCalculateDiscount with a request parameter CustomerTier and a response property DiscountPercent. A plug-in class containing the calculation is already registered. How should the developer connect the plug-in to the custom API so it runs as the main operation and returns the result?
- A custom API named contosoCheckCredit defines a String response property with the unique name CreditStatus. Its main operation plug-in runs without errors and the trace log shows the calculated value, but the Web API response always returns CreditStatus as null. The plug-in sets context.OutputParameters["Status"]. What should the developer fix?
- A developer registers an assembly that contains a plug-in class and sets that plug-in type as the Plugin Type of a new custom API. A colleague says the developer must also register a step for the custom API message in the MainOperation stage, or the code will never run. How should the developer respond?
- An organization implements a credit check as a custom process action whose logic lives entirely in a plug-in registered on the action. Administrators have twice deactivated the action by mistake, and other teams have registered synchronous steps that changed its behavior. The developer wants a code-first replacement that avoids both problems. What should the developer build?
- A developer has a custom API named contosoOnOrderShipped that an ERP system calls after it ships an order. Makers must be able to build Power Automate flows that run whenever this happens, and nobody should be able to block or change the ERP's call. Which configuration exposes the event correctly?
- A developer has cataloged a custom API named contosoOnPaymentPosted as a Dataverse business event. A business analyst who does not write code needs to send an email to the finance team each time the event occurs. What should the analyst use?
- A partner system needs to be told when an insurance claim is approved. Approval involves several rule checks across multiple Dataverse rows, and the partner does not want to receive notifications for every field edit on the claim table. Which design best meets the requirement?
- A developer creates a custom API named contosoOnInventoryLow with Async Only processing steps and deploys it in a solution. A maker opens the Dataverse When an action is performed trigger in Power Automate, but the action does not appear in any catalog or category list. What is the most likely cause?
- A Dataverse plug-in must read a signing key from Azure Key Vault each time it runs. The security team prohibits client secrets or certificates stored in plug-in configuration, environment variables or code, and wants access granted through Microsoft Entra ID role assignments. Which approach should the developer use?
- A developer is setting up Power Platform managed identity so a plug-in assembly can call an Azure resource. The plug-in code already requests tokens through IManagedIdentityService. In which order should the remaining setup be completed?
- A plug-in that uses Power Platform managed identity acquires tokens successfully in the development environment. After the solution is imported into the test environment, token acquisition fails with AADSTS700213: No matching federated identity record found. The same signed assembly and Entra app registration are used. What is the most likely cause?
- A plug-in assembly has been linked to a Power Platform managed identity that has access to Azure Key Vault. Inside Execute, how should the plug-in code obtain an access token to call the Key Vault REST API?
- A TypeScript service calls the Dataverse Web API to list active accounts in Seattle, returning only the account name and revenue plus the full name of each account's primary contact, in a single request. Which request meets the requirement?
- An integration sends PATCH requests to the Dataverse Web API at accounts({id}) to update account rows by GUID. If a row has been deleted, the integration must receive an error instead of silently recreating the account with that ID. Which header should the request include?
- A developer creates a contact through the Dataverse Web API and tries to set the parent account by including "[email protected]": "/account(1f8d2c4e-0000-0000-0000-000000000001)" in the body. The request returns 400 Bad Request. What is wrong?
- A Python service uses the Dataverse Web API to create an order header, create three order lines that reference it, and update the customer's last order date. If any of the five operations fails, none of the changes may persist. How should the developer send the requests?
- A team is building a new .NET 8 console application that connects to Dataverse with a Microsoft Entra ID app registration and uses the Organization service programming model with Entity and IOrganizationService. Which client library should the team use?
- A .NET service using the Organization service must return the total estimated revenue of open opportunities grouped by owner, computed by Dataverse on the server rather than by downloading every opportunity row. Which approach meets the requirement?
- A .NET integration using ServiceClient must create a sales order and its order lines so that either all rows are created or none are, with each request executed in sequence. Which request should the developer use?
- A .NET job uses RetrieveMultiple with a QueryExpression to export all contacts from an environment that holds 60,000 of them, but the export file always contains exactly 5,000 rows. The code calls RetrieveMultiple once and writes the returned entities. What should the developer change?
- A nightly integration that updates thousands of Dataverse rows through the Web API starts failing partway through with HTTP 429 Too Many Requests. The code treats any non-success status as fatal and stops the job. What should the developer change?
- A developer writes a C# library that wraps HttpClient to call the Dataverse Web API for a high-volume integration. The developer wants a reusable retry policy for service protection errors. Which policy design follows Microsoft guidance?
- A developer migrates a .NET data loader from raw HttpClient calls to the Dataverse ServiceClient class and asks whether the custom retry code for service protection limit errors must be ported as well. What does ServiceClient do when Dataverse returns a service protection limit error?
- A one-time data migration into Dataverse runs 200 parallel threads under a single application user and constantly receives service protection errors, so total throughput is worse than with fewer threads. Which change best improves throughput?
- A .NET job must create about 400,000 rows in a custom standard Dataverse table as quickly as possible. Source data is validated beforehand, so failures are rare, and the table has a synchronous plug-in on Create. Which approach should the developer use?
- Two integrations update the same Dataverse account rows. Each reads a row, applies changes and writes it back, and they have been silently overwriting each other's edits. The developer wants an SDK for .NET update to fail if the row changed after it was read. What should the developer implement?
- A .NET service updates Dataverse account rows through the Web API. To avoid overwriting other people's edits, it retrieves each row, stores the @odata.etag value, and later sends a PATCH with an If-Match header carrying that value. Some PATCH requests now fail with HTTP 412 Precondition Failed. What does the 412 response indicate, and how should the service respond?
- A developer is running a one-time migration that creates two million contact rows in Dataverse through the SDK for .NET. The data is already validated, and the synchronous custom plug-ins registered on contact Create only enforce rules the source already meets. The migration must run as fast as possible without disabling the plug-in steps for other users. What should the developer do?
- A nightly daemon written in C# runs without any signed-in user and must call the Dataverse Web API for the environment https://contoso.crm.dynamics.com. The app registration has a client secret, and an application user exists in the environment. When the daemon requests a token with MSAL using the client credentials flow, which scope should it request?
- A team registers an application in Microsoft Entra ID and grants it the Dynamics CRM API permission. A background service acquires an app-only token for https://fabrikam.crm.dynamics.com, and the token's audience and issuer are correct, yet every Web API call returns 401 Unauthorized. Other apps work in the same environment. What is the most likely cause?
- A support engineer runs an internal Windows desktop tool that reads and updates Dataverse case rows. Every change must be audited as the person using the tool, and each user must see only the rows their own security roles allow. How should the tool authenticate to Dataverse?
- A developer copies the access token from a working Microsoft Graph call and uses it as the bearer token for a Dataverse Web API request to https://northwind.crm.dynamics.com. The Graph call succeeds, but Dataverse rejects the request as unauthorized. The user has a valid Dataverse security role. What is the cause?
- A client application calls a Dataverse custom API that generates a large export file, and the call often takes long enough that proxies drop the open HTTP connection. The team wants to submit the request, release the connection immediately, and collect the result later, without rewriting the custom API. Which approach should the developer use?
- A Python service submits a Dataverse custom API as a background operation and receives a 202 Accepted response. The service must later learn when the operation has finished and whether it succeeded, without keeping the original connection open. Which approach meets this requirement?
- A C# console app already builds an OrganizationRequest for a custom API named contosoRecalculateTerritories and sends it with IOrganizationService.Execute. The developer now wants Dataverse to process this same request in the background and return immediately. How should the developer change the code by using the SDK for .NET?
- A background operation submitted for a custom API shows a status reason of Failed when the developer retrieves its backgroundoperation row. The developer needs to understand why the operation failed in order to fix the custom API. Where should the developer look first?
- A data science team works entirely in Python notebooks. They need to read Dataverse rows into pandas DataFrames, write cleaned values back, and occasionally create a custom table, without learning C# or hand-building OData requests. Which option should the developer recommend?
- A Python job runs in an Azure container app and uses the Dataverse SDK for Python. The security team forbids storing passwords or client secrets in code or configuration, and the job must still authenticate to Dataverse. How should the developer supply credentials to the SDK client?
- A .NET plug-in project has grown to dozens of tables, and late-bound Entity code keeps breaking from misspelled logical names that only fail at run time. The team wants strongly typed classes for its tables, columns, and choices generated from the environment's metadata. Which Power Platform CLI command should the developer use?
- A team is building a .NET 8 worker service that performs thousands of Dataverse operations per hour. One developer proposes hand-writing HttpClient calls to the Web API, while another proposes the Dataverse ServiceClient from the SDK for .NET. The team wants less custom plumbing for authentication, token refresh, and throttling. Which reasoning supports choosing the SDK?
- When a project row's status changes to Approved, the solution must call three external services, aggregate their responses, and write results back to Dataverse. The processing can take several minutes, and the user saving the row must not wait for it. Which design should the developer choose?
- An onboarding process for Dataverse partner rows must call an external verification service, wait up to several days for a human approval delivered by an external event, and then provision accounts in two systems. Progress must survive restarts, and completed steps must not run twice. Which Azure Functions capability fits this requirement best?
- A Power Automate cloud flow calls an HTTP-triggered Azure Function that rebuilds a large price list in Dataverse. Small jobs finish quickly, but large jobs fail because the HTTP call times out before the function responds. How should the developer redesign the call?
- An asynchronous Dataverse plug-in enriches each new lead by calling a slow third-party data service, sometimes several times per lead. As volume grows, the plug-in increasingly fails with timeout errors and the system jobs pile up. The enrichment does not have to finish within any fixed time. What should the developer do?
- A reconciliation routine compares Dataverse invoices with an ERP system and must run automatically every night at 02:00 UTC. The team will host it in Azure Functions. Which trigger configuration should the developer use?
- Dataverse is configured with a service endpoint that posts the execution context to an Azure Service Bus queue whenever an order row is updated. The developer must process each message in an Azure Function with built-in retry and dead-lettering for poisoned messages. Which trigger should the function use?
- A telemetry platform must ingest every change to several high-volume Dataverse tables, hundreds of events per second at peak, so that multiple analytics consumers can each read the stream independently at their own pace. Dataverse will post the events through a service endpoint. Which design fits best?
- When a Dataverse support case is created, an external system must be notified immediately through an Azure Function. The team wants Dataverse to call the function directly without a queue, and the endpoint must reject callers that do not present a shared secret. How should the developer configure this?
- An Azure Function app hosted in Azure must create and update rows in Dataverse. The security team prohibits client secrets and certificates in app settings or Azure Key Vault for this workload. What should the developer configure so the function can call Dataverse?
- An Azure Function uses its system-assigned managed identity to read secrets from Azure Key Vault successfully. Using the same identity, it acquires a token for https://contoso.crm.dynamics.com/.default, but every Dataverse Web API call returns 401 Unauthorized. What is the most likely cause?
- A team's Azure Function currently authenticates to Dataverse with an app registration whose client secret is stored in app settings and expires every six months, causing outages when rotation is missed. The function runs only in Azure. Which change best removes the rotation burden?
- An Azure Function written in C# uses the Azure Identity library to get tokens for Dataverse. In Azure it runs with a managed identity; on developer laptops it must use the developer's own Azure CLI sign-in. The team wants the same code in both places with no secrets and no environment-specific branches. Which credential should the code use?
- A cloud flow's Dataverse trigger returns an order row whose discount column is sometimes null. A later step multiplies the price by the discount, and the flow must use 0 when the discount is null instead of failing. Which expression should the developer use for the discount value?
- A cloud flow receives a Dataverse createdon value in UTC and must write it into an email as local time for a team in the Eastern Standard Time zone, formatted as yyyy-MM-dd HH:mm. The result must stay correct when daylight saving time begins or ends. Which expression should the developer use?
- A flow is triggered by an HTTP request whose JSON body sometimes contains customer.address.city and sometimes omits the address object entirely. The flow must read the city when present and continue with a null value when it is missing, without the action failing. Which expression should the developer use?
- A cloud flow reads a quantity field from a SharePoint list column of type text and compares it with 10 in an expression using greater(). Values such as 9 and 15 produce results that are inconsistent or raise type errors. The developer must compare the values numerically. What should the developer change?
- A cloud flow creates a Dataverse row, calls an external API, and updates the row. If any of these steps fails or times out, the flow must log the error to a table and notify an administrator, similar to try/catch in code. How should the developer structure the flow?
- In a cloud flow, a Catch scope runs after a Try scope fails. The administrator notification must include the name and error message of every action inside the Try scope that failed. Which expression should the developer use as the starting point to collect those details?
- A cloud flow uses Try and Catch scopes. When the Try scope fails, the Catch scope logs the error and sends an email, and the run then shows Succeeded in run history. Operations staff need failed runs to show as Failed so their monitoring alerts fire. What should the developer add?
- An Apply to each loop in a cloud flow processes 500 Dataverse rows one at a time and takes too long. Each iteration calls an API and also increments a shared counter variable that is used after the loop. The developer wants iterations to run in parallel without producing wrong results. What should the developer do?
- A cloud flow uses the Dataverse trigger When a row is added, modified or deleted on the case table. It should start only for cases whose priority is High (prioritycode value 1), and the team wants Dataverse to evaluate the filter so that no flow run is created for other cases. How should the developer configure the trigger?
- A cloud flow uses the SharePoint trigger When an item is created or modified on a documents list. The flow should start only when the item's Title contains the text INVOICE, and runs for other items must not be created. The trigger has no built-in filter for column values. What should the developer configure?
- A cloud flow's HTTP action calls a partner API that occasionally returns HTTP 503 during short outages. The developer wants the action itself to retry a limited number of times, waiting longer between each attempt so the partner can recover, before the action fails. How should the developer configure the action?
- A cloud flow uses the Dataverse trigger When a row is added, modified or deleted with Change type set to Modified on the account table. It should react only when the credit limit changes, but it currently runs every time any column on the account is updated. What should the developer change?
- Several cloud flows in a solution need the same customer-matching logic, and the solution is deployed from development to test to production through managed solutions. The developer wants one copy of the logic that every flow can call, with no URLs to update after each import. What should the developer build?
- A parent cloud flow in a solution fails at its Run a Child Flow action with an error stating that the flow can't be used as a child workflow because child workflows only support embedded connections. The child flow uses the SharePoint and Office 365 Outlook connectors. What should the developer change?
- A team notices that the same ten actions, which validate an address, look up a tax region in Dataverse, and format the result, are copied into five different cloud flows. A recent fix had to be applied five times, and one copy was missed. All flows live in one solution. Which change best addresses this?
- A developer is building a child flow that calculates a shipping quote. The parent flow must pass a weight and a destination to the child, and the child must return the quote amount and carrier name to the parent for use in later steps. How should the developer define these inputs and outputs?
- A solution's production cloud flows use a Dataverse connection reference that currently signs in as the developer who built them. The team wants the Dataverse connector connection to authenticate as an application identity instead. What should the developer set up?
- A production solution's cloud flows run their Dataverse actions through a connection reference that uses the personal account of a developer who is leaving the company next month. When the account is disabled, the flows will start failing. Which identity should the connection reference use going forward?
- A developer creates a Dataverse connector connection using service principal authentication with a valid client ID, secret, and tenant ID. When a flow using the connection runs, its List rows action fails with an error indicating the caller has no access to the environment or lacks privileges. What is the most likely cause?
- A cloud flow in production updates opportunity rows through a Dataverse connection reference that uses service principal authentication. An auditor reviewing the rows asks whose name appears in the Modified By column after the flow writes to them. What will the Modified By column show?
- A team is building an agent in Microsoft Foundry that must look up and update Dataverse rows on request, using standard tools rather than custom code for each operation. Copilot Studio is not involved. Which configuration should the developer use?
- A Foundry agent must answer questions across dozens of Dataverse tables whose columns change every sprint. One developer proposes writing and maintaining a custom OpenAPI tool definition for each query the agent needs; another proposes connecting the agent to the Dataverse MCP server. Which reasoning favors the MCP server?
- A developer adds an MCP tool to a Microsoft Foundry agent that points to a Dataverse environment's MCP endpoint. When the agent runs, it reports that no tools are available from the server, and no Dataverse calls succeed. Copilot Studio agents in the same environment use the Dataverse MCP server successfully. What should the developer check first?
- A Foundry agent connected to the Dataverse MCP server should only read data: it may search, describe, and query tables, but it must never create, update, or delete rows or tables. The control must be enforced in configuration, not left to the model's judgment. How should the developer configure the agent's MCP tool?
- A pro-code team is building an internal employee assistant in Microsoft Foundry. The HR department already maintains a published Copilot Studio agent that answers benefits and leave questions from topics and knowledge that HR makers update every week. The assistant must give the same HR answers, and the developers must not take over HR content. What should the developers do?
- A developer will call a Copilot Studio agent from a custom agent's backend by using the Copilot Studio client library with a signed-in user's token. The agent's authentication is set to Authenticate with Microsoft, it was created yesterday, and so far it has only been tried in the Copilot Studio test pane. What must be done on the Copilot Studio side before the calls can reach the agent?
- A custom agent's background service calls a published Copilot Studio agent through the Copilot Studio client library. The service obtains its token with the client credentials flow from an app registration that has a client secret, and every call is rejected as unauthorized. The Copilot Studio agent uses Authenticate with Microsoft. What is the most likely fix?
- A company wants one employee assistant that answers HR, IT and finance questions. Each department already owns a published Copilot Studio agent and must keep releasing it on its own schedule. Developers will build the assistant in Microsoft Foundry and need one entry point for employees. Which design meets the requirements?
- A developer is extending a Microsoft Foundry agent that helps account managers. The architect proposes Work IQ so the agent can draw on the user's emails, meetings and business records, including Dataverse data, without the team building its own indexing pipeline. What does Work IQ provide to the agent?
- A Foundry agent answers sellers' open-ended questions such as which accounts they own have stalled opportunities and what was discussed in recent meetings with those customers. The current plan is to write a dedicated Dataverse Web API query for each expected question. Answers must respect each seller's access and the team wants minimal custom retrieval code. What should the developer do instead?
- A Foundry agent uses Work IQ to answer questions that combine a user's meetings with Dataverse records. During testing, a regional manager and a sales representative ask the same question and get different results. The Work IQ connection was created by a developer, and a Global Administrator granted tenant-wide admin consent for the Work IQ permission. Whose permissions determine what the agent can retrieve?
- A developer is adding chat with an existing Copilot Studio agent to an internal .NET web app. Employees already sign in to the app with Microsoft Entra ID, and the agent uses Authenticate with Microsoft. The developer wants a supported, code-first integration that sends the employee's identity to the agent. Which approach should the developer use?
- A console app uses the Copilot Studio client library. The app registration has the delegated Copilot Studio invoke permission with admin consent, and the user signs in successfully. Starting a conversation fails with an error that the agent cannot be found. The settings file contains the correct environment ID and the agent name exactly as it appears in the Copilot Studio agent list. What should the developer change?
- A developer is writing the message loop for an app that talks to a Copilot Studio agent through the Copilot Studio client library in .NET. The agent sends a greeting when a conversation begins, and the user then asks several follow-up questions that rely on earlier context. In which order should the code exchange messages with the agent?