{"title":"Recursive Loop End","nodeType":"LoopEnd","id":"*2gmj94W3WV__RuMY","factoryName":"org.knime.base.node.meta.looper.recursive.RecursiveLoopEndDynamicNodeFactory","factoryId":"org.knime.base.node.meta.looper.recursive.RecursiveLoopEndDynamicNodeFactory","path":["Workflow Control","Loop Support"],"owner":"knime","ownerAccountId":"account:team:b5f0848f-496d-4e6a-b869-fa3532248db7","description":"<p>The Recursive Loop node pair enables the passing of data tables from the <i>Recursive Loop End</i> back to the <i>Recursive Loop Start</i> .</p>\n            \n            <p>The <i>Recursive Loop Start</i> requires initialized tables. These tables are output by the <i>Recursive Loop Start</i> in the first iteration of the loop.</p>\n            \n            <p>The tables received by the corresponding <i>Recursive Loop End</i> are passed back to the <i>Recursive Loop Start</i> node. Starting with the second iteration, the <i>Recursive Loop Start</i> node outputs the data as received by the <i>Recursive Loop End</i> .</p>\n            \n            <p>You can add more recursion input tables and collector input and output tables using the “&#43;” button on the node. The number of recursion ports must be the same as the number of recursion ports of the corresponding <i>Recursive Loop Start</i> node. Recursion and collector ports are independent of each other. The collection ports are always listed first.</p>\n            \n            <p>The loop runs until one of the three stopping criteria is met:</p>\n            \n            <ul><li><i>Maximum number of iterations:</i> to ensure no endless loop is created, the loop will end after the set number of iterations.</li><li><i>Minimal number of rows:</i> to ensure enough rows are present for processing, the loop stops if <b>one</b> of its recursion input tables contains fewer rows than the set minimum. This minimum can be set for each recursion input table individually.</li><li><i>End loop with variable:</i> the loop ends if the option is enabled and the value of the selected variable equals “true”.</li></ul>\n            \n            <p>The data passed to the collector ports is collected and passed to the <i>n</i> respective output ports. The data at the recursion ports (all ports after input port <i>n</i> ) is returned to the <i>Recursive Loop Start</i> node.</p>\n            \n        \n        ","shortDescription":"The loop end node for a recursive loop. This type of loop passes data from the Recursive Loop End node\n    to the Recursive Loop Start node.","keywords":[],"deprecated":false,"streamable":false,"tags":["Workflow Control","Loop Support"],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3BpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowYjM2YWM5Ny01ZWJhLTQwZTctOTE4OS1iYmU4ZDdkMGYyNGUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkMzNjlEQzU4NDlCMTFFNTlCODZDMzA0NTY3MzY5QkQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkMzNjlEQzQ4NDlCMTFFNTlCODZDMzA0NTY3MzY5QkQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MkZFNkZENzQ1QzcxMUU1QUM2QkE3NzQyQjhFM0EyRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4MkZFNkZEODQ1QzcxMUU1QUM2QkE3NzQyQjhFM0EyRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pq66ZKoAAAEKSURBVHjaYmRAAs/8/C2A1FQg1gViVqjwbyC+DMTZUps2noCp/f//P5hmRNK8AEjFQ7kvgPg2lK0KxBJQ9kKgIQkYBiBpfgfE3sg2IblsKxALwQyBGwCVPA7VLA2U/MGABQDVcQCpp1BDLCU3bgBbwrjP2fW/BjcXQ+LV6wyXP39lwKr51VNGJJeALDsHNMAYLPk8KPj/i3iQi7ADKTHp/0hm/UfHTP///GFgkZJkIBcwMVAImBhZWBj+PHtOvgFX3n9g+Pf+PYO5iCgDIyMjBgYGIF4DSIlGHiD1BIj5kaORCZpoFkLj9ynUQHTN9kiaFyInNGKSshoQi+NNyhRlJhiDXECxAQABBgAWr547GUFO3wAAAABJRU5ErkJggg==","views":[],"inPorts":[{"objectClass":"org.knime.core.node.BufferedDataTable","color":"000000","dataType":"Table","optional":false,"name":"Collecting data","description":"Data to be collected for the output."},{"objectClass":"org.knime.core.node.BufferedDataTable","color":"000000","dataType":"Table","optional":false,"name":"Recursion data","description":"Data to be passed back to loop start."}],"outPorts":[{"objectClass":"org.knime.core.node.BufferedDataTable","color":"000000","dataType":"Table","optional":false,"name":"Collected data","description":"The rows collected from the corresponding collector port."}],"dynInPorts":[{"groupName":"Collector","groupDescription":"Data to be collected for the output.","types":[{"objectClass":"org.knime.core.node.BufferedDataTable","color":"000000","dataType":"Table"}]},{"groupName":"Recursion","groupDescription":"Data to be passed back to loop start.","types":[{"objectClass":"org.knime.core.node.BufferedDataTable","color":"000000","dataType":"Table"}]}],"dynOutPorts":[{"groupName":"Collector","groupDescription":"The rows collected from the corresponding collector port.","types":[{"objectClass":"org.knime.core.node.BufferedDataTable","color":"000000","dataType":"Table"}]}],"additionalSiteInformation":{"url":"https://update.knime.com/analytics-platform/5.12","trusted":true,"enabledByDefault":true,"name":"KNIME Analytics Platform 5.12 Update Site","version":"5.12.0"},"dialog":[{"sectionName":"Options","fields":[{"name":"Minimal number of rows","description":"The minimal number of rows for each recursion input table required to continue iterating. If <b>one</b> of the tables falls below its configured minimum, the loop stops. The minimum can be set per recursion input table individually.\n<ul><li><b>Minimal number of rows for input port</b> : Minimal number of rows for the recursion input table required to continue iterating. If the number of rows falls below this threshold, the loop stops.</li></ul>","optional":false},{"name":"Maximal number of iterations","description":"The maximum number of iterations the loop will run. Prevents endless loops.","optional":false},{"name":"End loop with variable","description":"Enables ending the loop based on a flow variable. When selected, choose the flow variable that terminates the loop when its value equals “true”.","optional":false},{"name":"Data collection","description":"Configure how data from each collection port is collected across iterations.\n<ul><li><b>Collect data from last iteration only</b> : If this option is checked, only the last input to the corresponding collecting data port is passed through to the outport. Hence, the data of earlier iterations is discarded. This option can be set for each collector port individually.</li><li><b>Add iteration column</b> : Adds a column containing the iteration number to the corresponding collector output table. Disabled when only the last iteration is collected. Configurable per collector port.</li></ul>","optional":false},{"name":"Propagate modified loop variables","description":"If checked, variables whose values are modified within the loop are exported by this node. These variables must be declared outside the loop, i.e. injected into the loop from a side-branch or be available upstream of the corresponding loop start node. For the latter, any modification of a variable is passed back to the start node in subsequent iterations (e.g. moving sum calculation). Note that variables defined by the loop start node itself are excluded as these usually represent loop controls (e.g. <i>&#34;currentIteration&#34;</i> ).","optional":false}]}],"links":[{"text":"KNIME Flow Control Guide: Section Loops","url":"https://docs.knime.com/latest/analytics_platform_flow_control_guide/index.html#loops"}],"kudos":[],"kudosCount":0,"bundleInformation":{"bundleVersion":"5.12.0.v202606261225","bundleName":"KNIME Base Nodes","bundleSymbolicName":"org.knime.base","bundleVendor":"KNIME AG, Zurich, Switzerland","featureSymbolicName":"org.knime.features.base","featureName":"KNIME Base nodes","featureVersion":"5.12.0.v202606261225","featureVendor":"KNIME AG, Zurich, Switzerland","extensionId":"*bjR3r1yWOznPIEXS"},"frequentSuccessors":[]}
