Extend and Replace IDOs

The IDO development system allows a developer to create a new IDO that inherits all the properties, methods, tables, and the extension class from an existing IDO. The relationship between the created IDO and the base IDO is called an "extends" relationship; the new IDO inherits from the base IDO and extends it.

The developer can optionally flag an extending IDO as a replacement for the base IDO. When an extending IDO replaces its base IDO, all IDO requests that are targeted for the base IDO are rerouted through the extending IDO. These requests are the GetPropertyInfo, LoadCollection, UpdateCollection, and Invoke requests.

The options Extends and Extend and Replace are available in the New IDO Wizard. See Adding an IDO.

An extending IDO (one with a base IDO) can only make additive changes to the base IDO. That is, new properties, methods, tables, and an extension class can be added, but none of the base properties, methods, tables, or extension classes can be modified or deleted. New bound properties can be bound to columns from tables in the extending IDO or in any base IDO. Likewise, new derived properties can reference properties in the extending IDO as well as properties in any base IDO.

An extending IDO may itself be extended by one or more other IDOs. There is no hard limit to the number of levels in an inheritance chain. While any number of extending IDOs can share the same base IDO, no more than one sibling IDO can be flagged as a replacement for the base IDO.

When the IDO runtime processes IDO requests, it generates events that may be handled by IDO extension classes. If an extending IDO has one or more base IDOs that have extension classes associated with them, the events will fire in all extension classes, but the order is indeterminate.

The base IDO and the replace flag can only be set when creating a new IDO. The attributes are read-only for existing IDOs.