Skip to main content

Invocation

Invocation steps call other Logic Composer constructs and Dataverse processes, enabling modular design and reuse.

Run Logic Block

Executes a Logic Block and returns its outputs.

ParameterDescription
Logic BlockThe block to execute
Block Inputs BindingMapping of values to block inputs

Returns: The block's output values

Example - Formula:

RUN LOGIC BLOCK
Logic Block: CalculateOrderTotal
Block Inputs Binding:
Quantity: OrderLine.Quantity
UnitPrice: OrderLine.UnitPrice
DiscountPercent: Customer.DiscountRate
TaxRate: TaxConfiguration.Rate
→ Store outputs:
Total → LineTotal

Example - Decision Table:

RUN LOGIC BLOCK
Logic Block: DetermineShippingMethod
Block Inputs Binding:
OrderWeight: Order.TotalWeight
DestinationCountry: Order.ShipToCountry
CustomerTier: Customer.Tier
IsExpedited: Order.ExpressShipping
→ Store outputs:
ShippingMethod → SelectedMethod
ShippingCost → CalculatedCost
EstimatedDays → DeliveryDays

Example - Validation Set:

RUN LOGIC BLOCK
Logic Block: ValidateOrderForSubmission
Block Inputs Binding:
Order: Order
Customer: Customer
CreditLimit: Customer.CreditLimit
→ Store outputs:
IsValid → OrderIsValid
ValidationMessages → ErrorMessages

CONDITION: Order Valid?
Condition: OrderIsValid == true

TRUE BRANCH:
→ Continue with order processing

FALSE BRANCH:
→ Display ErrorMessages to user
→ HALT

Run Logic Flow

Executes another Logic Flow as a sub-flow.

ParameterDescription
Logic FlowThe flow to execute
Flow Inputs BindingMapping of values to flow inputs

Returns: The sub-flow's output values

Sub-flows enable you to break complex processes into manageable, reusable pieces.

Example:

RUN LOGIC FLOW
Logic Flow: ProcessPayment
Flow Inputs Binding:
OrderId: Order.Id
Amount: Order.TotalAmount
PaymentMethod: SelectedPaymentMethod
→ Store outputs:
Success → PaymentSuccess
TransactionId → PaymentTransactionId
ErrorMessage → PaymentError

Nested Flow Example:

# Main Flow: ProcessOrder

1. RUN LOGIC FLOW: ValidateOrderFlow
→ ValidationResult

2. CONDITION: Is Valid?
TRUE:
3. RUN LOGIC FLOW: CalculatePricingFlow
→ PricingResult

4. RUN LOGIC FLOW: ProcessPaymentFlow
→ PaymentResult

5. CONDITION: Payment Success?
TRUE:
6. RUN LOGIC FLOW: CreateShipmentFlow
→ ShipmentResult

7. RUN LOGIC FLOW: SendConfirmationFlow

Run Business Process

Starts a Process Orchestrator business process against a target record. Use this to hand a record off to a multi-stage, orchestrated process from within a flow.

ParameterDescription
Business ProcessThe business process to run
Entity Logical NameThe entity type the process runs against
Entity IDThe record to start the process on
Input ArgumentsMapping of values to the business process's input parameters

Returns: The identifier of the created business process instance.

Example:

RUN BUSINESS PROCESS
Business Process: Order Fulfillment
Entity Logical Name: salesorder
Entity ID: Order.Id
Input Arguments:
Priority: "High"
→ Store outputs:
BusinessProcessInstanceId → FulfillmentInstanceId

A business process is invokable from a flow when it is published as an action (Is Action). Under the covers this runs the business-process action against the target record. See Process Triggers.

Run Process Action

Executes a Dataverse process action (Custom API or Action).

ParameterDescription
ProcessThe process action to execute (identified by its process id)
Entity Logical NameThe entity type the action is bound to (for entity-bound actions)
Entity IDThe record the action runs against (for entity-bound actions)
Input ArgumentsMapping of values to the action's input parameters
Output Arguments MapOptional mapping that renames action outputs onto flow variables

Returns: The action's output parameters

Example:

RUN PROCESS ACTION
Process: new_CalculateCommission
Entity Logical Name: salesorder
Entity ID: SalesOrder.Id
Input Arguments:
SalespersonId: Order.OwnerId
Period: "Q4-2024"
→ Store outputs:
CommissionAmount → CalculatedCommission
CommissionRate → AppliedRate

Run Process Workflow

Executes a Dataverse workflow (process) against a record by issuing an ExecuteWorkflowRequest.

ParameterDescription
WorkflowThe workflow to execute (identified by its process id)
Entity Logical NameThe entity type the workflow runs against
Entity IDThe record to run the workflow on

If the target workflow is configured as a background (asynchronous) workflow, Dataverse queues it as a system job; the step returns once the request has been submitted.

Example:

RUN PROCESS WORKFLOW
Workflow: Account Approval Workflow
Entity Logical Name: account
Entity ID: NewAccount.Id

Best Practices

Design for Reusability: Create Logic Blocks and sub-flows that can be reused across multiple parent flows.

Keep Interfaces Clean: Define clear, minimal inputs and outputs for called constructs. Don't pass more data than needed.

Handle Sub-Flow Failures: Always check the outputs of called flows and blocks, especially success/failure indicators.

Avoid Deep Nesting: Too many levels of sub-flows become hard to debug. Keep the call hierarchy reasonably flat.

Document Dependencies: Make it clear which flows call which other flows/blocks to understand the full execution chain.

Use Blocks for Calculations: If you need to perform a calculation, use a Logic Block rather than embedding the formula in the flow. This makes it reusable and testable.

Consider Transaction Boundaries: Sub-flows typically run in the same transaction as the parent. Be aware of this for error handling and rollback scenarios.