--- 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() }}