When programming with the SCI the following main concepts are to keep in mind:

Stateless vs. Stateful

The SCI is split into two parts, one providing functionality for stateless applications with a very short lifetime, and one to be used in long running applications that can benefit from using multiple threads, event based communication and internal caching in the SCI library. The stateless part is hosted in a inmationSLI.dll, and self sufficient for developing a stateless application.

Project Reference Stateless SLI
Figure 1. Project Reference Stateless SLI

The stateful part is hosted in the inmationApi.dll, which itself uses functionality from the stateless part. To develop an application using the SCI in a stateful fashion, both libraries have to be referenced in the project.

Project References Statefull SCI
Figure 2. Project References Statefull SCI

Static Methods

Static methods are to be used in an application wide context to initialize, configure, and reset the SCI and its communication with the Core.

Static Functions Inline Help
Figure 3. Static Functions Inline Help

Instance Functions

A local instance of the SCI is to be used to call individual functions to operate with the object data of the system.

Instance Functions Inline Help
Figure 4. Instance Functions Inline Help


SCI makes use of system paths wherever possible to identify the model element in the system that should be operated on. All model objects including all their properties can be reached via a unique path.

System Path examples
Figure 5. System Path examples

Container Objects

SCI makes use of special object types (also called containers) when calling functions that operate on object data. These containers host the parameters used when executing the called function and also receive the individual return value(s). For example, reading the current value of an object requires a ReadItem instance.

ReadItem Usage in ReadValue
Figure 6. ReadItem Usage in ReadValue

Result Objects

SCI makes use of special object types to return communication results when calling functions that operate on object data. Results returned by methods give back a high level return value, signaling a general communication success or failure. For example the ReadValue function returns a Result object.

Result Object Returned by Function
Figure 7. Result Object Returned by Function

The same object type is used in Container objects like the ReadItem. These have a Result property of type Result that signals an object specific method execution success or failure. For example, the readItem instance hosts a Result object set after execution of ReadValue.

Container Object Hosts Individual Result
Figure 8. Container Object Hosts Individual Result