Summary
Across this module, you move from a Dataverse plug-in solution that works under light use to one hardened against the demands of production. That means a synchronous step that no longer stalls under load, and a reusable operation other systems can call directly.
It also means an approval moment other systems can subscribe to without depending on the approval logic itself, and an external call that authenticates without a stored secret. This is the same path the equipment-provisioning scenario follows, from a working prototype to a production-ready solution.
What you learned
- You diagnose a slow synchronous plug-in against Dataverse's time and resource limits, and choose asynchronous execution when a result doesn't need to exist immediately. You also keep plug-in code stateless and scoped, and measure the fix with the Plug-ins dashboard and tracing.
- You expose a directly callable operation as a custom API, choosing its binding type, request and response contract, function-versus-action design, and Allowed Custom Processing Step Type. Then you implement the logic in a plug-in that reads
InputParametersand writesOutputParameters. - You catalog a custom-API-based event such as
OnRequestApproved, designed with clear intent, a narrow scope, and a lightweight payload. Subscribers then discover and react to it through Power Automate's "When an action is performed" trigger, instead of coupling to the approval logic directly. - You replace a stored secret with Power Platform managed identity, built on federated identity credentials. This separates the authentication step that proves the plug-in's identity from the authorization step that grants it access to an Azure resource.