mimimport

package
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 26, 2026 License: AGPL-3.0 Imports: 4 Imported by: 0

Documentation

Overview

Package mimimport converts Microsoft Identity Manager (MIM/FIM) workflow definitions into Atlas-executable BPMN 2.0 XML.

MIM does not emit BPMN. Its workflows are serialised as XOML — the markup of the Windows Workflow Foundation (WF) — and are normally extracted with the FIMAutomation cmdlet Export-FIMConfig, which wraps each WorkflowDefinition's XOML as an attribute inside a resource-graph XML. This package accepts either raw XOML or such a wrapper (it locates and unescapes the embedded XOML) and produces a single <definitions> document the Atlas compiler can deploy.

Losslessness

The translation follows one rule: nothing is silently dropped. Where a WF construct has a faithful BPMN counterpart it is emitted natively (see the mapping in Convert); where it does not, the activity is still emitted — as a typed or plain task placeholder — and its original markup is preserved in an <atlas:mimSource> extension element together with a <documentation> note. A Report lists every produced node with a status of native, preserved or manual-review, so the lossy points are explicit rather than hidden.

The conversion reproduces the workflow's *structure and intent*, not MIM's runtime semantics: the authentication/authorization/action request model, the FEEL bodies of individual activities, and diagram layout are intentionally out of scope for a first pass and are flagged for manual review where relevant.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Note

type Note struct {
	NodeID   string // BPMN id of the produced element
	Activity string // XOML activity local name it came from
	Kind     string // BPMN element kind (userTask, serviceTask, exclusiveGateway, …)
	Status   Status
	Detail   string // what a reviewer should know (why preserved / what to check)
}

Note is one entry in a conversion Report.

type Report

type Report struct {
	ProcessID string
	Notes     []Note
}

Report is the per-node ledger of a conversion.

func (Report) Count

func (r Report) Count(s Status) int

Count returns how many notes carry the given status.

func (Report) String

func (r Report) String() string

String renders the report as a stable, human-readable summary (one line per node) suitable for stderr or a CLI log.

type Result

type Result struct {
	BPMN   []byte
	Report Report
}

Result is the output of a conversion: the BPMN document and its report.

func Convert

func Convert(r io.Reader, name string) (Result, error)

Convert reads a MIM/FIM XOML workflow (or an Export-FIMConfig wrapper that embeds one) and returns Atlas-deployable BPMN 2.0.

Control flow is mapped natively:

SequentialWorkflow / Sequence  → a chain of flow nodes
IfElseActivity (+ branches)    → an exclusive gateway split/join
ParallelActivity (+ branches)  → a parallel gateway split/join
WhileActivity                  → an exclusive-gateway loop

Leaf activities are mapped by intent:

Approval*        → userTask       (native)
Notification/Email → serviceTask  (native, type mim-notification)
FunctionEvaluator → serviceTask   (preserved, type mim-function)
PowerShell*      → serviceTask    (preserved, type mim-powershell)
Create/Update/Delete/Group/Resource → serviceTask (preserved, type mim-resource)
anything else    → task           (manual-review) with the XOML preserved

name, when non-empty, overrides the process name derived from the workflow.

type Status

type Status string

Status classifies how faithfully one produced BPMN node reflects its XOML source, so the lossy points of a conversion are explicit.

const (
	// StatusNative marks a node whose BPMN meaning matches the WF construct:
	// control-flow gateways, approvals (user task), notifications.
	StatusNative Status = "native"
	// StatusPreserved marks a node mapped to a typed task shell whose inner logic
	// (a FEEL body, a PowerShell script, a resource operation) was not translated
	// but is kept verbatim in <atlas:mimSource> for a developer to wire up.
	StatusPreserved Status = "preserved"
	// StatusManualReview marks a node that needs a human: an unrecognised activity
	// kept as a plain-task placeholder, or a branch/loop whose condition could not
	// be translated to FEEL and was replaced with a safe placeholder.
	StatusManualReview Status = "manual-review"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL