09 de novembro de 2026
Dataverse: low-code plugins e o Pro-code vs no-code na lógica
Entenda os low-code plugins em Power Fx no Dataverse: eventos de tabela, transação síncrona, limites frente ao plugin C# e quando cada abordagem vale.
Durante anos a regra era clara: lógica de servidor no Dataverse significava escrever um plugin em C#, compilar, registrar via Plugin Registration Tool e versionar o assembly numa solução. Os low-code plugins mudam esse cenário ao permitir escrever lógica de servidor transacional em Power Fx, sem assembly, sem build pipeline de .NET. Mas isso não aposenta o plugin pro-code — apenas redesenha onde cada um faz sentido. Este post compara as duas camadas na prática para quem já opera Dataverse em escala.
O que é, de fato, um low-code plugin
Um low-code plugin é uma expressão Power Fx que roda no servidor, dentro do mesmo event framework dos plugins tradicionais. Existem dois sabores:
- Automated (event-driven): dispara em Create/Update/Delete de uma tabela, de forma análoga a um plugin registrado num stage. Roda síncrono, dentro da transação da operação.
- Instant (on-demand): é invocado explicitamente — por um botão de command bar, por outro fluxo ou por uma chamada — recebendo e devolvendo parâmetros, funcionando como uma função reutilizável de servidor.
A diferença crucial frente a um Power Automate flow é a execução síncrona e transacional. Se o low-code plugin falhar num evento de Create, a operação inteira sofre rollback — o registro não é criado. Isso é o comportamento que você quer para validação crítica e cálculo consistente, e que um flow (assíncrono, fora da transação, com latência de segundos) não entrega.
Por que isso importa para quem já usa plugins C#
Muita regra de negócio que hoje justifica um plugin em C# é, na verdade, simples: validar que uma data fim é maior que a data início, impedir desconto acima de um teto, preencher um campo derivado, bloquear transição de status inválida. Escrever isso em C# traz um custo que não é o código em si, e sim o entorno:
- projeto .NET, SDK, assinatura do assembly;
- Plugin Registration Tool e steps registrados manualmente;
- ciclo de build e versionamento do assembly dentro da solução;
- alguém na equipe que saiba C# para manter.
Para esse tipo de regra, o low-code plugin elimina quase todo esse overhead. A lógica fica declarada em Power Fx, dentro da solução, editável por quem já conhece a linguagem dos canvas apps, com rollback transacional garantido. É a diferença entre contratar um especialista .NET para proteger uma regra de uma linha e deixar essa regra no alcance do time de Power Platform.
Os limites que ainda te prendem ao pro-code
Low-code plugins não são um substituto universal. Há fronteiras claras onde o plugin C# continua sendo a resposta certa:
- Pre-images e post-images com manipulação fina: cenários que dependem de comparar o estado antes/depois no nível que o SDK oferece ainda são mais naturais em C#.
- Chamadas externas e I/O pesado: integrar com APIs REST, serviços externos, processamento em lote dentro da transação — território de plugin C# ou de desacoplar para fila/Service Bus.
- Lógica algorítmica complexa: loops profundos, estruturas de dados elaboradas, bibliotecas .NET — Power Fx não foi desenhado para isso.
- Stages de execução granulares: o controle fino sobre pre-validation/pre-operation/post-operation, order/rank e execução assíncrona registrada manualmente continua sendo do mundo pro-code.
- Performance em altíssimo volume: para o caminho quente de milhões de operações, o plugin compilado tende a ter overhead menor e comportamento mais previsível.
Também vale lembrar que low-code plugins são uma funcionalidade em evolução contínua na plataforma: antes de padronizar algo crítico em produção, valide a disponibilidade e o status (GA vs preview) dos recursos específicos que você pretende usar no seu tenant.
Um roteiro de decisão
Na prática, use esta ordem de perguntas ao decidir onde colocar uma regra de servidor:
- A regra precisa ser síncrona e transacional? Se não (pode rodar em segundos, sem rollback), um Power Automate flow com trigger no Dataverse resolve com menos acoplamento.
- Se precisa ser síncrona, a lógica é expressável em Power Fx sem I/O externo pesado nem algoritmo complexo? Se sim, low-code plugin — menos overhead, mais gente da equipe consegue manter.
- Se depende de chamadas externas, bibliotecas .NET, controle fino de stage/image ou performance de caminho quente? Plugin C# registrado no event framework.
- É cálculo persistível e consultável em volume? Reavalie se não é caso de rollup/formula column em vez de qualquer plugin (ver nossos posts sobre formula columns e calculated/rollup).
O padrão saudável que vemos em projetos maduros é híbrido: validações e preenchimentos simples como low-code plugins (editáveis pelo time de negócio), integrações e algoritmos pesados como plugins C# versionados, e tudo convivendo na mesma solução gerenciada com ALM previsível.
Se sua empresa quer modernizar a camada de lógica do Dataverse — decidir o que migrar de C# para low-code, o que manter pro-code e como governar isso em soluções gerenciadas sem virar colcha de retalhos — a consultoria da Dynamic Soluções ajuda a desenhar essa arquitetura e a treinar seu time nas duas abordagens.
For years the rule was clear: server-side logic in Dataverse meant writing a C# plugin, compiling it, registering it through the Plugin Registration Tool, and versioning the assembly inside a solution. Low-code plugins change that picture by letting you write transactional server-side logic in Power Fx — no assembly, no .NET build pipeline. But this does not retire the pro-code plugin; it just redraws where each one makes sense. This post compares the two layers in practice for teams already running Dataverse at scale.
What a low-code plugin actually is
A low-code plugin is a Power Fx expression that runs on the server, inside the same event framework as traditional plugins. There are two flavors:
- Automated (event-driven): fires on Create/Update/Delete of a table, much like a plugin registered on a stage. It runs synchronously, within the operation's transaction.
- Instant (on-demand): it is invoked explicitly — by a command bar button, by another flow, or by a call — receiving and returning parameters, behaving like a reusable server-side function.
The crucial difference from a Power Automate flow is synchronous, transactional execution. If the low-code plugin fails on a Create event, the entire operation rolls back — the record is not created. That is exactly the behavior you want for critical validation and consistent calculation, and it is something a flow (asynchronous, outside the transaction, with seconds of latency) cannot deliver.
Why this matters for teams already using C# plugins
Much of the business logic that justifies a C# plugin today is, in truth, simple: validate that an end date is greater than a start date, prevent a discount above a ceiling, fill a derived field, block an invalid status transition. Writing that in C# carries a cost that is not the code itself but everything around it:
- a .NET project, SDK, assembly signing;
- the Plugin Registration Tool and steps registered by hand;
- the build cycle and assembly versioning inside the solution;
- someone on the team who knows C# to maintain it.
For that kind of rule, the low-code plugin removes almost all of this overhead. The logic lives declared in Power Fx, inside the solution, editable by anyone who already knows the language of canvas apps, with guaranteed transactional rollback. It is the difference between hiring a .NET specialist to protect a one-line rule and keeping that rule within reach of the Power Platform team.
The limits that still tie you to pro-code
Low-code plugins are not a universal replacement. There are clear boundaries where the C# plugin remains the right answer:
- Pre-images and post-images with fine-grained handling: scenarios that depend on comparing before/after state at the level the SDK offers are still more natural in C#.
- External calls and heavy I/O: integrating with REST APIs, external services, batch processing within the transaction — C# plugin territory, or decoupling to a queue/Service Bus.
- Complex algorithmic logic: deep loops, elaborate data structures, .NET libraries — Power Fx was not designed for this.
- Granular execution stages: fine control over pre-validation/pre-operation/post-operation, order/rank, and manually registered async execution still belongs to the pro-code world.
- Performance at very high volume: for the hot path of millions of operations, the compiled plugin tends to have lower overhead and more predictable behavior.
It is also worth remembering that low-code plugins are a continuously evolving platform feature: before standardizing something critical in production, validate the availability and status (GA vs preview) of the specific capabilities you intend to use in your tenant.
A decision roadmap
In practice, use this order of questions when deciding where to put a server-side rule:
- Does the rule need to be synchronous and transactional? If not (it can run in seconds, with no rollback), a Power Automate flow triggered on Dataverse solves it with less coupling.
- If it must be synchronous, is the logic expressible in Power Fx without heavy external I/O or complex algorithms? If yes, a low-code plugin — less overhead, more of your team can maintain it.
- If it depends on external calls, .NET libraries, fine stage/image control, or hot-path performance? A C# plugin registered in the event framework.
- Is it a persistable, queryable calculation at volume? Reconsider whether it is actually a rollup/formula column case instead of any plugin (see our posts on formula columns and calculated/rollup).
The healthy pattern we see in mature projects is hybrid: simple validations and field population as low-code plugins (editable by the business team), integrations and heavy algorithms as versioned C# plugins, and everything coexisting in the same managed solution with predictable ALM.
If your company wants to modernize the Dataverse logic layer — deciding what to migrate from C# to low-code, what to keep pro-code, and how to govern it in managed solutions without turning into a patchwork — Dynamic Soluções' consulting helps you design that architecture and train your team in both approaches.
