content{{MetaClassInfoBox| title = Query| name = {{PAGENAME}}| internalname = SystemObjects.{{PAGENAME}}| namespace = System.Query| image = [[File:SY_QUERY.png|220px]]| imagecaption = Query| purpose = Configure queries| version = 2+| typestring = UBIK.Kernel.MetaClass| runtimetype = UBIK.Kernel.Query}}In UBIK, queries are used for fetching a list of [[ContentClass|ContentClasses]] from the database. Queries use data base mechanism for perfomant data access and will deliver a list of objects of a certain [[Metaclass]].Queries can be used in different scenarios: * data fetching (n records)* finding a single or a set of recordset(s)* used as definition of root nodes in a [[View]]
{{HintMethods}} == Query and QueryItems ==A Query is defined for a single [[CategoryMetaClass]], where the MetaClass is defined in the property '''FILTEROBJECT'''. Once a query is evaluated it will deliver a list of objects of type ContentClasses (instances), filtered as defined by its [[QUERYITEM|QueryItems]].The correspondence between Queries and its items is created and stored by a relationship [[SYSREL_QUERY]]. Therefore a single QueryItem can be used several times for different Queries. The "FILTEROBJECT" of a query describes the target MetaClass to find instances of. E.g., if I want to find pumps, a MetaClass "MC_PUMP" can be used as filter target. The query items of a query describe filters for property values. E.g., a query item could specify that only objects with a value larger than "12" in the "VOLTAGE" MetaProperty should be retrieved. Multiple query items can be connected logically (AND/OR) so all of them or just some (or one) of them need to match. ==Content query ==Objects can be loaded on demand from the server, as storing a huge amount of data permanently on the device would need too much resources. A content query is a Query instance classified as [[SYSCLS_QUERY]] and can be related to other content objects. For being shown in the View hierarchy it is necessary to [[HowTo:Create_a_new_ViewItem#QueryViewItem|create a QueryViewItem]] for the query object itself. Further on, for being published to the client a [[QUERYSCOPE|Query Scopes]] has to be [[HowTo:Create_a_new_QueryScope|created]] and added to the [[ACM]]. The result of the query depends on the network connection and the {{UBIK}} [[Sync Mode|sync mode]]and follows the same rules as [[CategoryOptical_code#Searching_for_objects|Searching for objects by Optical codes]]. == Scan query ==Objects can be searched by optical codes (e.g. Barcode, QR code) using a scan query. See detailed articles on [[HowTo:Make_an_Object_be_found_by_Optical_Codes|How toprepare the object]] and [[HowTo:Find_Objects_by_Optical_Codes|How to find objects on the client]]. == Lazy loading query =={{Version/WinXSince|4.4.0}} {{Version/XamarinSince|4.4.0}} The evaluation of a [[SYSCLS LAZY LOADING QUERY|lazy loading Query's]] children is done automatically if no local children exist yet, otherwise evaluation has to be triggered manually to prevent excessive server calls. In the case of an [[Offline_Query_(UBIK_WinX)|Offline Query]] the evaluation happens despite the existence of local children. [[Category:Metaclasses|QUERY]] == Usage of DatabaseViews ==It is also possible to define a Database View and use this View for the evaluation of Queries (see [[VirtualContentClass]]). == See also ==* [[QUERYITEM]] [[Category:Metaclasses|QUERY]]