# Automation Professionals' Integration Toolkit Module

**URL:** <https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934>\
**Category:** 3rd Party Modules\
**Tags:** ignition83, scripting, ignition81, vision, perspective\
**Created:** [June 13, 2023, 12:42am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934 "2023-06-13T00:42:35Z")\
**Posts on this page:** 1\
**Showing post:** 3

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [June 14, 2023, 3:52pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/3 "2023-06-14T15:52:56Z")

</div>

So I was poking around and realized I missed a major feature: a substitute for python's `range()` functions.

And while at it, I factored out some common code so that `where()` and `orderBy()` could handle and return sequences instead of just datasets. Of the four iterators, now only the `selectStart()` function requires and returns a dataset. `forEach()` still only **returns** a list, but can accept datasets, lists, arrays, and single integers (for range behavior).

Here ya go:

For Ignition v8.1+ only: ~~v2.0.1.231651531~~

---

_[View the full topic](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934)._
