The SANDForms UI technology provides for ad hoc queries, result listings, instance display, and modification. How a SandUI is implemented varies depending SandUIAdaptor being used, but generally common elements are described here for ease of reference.
This is intended only as a general guide, and may not be universally applicable. It is possible that a SandUIAdaptor would not use any graphics at all (for example it might use oveloaded hyperlinks instead).
When an instance contains another instance, or contains a reference to
another instance, the UI provides a mechanism to move from the current
instance to the other. When an instance contains another instance
directly, this is a DRILLDOWN action. When an instance contains a
reference to another instance this is a DEREF action. The default graphic
used for both DEREF and DRILLDOWN is
Initially, two separate graphics were used to represent the two separate actions, but this didn't provide any real utility given that only one type of action was typically possible within the context. This is because persistent structs cannot contain other persistent structs directly, so the action in a typical application was usually DEREF. Having two separate images just added to overall complexity without any real benefit.
When a user has elected to find a reference (in order to set a reference
value while editing), they issue a query, and get back a listing of
matching instances. They then SELECT an instance to set the value from.
The default graphic for SELECT is
The display semantics of SELECT were considered different enough from DRILLDOWN or DEREF to warrant a separate graphic. Some interfaces may still choose to use the same graphic for both, or use alternate implementations.
When issuing a query to find a reference that is an interface or superclass, it is necessary to first disambiguate the struct class. A SandUIAdaptor will handle this disambiguation automatically by querying the user, forming a two-stage query process. A UI implementation can avoid this disambiguation by disambiguating the class in the query first.