====UVALUES==== ===Parameters=== ^Order^Name^Type^Desc^ |1|assets|[[asset list|asset list]]|A list of assets| |2|properties|[[property list|property list]]|A list of properties| ===Returns=== Places a [[point list|list of points]] onto the stack, searching //upstream// into parent assets if no match can be found on the assets in the list. ===Description=== Returns a [[point list|list of points]] given both a [[asset list|list of assets]] and a [[property list|list of properties]]. The properties returned from this function will **not** contain live values or history - these are usually loaded when needed by later functions, or when the values are returned. This avoids needless data loading, as requesting live data can be expensive for large numbers of points. Note that only valid points are returned - if you ask for a property on an asset that doesn't contain that property, nothing will be returned. **All** assets in each list will be compared to one-another. So you will have points for //any// asset in the asset list that has //any// property in the property list. ===Example=== **'TE101' ASSET 'Position' PROPERTY UVALUES** This function will return a point for Position on asset TE101, if such a point exists. If none can be found, it will search the //parents// of that asset until either... * An asset with a //Position// property is located, or * No more assets remain This is useful when you have complex systems with many parts that share an ID, inspection time, location or other useful piece of information that doesn't flow through any relationships.