Infor SyteLineGlossary

What Is IDO Collection?

Also known as: IDOCollection, IDO row collection

Definition

An IDO collection in SyteLine is the in-memory set of rows a LoadCollection call returns from an IDO. It holds the property values plus each row's state - unchanged, modified, inserted, or deleted - so the framework knows exactly what to persist on update.

IDO Collection Explained

When a form opens or an integration calls LoadCollection, the IDO runtime executes the underlying query and returns a collection object rather than a raw result set. Each row carries the requested property values and a state marker. As the user edits fields or a script modifies values, rows flip to a modified state; new rows are marked inserted, removed rows marked deleted. UpdateCollection then sends only the changed rows back, and the runtime generates the corresponding SQL.

This state tracking is what makes optimistic concurrency work. The collection typically carries a row-pointer or timestamp value captured at load. If another user changed the same row in the interval, the update fails rather than silently overwriting their work. Developers meeting SyteLine for the first time often encounter this as a puzzling update error; the correct response is to reload the collection and reapply the change, not to disable the check.

In form scripting and extension classes, the collection is the object you actually manipulate. Scripts read and set property values by name for the current row, iterate rows, insert new ones, and mark rows for deletion, then call update to persist. Because the API works in property names rather than column names, scripts stay readable and survive schema changes that leave the property mapping intact.

Two practical constraints matter. First, collections are memory-resident, and LoadCollection honours a configured record cap, so a request expecting fifty thousand rows may quietly receive far fewer. Always paginate deliberately and verify counts. Second, a collection is a snapshot - it does not track database changes made after the load, so long-lived collections in a batch process can operate on stale data and should be refreshed at sensible intervals.

Why It Matters

  • Row-state tracking is why SyteLine sends minimal updates instead of rewriting entire rows, reducing lock contention.
  • Optimistic concurrency built into the collection prevents silent overwrites between concurrent users.
  • The record cap on LoadCollection silently truncates large integration reads and is a classic source of missing data.
  • Understanding the collection API is prerequisite knowledge for anyone writing SyteLine form scripts or extension classes.

In Practice

A gotcha worth internalising: an integration that loads a collection, spends several minutes processing, then calls update will hit concurrency failures if anyone touched those rows meanwhile. Structure long-running jobs to load a key list first, then load, modify, and update each small batch immediately - short-lived collections fail far less.

Frequently Asked Questions

What is the difference between LoadCollection and UpdateCollection?

LoadCollection reads rows from an IDO into an in-memory collection using a filter, property list, and order-by. UpdateCollection sends that collection back so the runtime can persist changes, generating inserts, updates, and deletes based on each row's tracked state. Together they form the read-modify-write cycle that every SyteLine form and IDO-based integration relies on.

Why do I get a concurrency error when updating an IDO collection?

Because the collection captured a row version at load time and another user or process changed that row before your update arrived. The framework refuses to overwrite work it cannot verify. The correct fix is to reload the affected rows, reapply your change against current data, and update again - not to disable the check, which risks silent data loss.

Working with IDO Collection in a live environment? Our engineers do this every day - and our AI agents automate most of it.