An app is represented as a qvf file and contains properties and component objects. When the engine retrieves an app for the API, it converts the app to a JSON structure and returns a handle to be used for API interactions. The component objects of the app are turned into JSON generic objects. These generic objects are sub-objects of the app and cannot exist without it.
Generic objects can represent many different app components, such as sheets, stories, lists, hypercubes, slides, and bookmarks. Generic objects can contain or refer to other generic objects, depending on their respective types. The qType property of the generic object identifies its type (for example, some possible values for qType are "sheet", "Dimension", "Measure", and "GenericObject").
In the context of the Engine API, apps are sometimes referred to as documents. In the following diagram, the document object (that is, the app) contains app objects (properties and sub-objects, where the sub-objects are represented by generic objects). The global object refers to the engine itself.
Properties and layout
A generic object's properties are evaluated by the engine, and the resulting object, called a layout, contains the calculated values. You can set the properties of a generic object by calling the SetProperties method. You retrieve the evaluated properties by calling the GetLayout method.
Special types of generic objects
A hypercube is a special kind of non-persisted generic object that is used in the calculation of query results. Hypercubes allow for complex aggregations against multiple dimensions. If selections are applied, the engine calculates only the selected values.
A list object is a visualization that contains one dimension. When the engine calculates the layout of a list object, it calculates all values. If some selections are applied, the selected values are displayed along with the excluded and optional values.