# Choosing node forms

Use the short XML tag listed in the reference when available. Every available node kind can also use `<node id="…" type="…"><config>…</config></node>` with typed `<value>` entries, as shown in the values chapter.

Keep node IDs stable when editing a workflow. Display names can change independently. Set `timeoutSeconds` and `maxRetries` on a node when needed; settings inside its configuration may control different timeouts. The reference distinguishes XML names from configuration property names.

Use `for-each` for repeated work and name the current item with `as`. Its nested body performs the work for each item. Set concurrency according to the destination's limits. A `run-report` step starts a published report version and returns its run identifier; report generation completes separately.

Additional node kinds depend on the features enabled in your installation. Ask the editor for current suggestions before using an unfamiliar kind.

This loop copies each name into its result list. With Alice and Bob as the input rows, `nodes.each.output.results` contains those names in the same order and `nodes.each.output.count` is 2.

```xml
<workflow>
  <nodes>
    <for-each id="each" items="{{ input.rows }}" as="row" maxConcurrency="2">
      <body>
        <transform>
          <value name="name" expression="variables.row.name"/>
        </transform>
      </body>
    </for-each>
  </nodes>
  <edges/>
</workflow>
```