////
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at
  http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
////

[[Loops]]
:imagesdir: ../../assets/images

The easiest way to loop over a set of values, rows, files, ... is to use an Executor transform.

* xref:pipeline/transforms/pipeline-executor.adoc[Pipeline Executor] : run a pipeline for each input row
* xref:pipeline/transforms/workflow-executor.adoc[Workflow Executor] : run a workflow for each input row
* xref:workflow/actions/repeat.adoc[Repeat]: run a workflow or pipeline from a workflow action until a variable (value) is set.
* xref:workflow/actions/repeat-end.adoc[End Repeat]: break out of a loop that was started by a Repeat action.

Each of these options allows you to map field values to parameters for the child pipeline or workflow, making loops a breeze.

TIP: Avoid the "old" way of looping in workflows through the xref:pipeline/transforms/copyrowstoresult.adoc[Copy rows to result] transform. This mostly still exists for historical reasons. It makes it hard to see what is going on inside your loop, and this way of looping won't be around in Apache Hop forever.

The xref:how-to-guides/loops-in-apache-hop.adoc[Looping how-to guide] provides more detailed information on the topic.