Packages
ash
2.17.16
3.29.3
3.29.2
3.29.1
3.29.0
3.28.0
3.27.8
3.27.7
3.27.6
3.27.5
3.27.4
3.27.3
3.27.2
3.27.1
3.27.0
3.26.0
3.25.2
3.25.1
3.25.0
retired
3.24.7
3.24.6
3.24.5
3.24.4
3.24.3
3.24.2
3.24.1
3.24.0
3.23.1
3.23.0
3.22.2
3.22.1
3.22.0
3.21.3
3.21.2
3.21.1
3.21.0
3.20.0
3.19.3
3.19.2
3.19.1
3.19.0
3.18.0
3.17.1
3.17.0
3.16.0
3.15.0
3.14.1
3.14.0
retired
3.13.2
3.13.1
3.13.0
3.12.0
3.11.3
3.11.2
3.11.1
3.11.0
3.10.1
3.10.0
3.9.0
3.8.0
3.7.6
3.7.5
3.7.4
3.7.3
3.7.2
3.7.1
3.7.0
retired
3.6.3
retired
3.6.2
3.6.1
3.6.0
3.5.43
3.5.42
3.5.41
3.5.40
3.5.39
3.5.38
3.5.37
3.5.36
3.5.35
3.5.34
3.5.33
3.5.32
3.5.31
3.5.30
3.5.29
3.5.28
3.5.27
3.5.26
3.5.25
3.5.24
3.5.23
3.5.22
3.5.21
3.5.20
3.5.19
3.5.18
3.5.17
3.5.16
3.5.15
3.5.14
3.5.13
3.5.12
3.5.11
3.5.10
3.5.9
3.5.8
3.5.7
3.5.6
3.5.5
3.5.4
3.5.3
3.5.2
3.5.1
3.5.0
3.4.74
retired
3.4.73
3.4.72
3.4.71
3.4.70
3.4.69
3.4.68
3.4.67
3.4.66
3.4.65
3.4.64
3.4.63
3.4.62
3.4.61
3.4.60
3.4.59
3.4.58
3.4.57
3.4.56
3.4.55
3.4.54
3.4.53
3.4.52
3.4.51
3.4.50
3.4.49
3.4.48
3.4.47
3.4.46
3.4.45
3.4.44
3.4.43
3.4.42
3.4.41
3.4.40
3.4.39
3.4.38
3.4.37
3.4.36
3.4.35
3.4.34
3.4.33
3.4.32
3.4.31
3.4.30
3.4.29
3.4.28
3.4.27
3.4.26
3.4.25
3.4.24
3.4.23
3.4.22
3.4.21
3.4.20
3.4.19
3.4.18
3.4.17
3.4.16
3.4.15
3.4.14
3.4.13
3.4.12
3.4.11
3.4.10
3.4.9
3.4.8
3.4.7
3.4.6
3.4.5
3.4.4
3.4.3
3.4.2
3.4.1
3.4.0
3.3.3
3.3.2
3.3.1
3.3.0
3.2.6
3.2.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
3.1.8
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.16
3.0.15
3.0.14
3.0.13
3.0.12
3.0.11
3.0.10
3.0.9
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
3.0.0-rc.46
3.0.0-rc.45
3.0.0-rc.44
3.0.0-rc.43
3.0.0-rc.42
3.0.0-rc.41
3.0.0-rc.40
3.0.0-rc.39
3.0.0-rc.38
3.0.0-rc.37
3.0.0-rc.36
3.0.0-rc.35
3.0.0-rc.34
3.0.0-rc.33
3.0.0-rc.32
3.0.0-rc.31
3.0.0-rc.29
3.0.0-rc.28
3.0.0-rc.27
3.0.0-rc.26
3.0.0-rc.25
3.0.0-rc.24
3.0.0-rc.23
3.0.0-rc.22
3.0.0-rc.21
3.0.0-rc.20
3.0.0-rc.19
3.0.0-rc.18
3.0.0-rc.17
3.0.0-rc.16
3.0.0-rc.15
3.0.0-rc.14
3.0.0-rc.13
3.0.0-rc.12
3.0.0-rc.11
3.0.0-rc.10
3.0.0-rc.9
3.0.0-rc.8
3.0.0-rc.7
3.0.0-rc.6
3.0.0-rc.5
3.0.0-rc.4
3.0.0-rc.3
3.0.0-rc.1
3.0.0-rc.0
2.21.15
2.21.14
2.21.13
2.21.12
2.21.11
2.21.10
2.21.9
2.21.8
2.21.7
2.21.6
2.21.5
2.21.4
2.21.3
2.21.2
2.21.1
2.21.0
2.20.3
2.20.2
2.20.1
2.20.0
2.19.14
2.19.13
2.19.12
2.19.11
2.19.10
2.19.9
2.19.8
2.19.7
2.19.6
2.19.5
2.19.4
2.19.3
retired
2.19.2
retired
2.19.1
retired
2.19.0
retired
2.18.2
2.18.1
2.18.0
2.17.24
2.17.23
2.17.22
2.17.21
2.17.20
2.17.19
2.17.18
2.17.17
2.17.16
2.17.15
2.17.14
2.17.13
2.17.12
2.17.11
2.17.10
2.17.9
2.17.8
2.17.7
2.17.6
2.17.5
2.17.4
2.17.3
2.17.2
2.17.1
2.17.0
2.16.1
2.16.0
2.15.20
2.15.19
2.15.18
2.15.17
2.15.16
2.15.15
2.15.14
2.15.13
2.15.12
2.15.11
2.15.10
2.15.9
2.15.8
2.15.7
2.15.6
2.15.5
2.15.4
2.15.2
2.15.1
2.15.0
2.14.21
2.14.20
2.14.19
2.14.18
2.14.17
2.14.16
2.14.15
2.14.14
2.14.13
2.14.12
2.14.11
2.14.10
2.14.9
2.14.8
2.14.7
2.14.6
2.14.5
2.14.4
2.14.3
2.14.2
2.14.1
2.14.0
2.13.4
retired
2.13.3
2.13.2
2.13.1
2.13.0
2.12.1
2.12.0
2.11.11
2.11.10
2.11.9
2.11.8
2.11.7
2.11.6
2.11.5
2.11.4
2.11.3
2.11.2
2.11.1
2.11.0
2.11.0-rc.3
2.11.0-rc.2
2.11.0-rc.1
2.11.0-rc.0
2.10.2
2.10.1
2.10.0
2.9.29
2.9.28
2.9.27
2.9.26
2.9.25
2.9.24
2.9.23
2.9.22
2.9.21
2.9.20
2.9.19
2.9.18
2.9.17
2.9.16
2.9.15
2.9.14
2.9.13
2.9.12
2.9.11
2.9.10
2.9.9
2.9.8
2.9.7
2.9.6
2.9.5
2.9.4
2.9.3
2.9.2
2.9.1
2.9.0
2.8.1
2.8.0
2.7.1
2.7.0
2.6.31
2.6.30
2.6.29
2.6.28
2.6.27
2.6.26
2.6.25
2.6.24
2.6.23
2.6.22
2.6.21
2.6.20
2.6.19
2.6.18
2.6.17
2.6.16
2.6.15
2.6.14
2.6.13
2.6.11
2.6.10
2.6.9
2.6.8
2.6.7
2.6.6
2.6.5
2.6.4
2.6.3
2.6.2
2.6.1
2.6.0
2.5.16
2.5.15
2.5.14
2.5.13
2.5.12
2.5.11
2.5.10
2.5.9
2.5.8
2.5.7
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.5.0-rc.6
2.5.0-rc.5
2.5.0-rc.4
2.5.0-rc.3
2.5.0-rc.2
2.5.0-rc.1
2.5.0-rc.0
2.4.30
2.4.29
2.4.28
2.4.27
2.4.26
2.4.25
2.4.24
2.4.23
2.4.22
2.4.21
2.4.20
2.4.19
2.4.18
2.4.17
2.4.16
2.4.15
2.4.14
2.4.13
2.4.12
2.4.11
2.4.10
2.4.9
2.4.8
2.4.7
2.4.6
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
2.0.0-rc.15
2.0.0-rc.14
2.0.0-rc.13
2.0.0-rc.12
2.0.0-rc.11
2.0.0-rc.10
2.0.0-rc.9
2.0.0-rc.8
2.0.0-rc.7
2.0.0-rc.6
2.0.0-rc.5
2.0.0-rc.4
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
2.0.0-pre.8
2.0.0-pre.7
2.0.0-pre.6
2.0.0-pre.5
2.0.0-pre.4
2.0.0-pre.3
2.0.0-pre.2
2.0.0-pre.1
2.0.0-pre.0
1.53.3
1.53.2
1.53.0
1.52.0-rc.22
1.52.0-rc.21
1.52.0-rc.20
1.52.0-rc.19
1.52.0-rc.18
1.52.0-rc.17
1.52.0-rc.16
1.52.0-rc.15
1.52.0-rc.14
1.52.0-rc.13
1.52.0-rc.12
1.52.0-rc.11
1.52.0-rc.10
1.52.0-rc.9
1.52.0-rc.8
1.52.0-rc.7
1.52.0-rc.6
1.52.0-rc.5
1.52.0-rc.4
1.52.0-rc.3
1.52.0-rc.2
1.52.0-rc.1
1.52.0-rc.0
1.51.2
1.51.1
retired
1.51.0
1.50.21
1.50.20
1.50.19
1.50.18
1.50.17
1.50.16
1.50.15
1.50.14
1.50.13
1.50.12
1.50.11
1.50.10
1.50.9
1.50.8
1.50.7
1.50.6
1.50.5
1.50.4
1.50.3
1.50.2
1.50.1
1.50.0
1.49.0
1.48.0-rc.30
1.48.0-rc.29
1.48.0-rc.28
1.48.0-rc.27
1.48.0-rc.26
1.48.0-rc.25
1.48.0-rc.24
1.48.0-rc.23
1.48.0-rc.22
1.48.0-rc.21
1.48.0-rc.20
1.48.0-rc.19
1.48.0-rc.18
1.48.0-rc.17
1.48.0-rc.16
1.48.0-rc.15
1.48.0-rc.14
1.48.0-rc.13
1.48.0-rc.12
1.48.0-rc.11
1.48.0-rc.10
1.48.0-rc.9
1.48.0-rc.8
1.48.0-rc.7
1.48.0-rc.6
1.48.0-rc.5
1.48.0-rc.4
1.48.0-rc.3
1.48.0-rc.2
1.48.0-rc.1
1.48.0-rc.0
1.47.12
1.47.11
1.47.10
1.47.9
1.47.8
1.47.7
1.47.6
1.47.5
1.47.4
1.47.3
1.47.2
1.47.1
1.47.0
1.46.13
1.46.12
1.46.11
1.46.10
1.46.9
1.46.8
1.46.7
1.46.6
1.46.5
1.46.4
1.46.3
1.46.2
1.46.1
1.46.0
1.45.0-rc9
1.45.0-rc8
1.45.0-rc7
1.45.0-rc6
1.45.0-rc5
1.45.0-rc4
1.45.0-rc3
1.45.0-rc20
1.45.0-rc2
1.45.0-rc19
1.45.0-rc18
1.45.0-rc17
1.45.0-rc16
1.45.0-rc15
1.45.0-rc14
1.45.0-rc13
1.45.0-rc12
1.45.0-rc11
1.45.0-rc10
1.45.0-rc1
1.45.0-rc0
1.44.13
1.44.12
1.44.11
1.44.10
1.44.9
1.44.8
1.44.7
1.44.6
1.44.5
1.44.4
1.44.3
1.44.2
1.44.1
1.44.0
1.43.12
1.43.11
1.43.10
1.43.9
1.43.8
1.43.7
1.43.6
1.43.5
1.43.4
1.43.3
1.43.2
1.43.1
1.43.0
1.42.0
1.41.12
1.41.11
1.41.10
1.41.9
1.41.8
1.41.7
1.41.6
1.41.5
1.41.4
1.41.3
1.41.2
1.41.1
1.41.0
1.40.0
1.39.7
1.39.6
1.39.5
1.39.4
1.39.3
1.39.2
1.39.1
1.39.0
1.38.0
1.37.2
1.37.1
1.37.0
1.36.22
1.36.21
1.36.19
1.36.18
1.36.17
1.36.16
1.36.15
1.36.14
1.36.13
1.36.12
1.36.11
1.36.10
1.36.9
1.36.8
1.36.7
1.36.6
1.36.5
1.36.4
1.36.3
1.36.2
1.36.0
1.35.1
1.35.0
1.34.9
1.34.8
1.34.7
1.34.6
1.34.5
1.34.4
1.34.3
1.34.2
1.34.1
1.34.0
1.33.0
1.32.2
1.32.1
1.32.0
1.31.1
1.31.0
1.30.2
1.30.1
1.29.0-rc1
1.29.0-rc0
1.28.1
1.28.0
1.27.1
1.27.0
1.26.13
1.26.12
1.26.11
1.26.10
1.26.9
1.26.8
1.26.7
1.26.6
1.26.5
1.26.4
1.26.2
1.26.1
1.26.0
1.25.8
1.25.7
1.25.6
1.25.5
1.25.4
1.25.3
1.25.2
1.25.1
1.25.0
1.24.2
1.24.1
1.24.0
1.23.3
1.23.2
1.23.1
1.23.0
1.22.1
1.22.0
1.20.1
1.20.0
1.19.1
1.19.0
1.18.1
1.18.0
1.17.1
1.17.0
1.16.2
1.15.1
1.15.0
1.14.0
1.13.4
1.13.3
1.13.2
1.13.1
1.13.0
1.12.0
1.11.1
1.11.0
1.10.0
1.9.0
1.8.0
1.7.0
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.1
1.4.0
1.3.1
1.3.0
1.2.1
1.2.0
1.1.3
1.1.2
1.1.0
1.0.3
1.0.2
1.0.1
1.0.0
0.13.1
0.13.0
0.12.0
0.10.0
0.9.1
0.9.0
0.8.0
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.9
0.1.8
0.1.3
0.1.1
0.1.0
A declarative, extensible framework for building Elixir applications.
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
documentation/dsls/DSL:-Ash.Flow.md
<!--
This file was generated by Spark. Do not edit it by hand.
-->
# DSL: Ash.Flow.Dsl
The built in flow DSL.
## Halting
Steps can be halted, which will stop the flow from continuing and return a halted flow. To attach a specific reason, use a `halt_reason`.
If you need more complex halting logic, then you'd want to use a custom step, and return `{:error, Ash.Error.Flow.Halted.exception(...)}`
## flow
Details about the flow itself, like description and the successful return type.
### Nested DSLs
* [argument](#flow-argument)
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`api`](#flow-api){: #flow-api } | `module` | | An api to use by default when calling actions |
| [`description`](#flow-description){: #flow-description } | `String.t` | | A description of the flow |
| [`trace_name`](#flow-trace_name){: #flow-trace_name } | `String.t` | | The name to use when creating traces. Defaults to the short name. |
| [`short_name`](#flow-short_name){: #flow-short_name } | `atom` | | A short name to use for the flow. Defaults to the last to parts of the module name, underscored. |
| [`returns`](#flow-returns){: #flow-returns } | ``any`` | | The step or step that should constitute the return value. |
## flow.argument
```elixir
argument name, type
```
An argument to be passed into the flow
### Examples
```
argument :params, :map do
default %{}
end
```
```
argument :retries, :integer do
allow_nil? false
end
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#flow-argument-name){: #flow-argument-name .spark-required} | `atom` | | The name to use for the argument |
| [`type`](#flow-argument-type){: #flow-argument-type .spark-required} | `module` | | The type of the argument. See `Ash.Type` for more. |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`default`](#flow-argument-default){: #flow-argument-default } | `(-> any) \| mfa \| any()` | | A default value to use for the argument if not provided |
| [`allow_nil?`](#flow-argument-allow_nil?){: #flow-argument-allow_nil? } | `boolean` | `true` | Whether or not the argument value may be nil |
| [`constraints`](#flow-argument-constraints){: #flow-argument-constraints } | `Keyword.t` | `[]` | Constraints to provide to the type when casting the value. See the type's documentation for more information. |
### Introspection
Target: `Ash.Flow.Argument`
## steps
The steps to run.
### Nested DSLs
* [map](#steps-map)
* [branch](#steps-branch)
* [transaction](#steps-transaction)
* [create](#steps-create)
* [debug](#steps-debug)
* [update](#steps-update)
* [destroy](#steps-destroy)
* [validate](#steps-validate)
* [read](#steps-read)
* [run_flow](#steps-run_flow)
* [custom](#steps-custom)
### Examples
```
steps do
# invokes a create action
create :create_post, MyApp.Post, :create
end
```
## steps.map
```elixir
map name, over
```
Runs a set of steps for each item in a provided list.
### Examples
```
map :create_users, range(1, arg(:count)) do
output :create_user
create :create_user, Org, :create do
input %{
first_name: {Faker.Person, :first_name, []},
last_name: {Faker.Person, :last_name, []}
}
end
end
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#steps-map-name){: #steps-map-name .spark-required} | `atom` | | The name of the step. Will be used when expressing dependencies, and step inputs. |
| [`over`](#steps-map-over){: #steps-map-over } | ``any`` | | The value to be iterated over. Will be available inside the `map` step as `element(:map_step_name)` |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`output`](#steps-map-output){: #steps-map-output } | `atom` | | Which step to use when constructing the output list. Defaults to the last step. |
| [`short_name`](#steps-map-short_name){: #steps-map-short_name } | `String.t` | | Set a short name for the step. Will be used when building things like mermaid charts. |
| [`wait_for`](#steps-map-wait_for){: #steps-map-wait_for } | ``any`` | | Ensures that the step happens after the configured step or steps. This is a template who's results are not used, only awaited. |
| [`touches_resources`](#steps-map-touches_resources){: #steps-map-touches_resources } | `list(atom)` | | A list of resources touched by any custom logic in this step. This is used in the case that this step is run in a transaction. This is primarily only needed for `custom` steps. |
| [`halt_if`](#steps-map-halt_if){: #steps-map-halt_if } | ``any`` | | Halts the step by emitting an error (with an `Ash.Error.Flow.Halted`). Can use template variables. See the section on Halting for more. |
| [`halt_reason`](#steps-map-halt_reason){: #steps-map-halt_reason } | ``any`` | `:halted` | Configures the reason for the `halt_if` clause. |
| [`description`](#steps-map-description){: #steps-map-description } | `String.t` | | A description for the step. |
### Introspection
Target: `Ash.Flow.Step.Map`
## steps.branch
```elixir
branch name, condition
```
Runs a set of steps based on a given value.
### Examples
```
branch :create_users, result(:create_users?) do
output :create_user
create :create_user, Org, :create do
input %{
first_name: {Faker.Person, :first_name, []},
last_name: {Faker.Person, :last_name, []}
}
end
end
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#steps-branch-name){: #steps-branch-name .spark-required} | `atom` | | The name of the step. Will be used when expressing dependencies, and step inputs. |
| [`condition`](#steps-branch-condition){: #steps-branch-condition } | ``any`` | | A template that must evaluate to `true` for the branch to be executed. |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`output`](#steps-branch-output){: #steps-branch-output } | `atom` | | Which step to use as the output. Defaults to the last step. |
| [`short_name`](#steps-branch-short_name){: #steps-branch-short_name } | `String.t` | | Set a short name for the step. Will be used when building things like mermaid charts. |
| [`wait_for`](#steps-branch-wait_for){: #steps-branch-wait_for } | ``any`` | | Ensures that the step happens after the configured step or steps. This is a template who's results are not used, only awaited. |
| [`touches_resources`](#steps-branch-touches_resources){: #steps-branch-touches_resources } | `list(atom)` | | A list of resources touched by any custom logic in this step. This is used in the case that this step is run in a transaction. This is primarily only needed for `custom` steps. |
| [`halt_if`](#steps-branch-halt_if){: #steps-branch-halt_if } | ``any`` | | Halts the step by emitting an error (with an `Ash.Error.Flow.Halted`). Can use template variables. See the section on Halting for more. |
| [`halt_reason`](#steps-branch-halt_reason){: #steps-branch-halt_reason } | ``any`` | `:halted` | Configures the reason for the `halt_if` clause. |
| [`description`](#steps-branch-description){: #steps-branch-description } | `String.t` | | A description for the step. |
### Introspection
Target: `Ash.Flow.Step.Branch`
## steps.transaction
```elixir
transaction name, resource
```
Runs a set of steps in a transaction.
### Examples
```
transaction :create_user_with_org do
touches_resources [User, Org]
create :create_user, User, :create do
input %{
first_name: {Faker.Person, :first_name, []},
last_name: {Faker.Person, :last_name, []}
}
end
create :create_org, Org, :create do
input %{
user_id: path(result(:create_user), :id),
name: {Faker.Color, :name, []}
}
end
end
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#steps-transaction-name){: #steps-transaction-name .spark-required} | `atom` | | The name of the step. Will be used when expressing dependencies, and step inputs. |
| [`resource`](#steps-transaction-resource){: #steps-transaction-resource } | `module \| list(module)` | | The Ash resource to use for the transaction. |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`output`](#steps-transaction-output){: #steps-transaction-output } | ``any`` | | Which step or steps to use when constructing the output. Defaults to the last step. |
| [`timeout`](#steps-transaction-timeout){: #steps-transaction-timeout } | `timeout` | | A timeout to apply to the transaction. |
| [`short_name`](#steps-transaction-short_name){: #steps-transaction-short_name } | `String.t` | | Set a short name for the step. Will be used when building things like mermaid charts. |
| [`wait_for`](#steps-transaction-wait_for){: #steps-transaction-wait_for } | ``any`` | | Ensures that the step happens after the configured step or steps. This is a template who's results are not used, only awaited. |
| [`touches_resources`](#steps-transaction-touches_resources){: #steps-transaction-touches_resources } | `list(atom)` | | A list of resources touched by any custom logic in this step. This is used in the case that this step is run in a transaction. This is primarily only needed for `custom` steps. |
| [`halt_if`](#steps-transaction-halt_if){: #steps-transaction-halt_if } | ``any`` | | Halts the step by emitting an error (with an `Ash.Error.Flow.Halted`). Can use template variables. See the section on Halting for more. |
| [`halt_reason`](#steps-transaction-halt_reason){: #steps-transaction-halt_reason } | ``any`` | `:halted` | Configures the reason for the `halt_if` clause. |
| [`description`](#steps-transaction-description){: #steps-transaction-description } | `String.t` | | A description for the step. |
### Introspection
Target: `Ash.Flow.Step.Transaction`
## steps.create
```elixir
create name, resource, action
```
Declares a step that will call a create action on a resource.
### Examples
```
create :create_post, MyApp.Post, :create
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#steps-create-name){: #steps-create-name .spark-required} | `atom` | | The name of the step. Will be used when expressing dependencies, and step inputs. |
| [`resource`](#steps-create-resource){: #steps-create-resource .spark-required} | ``any`` | | The resource to call the action on. |
| [`action`](#steps-create-action){: #steps-create-action .spark-required} | ``any`` | | The action to call on the resource. |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`upsert?`](#steps-create-upsert?){: #steps-create-upsert? } | `boolean` | `false` | Whether or not this action is always an upsert. |
| [`upsert_identity`](#steps-create-upsert_identity){: #steps-create-upsert_identity } | `atom` | | The identity to use for the upsert. |
| [`short_name`](#steps-create-short_name){: #steps-create-short_name } | `String.t` | | Set a short name for the step. Will be used when building things like mermaid charts. |
| [`wait_for`](#steps-create-wait_for){: #steps-create-wait_for } | ``any`` | | Ensures that the step happens after the configured step or steps. This is a template who's results are not used, only awaited. |
| [`touches_resources`](#steps-create-touches_resources){: #steps-create-touches_resources } | `list(atom)` | | A list of resources touched by any custom logic in this step. This is used in the case that this step is run in a transaction. This is primarily only needed for `custom` steps. |
| [`halt_if`](#steps-create-halt_if){: #steps-create-halt_if } | ``any`` | | Halts the step by emitting an error (with an `Ash.Error.Flow.Halted`). Can use template variables. See the section on Halting for more. |
| [`halt_reason`](#steps-create-halt_reason){: #steps-create-halt_reason } | ``any`` | `:halted` | Configures the reason for the `halt_if` clause. |
| [`description`](#steps-create-description){: #steps-create-description } | `String.t` | | A description for the step. |
| [`api`](#steps-create-api){: #steps-create-api } | ``any`` | | The api to use when calling the action. Defaults to the api set in the `flow` section. |
| [`tenant`](#steps-create-tenant){: #steps-create-tenant } | ``any`` | | A tenant to use for the operation. May be a template or a literal value. |
| [`input`](#steps-create-input){: #steps-create-input } | ``any`` | | A template for the input. |
### Introspection
Target: `Ash.Flow.Step.Create`
## steps.debug
```elixir
debug name
```
Declares a step that will inspect its input and provide
additional debug information.
### Examples
```
debug :show_some_information do
input %{post: result(:create_post)}
end
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#steps-debug-name){: #steps-debug-name .spark-required} | `atom` | | The name of the step. Will be used when expressing dependencies, and step inputs. |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`input`](#steps-debug-input){: #steps-debug-input } | ``any`` | | A template for the input. |
| [`short_name`](#steps-debug-short_name){: #steps-debug-short_name } | `String.t` | | Set a short name for the step. Will be used when building things like mermaid charts. |
| [`wait_for`](#steps-debug-wait_for){: #steps-debug-wait_for } | ``any`` | | Ensures that the step happens after the configured step or steps. This is a template who's results are not used, only awaited. |
| [`halt_if`](#steps-debug-halt_if){: #steps-debug-halt_if } | ``any`` | | Halts the step by emitting an error (with an `Ash.Error.Flow.Halted`). Can use template variables. See the section on Halting for more. |
| [`halt_reason`](#steps-debug-halt_reason){: #steps-debug-halt_reason } | ``any`` | `:halted` | Configures the reason for the `halt_if` clause. |
| [`description`](#steps-debug-description){: #steps-debug-description } | `String.t` | | A description for the step. |
### Introspection
Target: `Ash.Flow.Step.Debug`
## steps.update
```elixir
update name, resource, action
```
Declares a step that will call a update action on a resource.
### Examples
```
update :update_post, MyApp.Post, :update do
record result(:get_post)
end
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#steps-update-name){: #steps-update-name .spark-required} | `atom` | | The name of the step. Will be used when expressing dependencies, and step inputs. |
| [`resource`](#steps-update-resource){: #steps-update-resource .spark-required} | ``any`` | | The resource to call the action on. |
| [`action`](#steps-update-action){: #steps-update-action .spark-required} | ``any`` | | The action to call on the resource. |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`record`](#steps-update-record){: #steps-update-record .spark-required} | ``any`` | | The record to be updated, can use template helpers, e.g `result(:step_name)`. |
| [`short_name`](#steps-update-short_name){: #steps-update-short_name } | `String.t` | | Set a short name for the step. Will be used when building things like mermaid charts. |
| [`wait_for`](#steps-update-wait_for){: #steps-update-wait_for } | ``any`` | | Ensures that the step happens after the configured step or steps. This is a template who's results are not used, only awaited. |
| [`touches_resources`](#steps-update-touches_resources){: #steps-update-touches_resources } | `list(atom)` | | A list of resources touched by any custom logic in this step. This is used in the case that this step is run in a transaction. This is primarily only needed for `custom` steps. |
| [`halt_if`](#steps-update-halt_if){: #steps-update-halt_if } | ``any`` | | Halts the step by emitting an error (with an `Ash.Error.Flow.Halted`). Can use template variables. See the section on Halting for more. |
| [`halt_reason`](#steps-update-halt_reason){: #steps-update-halt_reason } | ``any`` | `:halted` | Configures the reason for the `halt_if` clause. |
| [`description`](#steps-update-description){: #steps-update-description } | `String.t` | | A description for the step. |
| [`api`](#steps-update-api){: #steps-update-api } | ``any`` | | The api to use when calling the action. Defaults to the api set in the `flow` section. |
| [`tenant`](#steps-update-tenant){: #steps-update-tenant } | ``any`` | | A tenant to use for the operation. May be a template or a literal value. |
| [`input`](#steps-update-input){: #steps-update-input } | ``any`` | | A template for the input. |
### Introspection
Target: `Ash.Flow.Step.Update`
## steps.destroy
```elixir
destroy name, resource, action
```
Declares a step that will call a destroy action on a resource.
### Examples
```
destroy :destroy_post, MyApp.Post, :destroy
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#steps-destroy-name){: #steps-destroy-name .spark-required} | `atom` | | The name of the step. Will be used when expressing dependencies, and step inputs. |
| [`resource`](#steps-destroy-resource){: #steps-destroy-resource .spark-required} | ``any`` | | The resource to call the action on. |
| [`action`](#steps-destroy-action){: #steps-destroy-action .spark-required} | ``any`` | | The action to call on the resource. |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`record`](#steps-destroy-record){: #steps-destroy-record .spark-required} | ``any`` | | The record to be updated, can use template helpers, e.g `result(:step_name)`. |
| [`short_name`](#steps-destroy-short_name){: #steps-destroy-short_name } | `String.t` | | Set a short name for the step. Will be used when building things like mermaid charts. |
| [`wait_for`](#steps-destroy-wait_for){: #steps-destroy-wait_for } | ``any`` | | Ensures that the step happens after the configured step or steps. This is a template who's results are not used, only awaited. |
| [`touches_resources`](#steps-destroy-touches_resources){: #steps-destroy-touches_resources } | `list(atom)` | | A list of resources touched by any custom logic in this step. This is used in the case that this step is run in a transaction. This is primarily only needed for `custom` steps. |
| [`halt_if`](#steps-destroy-halt_if){: #steps-destroy-halt_if } | ``any`` | | Halts the step by emitting an error (with an `Ash.Error.Flow.Halted`). Can use template variables. See the section on Halting for more. |
| [`halt_reason`](#steps-destroy-halt_reason){: #steps-destroy-halt_reason } | ``any`` | `:halted` | Configures the reason for the `halt_if` clause. |
| [`description`](#steps-destroy-description){: #steps-destroy-description } | `String.t` | | A description for the step. |
| [`api`](#steps-destroy-api){: #steps-destroy-api } | ``any`` | | The api to use when calling the action. Defaults to the api set in the `flow` section. |
| [`tenant`](#steps-destroy-tenant){: #steps-destroy-tenant } | ``any`` | | A tenant to use for the operation. May be a template or a literal value. |
| [`input`](#steps-destroy-input){: #steps-destroy-input } | ``any`` | | A template for the input. |
### Introspection
Target: `Ash.Flow.Step.Destroy`
## steps.validate
```elixir
validate name, resource, action
```
Validates some input against an action.
### Examples
```
validate :update_post, MyApp.Post, :update do
record result(:get_post)
only_keys [:name]
end
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#steps-validate-name){: #steps-validate-name .spark-required} | `atom` | | The name of the step. Will be used when expressing dependencies, and step inputs. |
| [`resource`](#steps-validate-resource){: #steps-validate-resource .spark-required} | ``any`` | | The resource to call the action on. |
| [`action`](#steps-validate-action){: #steps-validate-action .spark-required} | ``any`` | | The action to call on the resource. |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`record`](#steps-validate-record){: #steps-validate-record } | ``any`` | | The record to be created/updated/destroyed. If the value is `nil` and would be required by the action type, the step is skipped and `nil` is the result of the step. |
| [`only_keys`](#steps-validate-only_keys){: #steps-validate-only_keys } | `list(atom \| list(atom))` | | A list of keys or paths to keys that should be validated. Others will be ignored, and errors generated for other fields will be ignored. |
| [`short_name`](#steps-validate-short_name){: #steps-validate-short_name } | `String.t` | | Set a short name for the step. Will be used when building things like mermaid charts. |
| [`wait_for`](#steps-validate-wait_for){: #steps-validate-wait_for } | ``any`` | | Ensures that the step happens after the configured step or steps. This is a template who's results are not used, only awaited. |
| [`touches_resources`](#steps-validate-touches_resources){: #steps-validate-touches_resources } | `list(atom)` | | A list of resources touched by any custom logic in this step. This is used in the case that this step is run in a transaction. This is primarily only needed for `custom` steps. |
| [`halt_if`](#steps-validate-halt_if){: #steps-validate-halt_if } | ``any`` | | Halts the step by emitting an error (with an `Ash.Error.Flow.Halted`). Can use template variables. See the section on Halting for more. |
| [`halt_reason`](#steps-validate-halt_reason){: #steps-validate-halt_reason } | ``any`` | `:halted` | Configures the reason for the `halt_if` clause. |
| [`description`](#steps-validate-description){: #steps-validate-description } | `String.t` | | A description for the step. |
| [`api`](#steps-validate-api){: #steps-validate-api } | ``any`` | | The api to use when calling the action. Defaults to the api set in the `flow` section. |
| [`tenant`](#steps-validate-tenant){: #steps-validate-tenant } | ``any`` | | A tenant to use for the operation. May be a template or a literal value. |
| [`input`](#steps-validate-input){: #steps-validate-input } | ``any`` | | A template for the input. |
### Introspection
Target: `Ash.Flow.Step.Update`
## steps.read
```elixir
read name, resource, action
```
Declares a step that will call a read action on a resource.
### Examples
```
read :destroy_post, MyApp.Post, :destroy
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#steps-read-name){: #steps-read-name .spark-required} | `atom` | | The name of the step. Will be used when expressing dependencies, and step inputs. |
| [`resource`](#steps-read-resource){: #steps-read-resource .spark-required} | ``any`` | | The resource to call the action on. |
| [`action`](#steps-read-action){: #steps-read-action .spark-required} | ``any`` | | The action to call on the resource. |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`get?`](#steps-read-get?){: #steps-read-get? } | `boolean` | `false` | Whether or not read action is expected to return a single result or `nil`. Set to `true` automatically if `get? true`. |
| [`not_found_error?`](#steps-read-not_found_error?){: #steps-read-not_found_error? } | `boolean` | `true` | Whether or not finding no record should result in a not found error |
| [`short_name`](#steps-read-short_name){: #steps-read-short_name } | `String.t` | | Set a short name for the step. Will be used when building things like mermaid charts. |
| [`wait_for`](#steps-read-wait_for){: #steps-read-wait_for } | ``any`` | | Ensures that the step happens after the configured step or steps. This is a template who's results are not used, only awaited. |
| [`touches_resources`](#steps-read-touches_resources){: #steps-read-touches_resources } | `list(atom)` | | A list of resources touched by any custom logic in this step. This is used in the case that this step is run in a transaction. This is primarily only needed for `custom` steps. |
| [`halt_if`](#steps-read-halt_if){: #steps-read-halt_if } | ``any`` | | Halts the step by emitting an error (with an `Ash.Error.Flow.Halted`). Can use template variables. See the section on Halting for more. |
| [`halt_reason`](#steps-read-halt_reason){: #steps-read-halt_reason } | ``any`` | `:halted` | Configures the reason for the `halt_if` clause. |
| [`description`](#steps-read-description){: #steps-read-description } | `String.t` | | A description for the step. |
| [`api`](#steps-read-api){: #steps-read-api } | ``any`` | | The api to use when calling the action. Defaults to the api set in the `flow` section. |
| [`tenant`](#steps-read-tenant){: #steps-read-tenant } | ``any`` | | A tenant to use for the operation. May be a template or a literal value. |
| [`input`](#steps-read-input){: #steps-read-input } | ``any`` | | A template for the input. |
### Introspection
Target: `Ash.Flow.Step.Read`
## steps.run_flow
```elixir
run_flow name, flow
```
Runs another flow as part of the current flow.
The return value of the step is the return value of the flow.
### Examples
```
run_flow :get_org, GetOrgByName do
input %{
name: arg(:org_name)
}
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#steps-run_flow-name){: #steps-run_flow-name .spark-required} | `atom` | | The name of the step. Will be used when expressing dependencies, and step inputs. |
| [`flow`](#steps-run_flow-flow){: #steps-run_flow-flow .spark-required} | `atom` | | The flow to run. |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`input`](#steps-run_flow-input){: #steps-run_flow-input } | ``any`` | | A template for the input. |
| [`short_name`](#steps-run_flow-short_name){: #steps-run_flow-short_name } | `String.t` | | Set a short name for the step. Will be used when building things like mermaid charts. |
| [`wait_for`](#steps-run_flow-wait_for){: #steps-run_flow-wait_for } | ``any`` | | Ensures that the step happens after the configured step or steps. This is a template who's results are not used, only awaited. |
| [`touches_resources`](#steps-run_flow-touches_resources){: #steps-run_flow-touches_resources } | `list(atom)` | | A list of resources touched by any custom logic in this step. This is used in the case that this step is run in a transaction. This is primarily only needed for `custom` steps. |
| [`halt_if`](#steps-run_flow-halt_if){: #steps-run_flow-halt_if } | ``any`` | | Halts the step by emitting an error (with an `Ash.Error.Flow.Halted`). Can use template variables. See the section on Halting for more. |
| [`halt_reason`](#steps-run_flow-halt_reason){: #steps-run_flow-halt_reason } | ``any`` | `:halted` | Configures the reason for the `halt_if` clause. |
| [`description`](#steps-run_flow-description){: #steps-run_flow-description } | `String.t` | | A description for the step. |
### Introspection
Target: `Ash.Flow.Step.RunFlow`
## steps.custom
```elixir
custom name, custom
```
Runs a custom step module.
See `Ash.Flow.Step` for the necessary callbacks and more information.
### Examples
```
custom :do_custom_thing, MyApp.DoCustomThing do
input %{...}
end
```
```
custom :do_custom_thing, {MyApp.DoCustomThing, opt1: :foo, opt2: :bar} do
input %{...}
end
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#steps-custom-name){: #steps-custom-name .spark-required} | `atom` | | The name of the step. Will be used when expressing dependencies, and step inputs. |
| [`custom`](#steps-custom-custom){: #steps-custom-custom } | `(any, any -> any) \| module` | | The module that implements the step behaviour. Also accepts a 2 argument function that takes the input and the context. |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`input`](#steps-custom-input){: #steps-custom-input } | ``any`` | | A template for the input. |
| [`async?`](#steps-custom-async?){: #steps-custom-async? } | `boolean` | `false` | Whether or not this step can be run outside of the current process. |
| [`short_name`](#steps-custom-short_name){: #steps-custom-short_name } | `String.t` | | Set a short name for the step. Will be used when building things like mermaid charts. |
| [`wait_for`](#steps-custom-wait_for){: #steps-custom-wait_for } | ``any`` | | Ensures that the step happens after the configured step or steps. This is a template who's results are not used, only awaited. |
| [`touches_resources`](#steps-custom-touches_resources){: #steps-custom-touches_resources } | `list(atom)` | | A list of resources touched by any custom logic in this step. This is used in the case that this step is run in a transaction. This is primarily only needed for `custom` steps. |
| [`halt_if`](#steps-custom-halt_if){: #steps-custom-halt_if } | ``any`` | | Halts the step by emitting an error (with an `Ash.Error.Flow.Halted`). Can use template variables. See the section on Halting for more. |
| [`halt_reason`](#steps-custom-halt_reason){: #steps-custom-halt_reason } | ``any`` | `:halted` | Configures the reason for the `halt_if` clause. |
| [`description`](#steps-custom-description){: #steps-custom-description } | `String.t` | | A description for the step. |
### Introspection
Target: `Ash.Flow.Step.Custom`
<style type="text/css">.spark-required::after { content: "*"; color: red !important; }</style>