workflowengineby Optimajet · since 2014

v22.1.0 · BPMN 2.0 import · WorkflowEngine.NETCore-BpmnPlugin on NuGet · a licensed add-on, not part of Workflow Engine Free · Page last updated

BPMN Support in the .NET Workflow Engine

Your analysts draw in BPMN. That should not decide what your product runs on. Workflow Engine by Optimajet reads a BPMN 2.0 file, converts it into a scheme the engine executes, and names every element it could not carry across. The result runs in-process inside your own ASP.NET application, against your own database, with no JVM, no modeling server and no orchestration cluster to operate.

purchase-approval.bpmnBpmnPlugin · import
Check budgetApprove×
BPMN 2.0, as your analyst drew it
convert
ApproveSign offRequestedInitial stateIn reviewFor set stateApprovedFinal state
A Workflow Engine scheme, ready to execute

Every import ends with a log. It names the elements that converted, the ones that came in as plain activities, and the ones it skipped, with the reason for each. The same findings are attached as comments on the canvas, at the exact spot where you fix them.

Import the diagram once andBPMN becomes a process the engine runs

BPMN 2.0 is the OMG notation business analysts draw processes in. Tasks are rectangles, gateways are diamonds, events are circles, and the whole diagram serializes to XML. It is a notation, not a runtime, and a valid BPMN diagram may be an illustration that no engine can execute.

Workflow Engine is not a BPMN engine and does not pretend to be. It executes its own scheme format, built from three elements: activities, transitions, and commands. BPMN support is the bridge between the two. The plugin maps each BPMN element onto the closest runtime construct, and what it cannot map it records. The scheme it produces opens in Workflow Designer like any scheme drawn by hand, and runs on the same .NET workflow engine as the rest of your processes.

One file in, one scheme out

You upload a .bpmn file in Workflow Designer. The plugin reads the BPMN 2.0 XML and writes a Workflow Engine scheme into your database. From that moment the scheme is the thing that runs.

Initial activity

It runs where your code runs

The engine is a NuGet package inside your own application. No BPMN platform to deploy, no JVM, no orchestration cluster, and no diagram leaving a network you control.

One direction only

The plugin converts BPMN into a scheme and cannot convert a scheme back. Plan it as a one-way migration, with the Workflow Engine scheme as the editing format from then on.

BPMN elements in the palette

Registering the plugin also adds a BPMN tab to the designer. The Parallel Gateway is worth having on its own, as the simplest way to fork and join subprocesses.

Nothing is dropped in silence

Anything the importer cannot carry across is written to the import log with a reason, and commented on the affected element in the designer.

A licensed add-on

BPMN import is licensed separately. The plugin checks that restriction when it is registered and throws if the license does not cover it, so you find out at startup rather than in production.

Current activity

When BPMN import is the right tool

The importer reads BPMN 2.0 XML, so the tool that drew the file mostly does not matter. Camunda Modeler, Signavio, Bizagi and the browser-based editors all export the same standard, and Camunda's implementation attributes are read as well, so service tasks arrive with their action names attached. What decides whether this is worth doing is not the tool. It is the situation.

01

Moving off a BPMN platform

You have a library of diagrams running on another engine, and re-drawing each one in a new designer is the reason the migration keeps getting postponed. Import them, add the runtime wiring, deploy. The flow structure transfers; commands, rules, actions and anything on the skipped list are the new work.

02

Documentation that has to match production

Compliance keeps the approved process as a BPMN diagram in a modeling tool. Import that file and the executable scheme starts life as the approved design, so the audit question stops being whether the running process still resembles the document.

03

A process someone hands you

A partner, a vendor or another department sends the integration workflow as BPMN 2.0 XML. Open the file rather than reading it and re-typing it into a designer, which is where transcription errors come from.

And when it is not worth it

Two cases, said plainly. If you have three simple processes and no existing diagrams, drawing them in Workflow Designer takes less time than importing and re-wiring them. And if the elements on the skipped list are the point of your diagram, if you need certified conformance to the standard, or if the process is a choreography between organisations rather than something one application runs, then a BPMN engine is the right tool for that job and this is not it. Workflow Engine is a .NET workflow engine that reads BPMN. It has never claimed to be a BPMN engine, and the coverage below is written so you can check that against your own file before you spend a day on it.

Which BPMN elements convert and which are skipped

Import is not lossless, so the question worth answering early is which parts of your diagram land on which side. Tasks, sequence flows, exclusive and parallel gateways, start and end events, and timer and message catch events convert into something the runtime executes. Boundary events, pools and their message flows, complex gateways, event subprocesses, data objects and artifacts are skipped and logged. Everything in between arrives as a plain activity that holds its place in the flow and waits for you.

BPMN elementWhat it becomes in Workflow Engine
Start eventInitial activity, the first activity the runtime executes
End eventFinal activity, completes the process instance
Service taskIntermediate activity with an auto-trigger
Exclusive (XOR) gatewayCustom activity type; outgoing transitions act as conditional branches
Parallel (AND) gatewayCustom activity type; enables concurrent execution paths
Timer catch eventIntermediate activity with a timer trigger
Message catch eventIntermediate activity that waits for an external command
Terminate eventFinal activity that ends all parallel branches
Runs as drawn

Converts and runs

Sequence flows become transitions. Conditions on the outgoing flows of an exclusive gateway become the condition expressions on each transition. A parallel gateway produces concurrent outgoing transitions and the runtime executes every branch.

  • Generic, Service and Receive tasks. The task ID becomes the activity name and the task name becomes the activity state.
  • Exclusive, Parallel and Event-Based gateways. Both action-based conditions and expressions are supported on the exclusive gateway.
  • Generic start and end events, plus the Terminate end event.
  • Message and Timer intermediate catch events.
  • Subprocesses, which become inline activities, so an embedded scheme can be reused by other schemes.
  • Implicit parallelism, which is made explicit on import and drawn with dashed start and dash-dot join lines.
Needs a decision

Imports whole, then waits on you

The structure arrives intact, and one choice is left open. Make it in Workflow Designer and the process behaves the way the diagram intended.

  • Message and Timer start events. A start activity is created with an outgoing transition triggered by a command or a timer, and you confirm which.
  • Several start events in one diagram. They merge into a single start activity with a transition for each original event.
  • Service task action names. The importer reads camunda:topic, camunda:delegateExpression or the implementation property, splits that string on commas, and uses the parts as action names, so check that those names match actions you actually have.
Arrives empty

Comes in as a plain activity you finish by hand

The element keeps its place in the flow, so the diagram still reads correctly, and its specialized behavior is yours to wire. Each one is named in the import log and commented on the canvas.

  • User tasks. Support arrives with the plugin that integrates Workflow Engine with forms.
  • Script, Manual, Send and Business Rule tasks.
  • Inclusive gateways. Not supported by default because of how subprocesses are created, and Optimajet can add support quickly if it blocks you.
  • Signal, Conditional and Link intermediate catch events, and every intermediate throw event.
  • Call activities.
Not imported

Skipped, with the reason in the log

These have no Workflow Engine equivalent, so the importer records them instead of guessing. Read this list first when you size a migration. It is where the re-drawing work comes from.

  • Boundary events attached to activities.
  • Pools and message flows between them.
  • Complex gateways.
  • Event subprocesses.
  • Data objects and artifacts, which includes the text annotations analysts write the rules in.
  • Lanes, which are ignored because Workflow Engine has no equivalent grouping.
  • Custom extension elements, apart from the Camunda implementation attributes read on service tasks, and non-executable attributes such as documentation and graphical layout.

That is the outline. Every task, gateway and event is documented one at a time, with a screenshot of the converted result, in the BPMN elements reference. Coverage is expanding: user tasks arrive with the forms integration, and the inclusive gateway can be added quickly on request.

What your process gains once it runs on the engine

A BPMN diagram describes a process. A Workflow Engine scheme runs one, and a valid scheme is always ready to execute. That is what the import is for, and it is the other half of the decision you just weighed. Each item below is behavior a diagram can only annotate and the scheme actually enforces.

Transitions that fire on their own

A sequence flow only points somewhere. A transition fires on a timer or a command, carries a condition, and decides whether the branch runs in parallel. The deadline your diagram documented in a text annotation becomes a timer the runtime actually honours.

Commands restricted to real people

Actors are part of the scheme, so a command can be limited to named users or roles right where the process is drawn. That is access control the engine enforces, and BPMN has no way to state it on the diagram.

Any state, on demand

A running process can be forced into any of its states. When a case goes wrong at two in the morning, support moves it instead of writing a database update, and the process carries on from there.

The canvas shows it running

Pass a process id instead of a scheme code and Workflow Designer renders the live instance, highlighting the current activity as the process moves. The diagram your analyst drew becomes the screen your support team watches.

Subprocesses you can manage together

Parallel branches become dependent subprocesses rather than extra tokens. You can list every activity the parent and its children are sitting in, and act on the whole family at once. Implicit parallelism in the diagram is made explicit on import, drawn with dashed start and dash-dot join lines.

Your database and your deployment

The process runs in your application on your own storage: SQL Server, PostgreSQL, MongoDB, MySQL, Oracle, or SQLite outside production. One deployment can serve many customers, with the isolation model chosen per tenant on the multi-tenant architecture page.

purchase-approval · before and after importcurrent activity
BPMN 2.0 DIAGRAMReview requestPay×Manager approves.Within 3 days.Only if the amount is over 5k.A note. Nothing runs it.WORKFLOW ENGINE SCHEMEReject3 daysApprove ManagerSign off ?Amount > 5kRequestedInitial stateIn reviewFor set statePaidFinal stateCancelledFinal state

The note on the BPMN diagram is an artifact, and the importer skips it, because there was never anything in it to run. What it described is now on the scheme and enforced. A green pill is a command someone can run, and it carries the actor allowed to run it, so "Approve Manager" is one setting rather than a note about who ought to click. The question mark marks a transition with a condition, and the expression sits under it as a comment. Gray is what the runtime settles alone, which is why the three days are a gray timer. Orange marks where this instance is right now, and blue is both the way back and the way it ends.

How to enable BPMN import in a .NET app

One NuGet package and one registration on the runtime. There is no external modeler service to stand up and no second runtime to operate. Register the plugin where your WorkflowRuntime is built, restart, and Workflow Designer gains a BPMN tab on the elements panel and an Upload BPMN menu item. If your license does not cover BPMN, the plugin throws at that registration, so the failure is loud and happens at startup.

Install the pluginbash
dotnet add package WorkflowEngine.NETCore-BpmnPlugin
Register it on the runtimecsharp
var bpmnPlugin = new BpmnPlugin();

var runtime = new WorkflowRuntime()
    // ...your usual runtime configuration...
    .WithPlugin(bpmnPlugin)
    .Start();

What the plugin registers

BpmnPlugin implements IWorkflowPlugin and adds eight custom activity types to the runtime: ServiceTaskActivity, ExclusiveGateway, ParallelGateway, MessageCatchEvent, TimerCatchEvent, StartEvent, EndEvent and TerminateEvent, plus the designer action bpmnplugin_uploadbpmn. They behave like any other activity type once they are there.

Changing how an element converts

The importer is a set of visitor classes: TaskNodeVisitor, GatewayNodeVisitor, EventNodeVisitor, SubprocessNodeVisitor, CallActivityNodeVisitor, the matching flow visitors, and ProcessVisitor for the whole process. Inherit the one you care about, build a converter, and hand it to the plugin. Call activities, which the stock importer leaves as plain activities, are the usual first candidate.

Custom conversion for one element typecsharp
BpmnConverter customBpmnConverter = BpmnConverterBuilder
    .Create()
    .WithCustomCallActivityNodeVisitor(new CustomCallActivityNodeVisitor())
    .Build();

var bpmnPlugin = new BpmnPlugin(customBpmnConverter);

Setup, the upload dialog and the full visitor list are covered in the BPMN plugin guide, and the rest of what ships alongside it, including how a plugin reaches the designer palette, is on the Workflow Engine plugin system page.

From a modeler file to a running .NET process

The alternative to importing is re-drawing, and re-drawing is where process migrations die. Copying one diagram into a designer by hand takes hours, invites transcription errors, and leaves the design model and the running process drifting apart from day one. The import takes minutes per diagram and keeps the structure, so the work that is left is the work that was always going to be new: command bindings, rules, actions, and the elements on the skipped list.

  1. 1

    Upload the .bpmn file

    Pick the file in the Upload BPMN dialog, set the main scheme code, and decide whether the import may overwrite schemes already in your database. That box is unchecked by default, so a re-import cannot quietly replace a scheme somebody has since adjusted.

  2. 2

    The importer converts every element

    Tasks, gateways and events become their runtime counterparts, sequence flows become transitions, conditions on exclusive gateway flows become condition expressions, subprocesses become inline schemes, and implicit parallelism is made explicit.

  3. 3

    Read the log before you touch anything

    The import log names what converted, what came in as a plain activity, and what was skipped, with a reason for each. You can copy it and send it to support. The same findings are attached as comments on the elements in the designer, so the gaps are marked where you will fix them.

  4. 4

    Finish in the designer and start a process

    The result is an ordinary Workflow Engine scheme. Wire the remaining triggers, add code actions, set timer durations, then start processes against it. The BPMN file stays what it was, the input.

Re-author by hand

Re-create every activity, transition, gateway and condition in the designer. Hours per process, transcription errors, and a design model that diverges from the running process from the first change.

Import the diagram

Upload the BPMN 2.0 file, read the log, add the runtime wiring. Minutes per process, the core flow structure preserved, and the diagram your analysts maintain stays the one the engine runs.

One limit, stated plainly. The importer does not reproduce the behavior of the elements it skips, and it will not invent it. The structure survives, the log says exactly where the gaps are, and the designer is where you close them. Teams weighing this against staying on a JVM platform can read the comparison of Java workflow engines first.

What BPMN import costs

BPMN import is a paid add-on rather than something every tier carries, and the sooner you know that the better your plan. The BpmnPlugin checks for a BPMN license restriction when it is registered and throws on OnPluginAdd if the license does not include it, so a missing add-on shows up the first time you run the app. Workflow Engine Free cannot import BPMN. It still runs the engine and the full designer, so everything else on this page is yours to evaluate for nothing.

Product and editionBPMN import add-on
Workflow Engine FreeNot available
Workflow Engine Team and Complete$2,500 one time
Workflow Engine NEO Subscription$300 per year
Workflow Engine NEO Business$3,500 one time
Workflow Engine NEO SaaS and Workflow Engine NEO EnterpriseIncluded

Every license is perpetual on-premise per software product, with a subscription option also available, and there are no royalties and no per-execution fees. The full table sits on the Workflow Engine pricing page, and the tier that already bundles BPMN import alongside the multi-tenant API is covered on the Workflow Engine NEO product page.

Common questions

Direct answers to what teams ask when they bring BPMN diagrams to a .NET application, including what converts automatically, which mappings need manual review, what the plugin costs, and what you can change.

  1. Can I run BPMN 2.0 diagrams on .NET without a BPMN platform?

    Yes. Workflow Engine by Optimajet is a .NET library you add with NuGet and run in-process inside your own application. The BPMN Plugin converts supported parts of a BPMN 2.0 XML file into one or more native Workflow Engine schemes. After you review the conversion and complete any required runtime wiring, Workflow Runtime executes successfully converted and validated schemes in-process, using your configured persistence. You deploy your application and its persistence, but no separate JVM, BPMN modeling server, or orchestration cluster.

  2. Which BPMN modeling tools can I import from?

    The importer accepts BPMN 2.0 XML. The documentation names Camunda Modeler, Signavio, and Bizagi as source examples; validate a representative export because supported elements, exporter versions, and vendor extensions vary. The importer also reads supported non-default Camunda implementation attributes on service tasks and turns them into Workflow Engine action names. It partially preserves the first BPMN DI diagram: activities keep their imported X/Y positions, and BPMN edge data supplies one calculated transition point. The importer preserves part of the diagram layout, but it does not turn BPMN documentation or other visual metadata into Workflow Engine behavior.

  3. Is Workflow Engine a BPMN engine?

    No. Workflow Engine has its own execution model, so full conformance with the BPMN standard is not a goal. The BPMN Plugin adds BPMN elements to Workflow Designer and maps supported BPMN flow elements into native Workflow Engine schemes. A successfully converted scheme can run after you review the result and complete the application-specific actions, commands, rules, providers, and other required wiring.

  4. Does BPMN import require a license?

    Yes. BPMN import is a paid add-on, and plugin registration fails when the current license does not include the BPMN entitlement. It is unavailable with Workflow Engine Free. The add-on is $2,500 one time for the Workflow Engine Team and Complete editions, $300 per year for Workflow Engine NEO Subscription, and $3,500 one time for Workflow Engine NEO Business. It is included with Workflow Engine NEO SaaS and Workflow Engine NEO Enterprise.

  5. Which BPMN elements convert on import?

    The mapping depends on the exact element and topology. Generic start and end events become initial and final activities. Message and Timer start definitions map automatically to command or timer triggers; multiple event-defined starts can share an initial activity, while multiple generic starts are rejected. Service tasks become auto-triggered activities, and supported non-default Camunda implementation attributes can supply action names. A splitting Exclusive Gateway with several outgoing flows becomes a custom activity; its flow conditions become named Conditions or Expressions, while a join or single-outgoing gateway remains an ordinary activity. Parallel gateways create concurrent paths. Message and Timer Intermediate Catch Events have specialized command and timer mappings, but timer cycles and unsupported catch definitions produce issues. After an Event-Based Gateway, a supported catch-event or Receive Task node can be collapsed into a triggered transition. Non-empty subprocesses can create inline schemes, but event-start and loop or multi-instance semantics are not preserved automatically.

  6. Which BPMN mappings are partial or unsupported?

    Supported BPMN flow elements are converted into native Workflow Engine activities and transitions, while some mappings need review. Interrupting Message and Timer Boundary Events become triggered transitions; other definitions and non-interrupting behavior may require manual adjustment and can produce an issue. Each root BPMN process can become a separate scheme, while pool and message-flow choreography is not reproduced. A Complex Gateway is imported as a regular Workflow Engine activity, and its outgoing flows become transitions; the importer reports that its BPMN semantics are not supported. An Event Subprocess follows the ordinary inline-subprocess path, so its event-start behavior is not preserved automatically. Data objects and artifacts do not become runtime constructs. Lanes, documentation, extensions, and other BPMN-specific details may need to be checked against the source diagram. BPMN DI layout is partially preserved.

  7. What happens to elements the importer cannot map?

    The importer converts supported flow into native Workflow Engine activities and transitions. When a task or gateway has no direct mapping, it can still be represented as an ordinary activity or transition that you complete in Workflow Designer. Detected limitations are included in the import report and, when there is a corresponding Workflow Engine element, may also be added to that activity or transition as a comment. The report includes the save status of each generated scheme. Review the converted scheme against the source diagram and complete any application-specific wiring before execution.

  8. Can I export a Workflow Engine scheme back to BPMN 2.0?

    No. The BpmnPlugin is import-only. A scheme edited in Workflow Designer or changed at runtime cannot be exported back to BPMN XML. Use the designer’s own scheme export for backups and the native Simple Process Notation for version control. Plan the import as a one-way migration, with the Workflow Engine scheme as the editing format from that point on.

  9. Can I edit an imported BPMN process afterwards?

    Yes. After import, the result is a native Workflow Engine scheme that opens in Workflow Designer. You can edit ordinary activities and transitions and add actions, conditions, rules, and timers. BPMN custom activities keep BPMN-specific Designer behavior so they can follow the corresponding standard BPMN elements as closely as the Workflow Engine model allows.

  10. How do I install the BPMN Plugin?

    Add the NuGet package with dotnet add package WorkflowEngine.NETCore-BpmnPlugin, register it on your runtime with .WithPlugin(new BpmnPlugin()), and restart the application. Workflow Designer then gains a BPMN tab on the elements panel and an Upload BPMN menu item. In the upload dialog you set the main scheme code and decide whether the import may overwrite schemes already in your database.

  11. Can I change how a BPMN element is converted?

    Yes. The importer is built from visitor classes, including TaskNodeVisitor, GatewayNodeVisitor, EventNodeVisitor, SubprocessNodeVisitor, CallActivityNodeVisitor, the matching flow visitors, and ProcessVisitor for the whole process. Inherit the one you want to change, register it through BpmnConverterBuilder, and pass the resulting converter to the BpmnPlugin constructor. Call activities, for example, can get your own conversion logic without touching the engine.

  12. Is this a realistic way to migrate off Camunda?

    It can provide a useful starting point. The importer accepts BPMN 2.0 XML; validate a representative export from Camunda Modeler, Signavio, or Bizagi. Supported structure can map into one or more native schemes. Review partial mappings and BPMN-specific behavior against the source diagram, then recreate or verify commands, actions, rules, providers, timers, and other application-specific behavior. Treat the import as a one-way migration aid, not a fidelity-preserving converter or a time estimate.

Bring the diagram that has been hard to run

Send us a real .bpmn file, not a toy one. We import it together, read the log line by line, and you leave knowing which parts of your process run as drawn and which need a hand in the designer. The session runs an hour. If you would rather start in code first, Workflow Engine Free gets the engine and the full designer running inside your own application, and BPMN import is added with the license when you are ready for it.

In production since 2014 at Dell, KPMG, Bosch, and GE Honda Aero Engines.