Skip to content

Nested IF/ELSE generates ugly microflow layout with excessive decision splits #47

@engalar

Description

@engalar

Problem

When a microflow uses a single RETURN at the end with a result variable (instead of multiple RETURN statements in each branch), mxcli still generates nested IF/ELSE decision diamonds. This produces a microflow layout in Studio Pro with many crossing/diverging sequence flows that is hard to read.

Example

CREATE OR REPLACE MICROFLOW OrderManagement.ChatContext_ActionMicroflow (
  $ChatContext: ConversationalUI.ChatContext
)
RETURNS Boolean AS $Success
FOLDER 'Chat'
BEGIN
  DECLARE $Success Boolean = false;

  $Request = CALL MICROFLOW ConversationalUI.ChatContext_Preprocessing("ChatContext" = $ChatContext);

  IF $Request != empty THEN
    RETRIEVE $Agent FROM AgentCommons.Agent
      WHERE Title = 'SupplyChainOrderAgent'
      LIMIT 1;

    IF $Agent != empty THEN
      $Response = CALL JAVA ACTION AgentCommons.Agent_Call_WithHistory(...);

      IF $Response/GenAICommons.Response_Message != empty THEN
        $Message = CALL MICROFLOW ConversationalUI.ChatContext_UpdateAssistantResponse(...);
        SET $Success = true;
      END IF;
    ELSE
      LOG ERROR NODE 'OrderManagement' 'SupplyChainOrderAgent not found';
    END IF;
  END IF;

  RETURN $Success;
END;

This MDL is logically clean — one entry, one exit, a single RETURN $Success at the end. But the generated microflow in Studio Pro has 3 nested decision diamonds with sequence flows that zigzag across the canvas, making it visually cluttered.

Expected behavior

Nested IF blocks that converge to a single exit point should produce a clean layout where the "false" branches merge back into the main flow without excessive crossings. Ideally the layout engine would:

  1. Keep the happy path on the main horizontal/vertical axis
  2. Route false/empty branches as short side-paths that rejoin the main flow
  3. Minimize sequence flow crossings

Screenshot

(To be added manually)

Environment

  • mxcli: 0.1.0
  • Mendix: 11.6.4

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions