---
alias: user-guide-flow-index
description: "A Flow defines a route for Material, using Steps and Flows, managed with Logical Names and Paths for reuse"
---
# Flow
:lock: Flow.**Show**
## Overview
A **Flow** represents a pre-defined route or path for **Material**.
A **Flow** consists of a combination of **Flow Items**, which can be of type **Step** or **Flow**. Therefore, a **Flow** may contain exclusively **Steps**, **Flows**, or a mixture of both **Flows** and **Steps**.
```mermaid
graph TD;
A[Flow]
A --> D(Step 1)--> E(Step 2)--> F(Step 3)--> G(Step 4)
A --> H(Flow 1)--> I(Flow 2)--> J(Flow 3)--> K(Flow 4)
A --> L(Flow 1)--> M(Step 1)--> N(Step 2)--> O(Flow 2)
classDef mermaid_title color:#000, fill:#fafafa, stroke:#fafafa, stroke-width:0x, font-size:100%, font-weight:200;
classDef mermaid_start color:#000, fill:#fafafa, stroke:#fafafa, color:#fafafa, stroke-width:0x, font-size:100%, visibility: hidden;
classDef mermaid_businessdata color:#000, fill:#65CDE8, stroke:#65CDE8, stroke-width:0px, font-size:100%;
classDef mermaid_nonbusinessdata color:#000, fill:#B7DEE8, stroke:#B7DEE8, stroke-width:0px, font-size:100%;
classDef mermaid_entity color:#000, fill:#FB9F53, stroke:#FB9F53, stroke-width:0px, font-size:100%;
classDef mermaid_entitylinked color:#000, fill:#FCD5B5, stroke:#FCD5B5, stroke-width:0px, font-size:100%;
classDef mermaid_context color:#000, fill:#B9CDE5, stroke:#B9CDE5, stroke-width:0px, font-size:100%;
classDef mermaid_optional color:#000, fill:#B7DEE8, stroke:#65CDE8, stroke-width:1px, font-size:100%, stroke-dasharray: 5 5;
classDef mermaid_state color:#000, fill:#d7e4bd, stroke:#000, stroke-width:1px, font-size:100%, font-weight:300;
class A mermaid_businessdata
class H,I,J,K,L,O mermaid_entity
class D,E,F,G,M,N mermaid_entitylinked
```
A **Flow** can be shared by multiple **Materials** at any given time. A **Material** is always in a **Flow**. Since **Flows** can be nested, the **Flow** of the **Material** always refers to the TopMost **Flow**.
Because **Steps** and **Flows** can be repeated in a given **Flow**, the unique position of the **Flow Item** in the **Flow** is determined by a Flow Path. A Flow Path includes a sequence in the form of `Flow:RevisionName:CorrelationId/Flow:RevisionName:CorrelationId/.../Step:CorrelationId`. The CorrelationId allows changes to be made to a **Flow** - when creating a new version - and still preserve compatibility with previous **Flow** versions. For a particular **Flow** version, the CorrelationId also maps to a Position (or sequence), that defines the position of the **Flow Item** in a particular **Flow**. When setting a new **Flow** version effective, the system will check that no **Material** stays in an invalid Flow Path using the CorrelationIds. This allows the reorganization and addition of new **Flow Items**, as well as the removal of **Flow Items** that have no **Materials**.
!!! info
**Materials** always store internally the Flow Path with references to CorrelationIds. In some places in the GUI, a user friendly Flow Path using the Positions instead of CorrelationIds is displayed.
The reusability potential of **Flows** and **Steps** is reflected in the use of **Logical Names** and **Logical Flow Paths**:
* A **Logical Name** is an optional qualified name for a **Flow** or **Step** within a specific **Flow** version that designates the **Intended Usage** of the **Flow Item**.
* A **Logical Flow Path** is a simple sequence of all the **Logical Names** of the **Flow Item**.
This means you do not need to duplicate **Flow Items**, and you can reuse them but with different contexts/intents. For example, in situations where you repeat a sequence of **Steps** but some parameters are different (Durables, Recipe, BOM, and other).
The **Logical Name** feature gives you the freedom to specify the usage, purpose or intent of your **Step**, and it is assigned when you create the **Flow**. You can use the same **Flow Items** with different **Logical Names** across various **Flows**, except for **Alternate Flows** or **Non-Sequential Blocks**.
!!! note
**Logical Names** are predefined and managed at the **Flow** and **Step** level. For more information, see [[tutorials-howto-managesteplogicalnames]].
A **Flow** can be marked as Alternate. When a **Flow** is alternate, it means that only one of the **Flow Items** is taken by the **Material** in that **Flow**. At runtime, the specific path to be taken must be specified.
A **Step** within a **Flow** can be marked as Optional. This indicates that the **Step** can be performed or not. During runtime there must be the indication as to whether the **Material** moves to the optional **Step** or not.
A **Flow** can be a Non-Sequential Block. A Non-Sequential Block consists of a set of **Steps** that can be performed in any order. A Non-Sequential Block must contain at least one non-optional **Flow Item**.
The following restrictions apply to **Flows**:
* A **Flow** cannot be empty - it must have at least one **Flow Item**.
* A **Flow** cannot include any **Child Flows** that are a Revision of the same **Flow** (including itself).
* When a **Flow** has **Steps** and is not a Non-Sequential Block, the last **Step** cannot be an optional **Step**.
* A **Flow** which is Alternate cannot have Optional **Flow Items**.
* A **Flow** which is a Non-Sequential Block cannot be Alternate.
* A **Flow** which is a Non-Sequential Block cannot have duplicated **Steps**.
While a **Flow** can span across multiple **Facilities** through the **Areas** associated with its **Steps**, it is important to note that during runtime, if a **Step** belongs to a different **Facility**, it will not be possible to perform a [[user-guide-material-move-next]]. The only way to transfer **Material** between **Facilities** is through a [[user-guide-ship-material]] transaction.
A **Flow** can be enabled or disabled. A disabled **Flow** prevents any **Material** form being assigned to that **Flow** - be it from **Material** creation, **Material** flow change, or any other operation. In case the **Material** already exists in a disabled **Flow**, it can continue to be processed normally.
A **Flow** with **Steps** can have Rework Information configured for each **Step**. Rework Information is assigned to each **Step** individually. A **Step** can have multiple **Reworking Paths**. A **Rework Path** includes a Go To Flow Path and a Return Flow Path to a **Step** anchored to the TopMost **Flow**. Optionally, you can specify a Rework **Reason** for the **Step**,indicating that the Rework Path serves as the default for that specific Rework **Reason**.
!!! warning
A **Flow** that is used as a rework **Flow** may only contain **Steps**. Rework **Flows** composed of other **Flows** may **not** be used for rework.
## Global and Versioned Data
A **Flow**, being a change controlled object, contains global data and versioned data components as shown in the following image:
```mermaid
graph TD
subgraph Flow
Main1["Global Data
(Without Change Control)"] --- A1[IsEnabled]
Main2["Versioned Data
(With Change Control)"] --- A2[IsAlternate
SubFlows or Steps
Rework Paths
All other]
end
classDef mermaid_title color:#000, fill:#fafafa, stroke:#fafafa, stroke-width:0x, font-size:100%, font-weight:200;
classDef mermaid_start color:#000, fill:#fafafa, stroke:#fafafa, color:#fafafa, stroke-width:0x, font-size:100%, visibility: hidden;
classDef mermaid_businessdata color:#000, fill:#65CDE8, stroke:#65CDE8, stroke-width:0px, font-size:100%;
classDef mermaid_nonbusinessdata color:#000, fill:#B7DEE8, stroke:#B7DEE8, stroke-width:0px, font-size:100%;
classDef mermaid_entity color:#000, fill:#FB9F53, stroke:#FB9F53, stroke-width:0px, font-size:100%;
classDef mermaid_entitylinked color:#000, fill:#FCD5B5, stroke:#FCD5B5, stroke-width:0px, font-size:100%;
classDef mermaid_context color:#000, fill:#B9CDE5, stroke:#B9CDE5, stroke-width:0px, font-size:100%;
classDef mermaid_optional color:#000, fill:#B7DEE8, stroke:#65CDE8, stroke-width:1px, font-size:100%, stroke-dasharray: 5 5;
classDef mermaid_state color:#000, fill:#d7e4bd, stroke:#000, stroke-width:1px, font-size:100%, font-weight:300;
class Main1,Main2 mermaid_entity
class A1,A2 mermaid_entitylinked
```
A **Flow** is also an optional element in several context resolution tables:
* [BOMContext](../../administration/tables/smart-tables/bomcontext.md)
* [MaterialChecklistContext](../../administration/tables/smart-tables/materialchecklistcontext.md)
* [MaterialDataCollectionContext](../../administration/tables/smart-tables/materialdatacollectioncontext.md)
* [MaterialDocumentContext](../../administration/tables/smart-tables/materialdocumentcontext.md)
* [MaterialDurablesContext](../../administration/tables/smart-tables/materialdurablescontext.md)
* [MaterialPrintableDocumentContext](../../administration/tables/smart-tables/materialprintabledocumentcontext.md)
* [ServiceContext](../../administration/tables/smart-tables/servicecontext.md)
* [StepChartContext](../../administration/tables/smart-tables/stepchartcontext.md)
* [MaterialDurablesContext](../../administration/tables/smart-tables/materialdurablescontext.md)
* [RecipeContext](../../administration/tables/smart-tables/recipecontext.md)
* [RecipeParameterOverrideContext](../../administration/tables/smart-tables/recipeparameteroverridecontext.md)
* [StepInspectionPlanContext](../../administration/tables/smart-tables/stepinspectionplancontext.md)
* [StepLineFlowContext](../../administration/tables/smart-tables/steplineflowcontext.md)
* [StepProductYieldAndCycleTimeContext](../../administration/tables/smart-tables/stepproductyieldandcycletimecontext.md)
* [StepSamplingPatternContext](../../administration/tables/smart-tables/stepsamplingpatterncontext.md)
* [StepSplitTrackOutContext](../../administration/tables/smart-tables/stepsplittrackoutcontext.md)
* [TimeConstraintsContext](../../administration/tables/smart-tables/timeconstraintscontext.md)
## Tying Everything Together
```mermaid
graph LR
A1[Notification] -.- Main[Flow]
A2[Product] -.- Main
A3[Schedule Scenario Job] --- Main
A4[Protocol Instance] -.- Main
Main --- A5[Material]
Main -.- A6[Data Collection Instance]
Main -.- N1[Flow Logical Name]
Main === L1[Flow Item]
L1 === L2[Child Flow]
L1 === L3[Step]
L3 --- L4[Rework Path]
L4 --- A7[Reason]
Main -.- C1[Context Smart Tables]
classDef mermaid_title color:#000, fill:#fafafa, stroke:#fafafa, stroke-width:0x, font-size:100%, font-weight:200;
classDef mermaid_start color:#000, fill:#fafafa, stroke:#fafafa, color:#fafafa, stroke-width:0x, font-size:100%, visibility: hidden;
classDef mermaid_businessdata color:#000, fill:#65CDE8, stroke:#65CDE8, stroke-width:0px, font-size:100%;
classDef mermaid_nonbusinessdata color:#000, fill:#B7DEE8, stroke:#B7DEE8, stroke-width:0px, font-size:100%;
classDef mermaid_entity color:#000, fill:#FB9F53, stroke:#FB9F53, stroke-width:0px, font-size:100%;
classDef mermaid_entitylinked color:#000, fill:#FCD5B5, stroke:#FCD5B5, stroke-width:0px, font-size:100%;
classDef mermaid_context color:#000, fill:#B9CDE5, stroke:#B9CDE5, stroke-width:0px, font-size:100%;
classDef mermaid_optional color:#000, fill:#B7DEE8, stroke:#65CDE8, stroke-width:1px, font-size:100%, stroke-dasharray: 5 5;
class Main mermaid_entity
class A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12 mermaid_businessdata
class L1,L2,L3,L4,L5,L6 mermaid_entitylinked
class C1,C2,C3,C4,C5,C6 mermaid_context
class N1,N2,N3,N4,N5,N6 mermaid_nonbusinessdata
click Main "../../business-data/flow"
click A1 "../../business-data/notification"
click A2 "../../business-data/product"
click A4 "../../business-data/protocol/protocol-instance"
click A5 "../../business-data/material"
click A6 "../../business-data/data-collection/data-collection-instance"
click A7 "../../business-data/reason"
click L2 "../../business-data/flow"
click L3 "../../business-data/step"
```
## Sequence Of Steps
The necessary steps for correctly using a **Flow** are the following:
1. Create the necessary **Flow Items**, either **Steps** or **Child Flows**, for the **Flow**.
2. Create a **Flow** - note that it is necessary to associate the **Flow Version** to a **Change Set**.
3. Approve the **Change Set**, which contains the **Flow Version** that has been created.
!!! info
For convenience, the Flow can be configured to use implicit Change Sets. Please refer to the [[user-guide-change-set-page|Change Set]] section for more information.
!!! info
For more information, see the [[tutorials-flowmodeling]] tutorial.
{{ generate_index() }}