Field Squared API Services

<back to all web services

AssetQuery

/{Workspace}/AssetQuery allows flexible querying of assets using structured filters.
Supports various operators (eq, ne, contains, in, gt, lt, exists) for precise asset searches.
Can query by core fields (type, name, created) and custom data fields (data.EID, data.FDH_ID, etc.).
Example: POST with filters for exact matches on type='FDH' and data.EID='specific-value'

The following routes are available for this service:
POST/{Workspace}/AssetQuery
import java.math.*
import java.util.*
import net.servicestack.client.*


/**
* /{Workspace}/AssetQuery allows flexible querying of assets using structured filters.Supports various operators (eq, ne, contains, in, gt, lt, exists) for precise asset searches.Can query by core fields (type, name, created) and custom data fields (data.EID, data.FDH_ID, etc.).Example: POST with filters for exact matches on type='FDH' and data.EID='specific-value'
*/
open class AssetQuery
{
    var Workspace:String? = null
    var Filters:ArrayList<QueryFilter> = ArrayList<QueryFilter>()
    var RecStart:Int? = null
    var RecCount:Int? = null
    var Sort:ArrayList<SortCriteria> = ArrayList<SortCriteria>()
    var SuppressGeometry:Boolean? = null
}

open class QueryFilter
{
    var Field:String? = null
    var Operator:String? = null
    var Value:Object? = null
}

open class SortCriteria
{
    var Field:String? = null
    var Direction:String? = null
}

open class AssetQueryResponse
{
    var Assets:ArrayList<Asset> = ArrayList<Asset>()
    var TotalCount:Long? = null
    var RecStart:Int? = null
    var RecCount:Int? = null
}

/**
* Contains the data for an asset within the system.
*/
open class Asset
{
    var Workspace:String? = null
    var TimeZone:String? = null
    var AssignedWorkspace:String? = null
    var ObjectId:String? = null
    var VersionId:String? = null
    var BasedOn:String? = null
    var ExternalId:String? = null
    var Created:String? = null
    var LastUpdated:String? = null
    var Name:String? = null
    var Schedules:ArrayList<Schedule> = ArrayList<Schedule>()
    var Documents:ArrayList<DomainItem> = ArrayList<DomainItem>()
    var Tasks:ArrayList<DomainItem> = ArrayList<DomainItem>()
    var TaskSeries:ArrayList<String> = ArrayList<String>()
    var TaskSeriesTemplates:ArrayList<String> = ArrayList<String>()
    var Users:ArrayList<DomainItem> = ArrayList<DomainItem>()
    var Type:String? = null
    var Symbol:String? = null
    var Data:HashMap<String,String> = HashMap<String,String>()
    var Geometry:Geometry? = null
    var MaintenanceHistory:ArrayList<MaintenanceRecord> = ArrayList<MaintenanceRecord>()
    var Parent:String? = null
    var Ancestors:ArrayList<String> = ArrayList<String>()
    var LocationHistory:ArrayList<LocationHistory> = ArrayList<LocationHistory>()
    var Owner:ClassedItem? = null
    var IsParent:Boolean? = null
    var Assets:ArrayList<String> = ArrayList<String>()
    var Contacts:ArrayList<String> = ArrayList<String>()
    var GeometryString:String? = null
    var SourceProjection:String? = null
    var Events:ArrayList<EventItem> = ArrayList<EventItem>()
    var Anno:Anno? = null
    var Teams:ArrayList<String> = ArrayList<String>()
    var Address:AddressBasic? = null
    var CreatedBy:String? = null
    var InventoryItems:ArrayList<String> = ArrayList<String>()
    var ActiveLaborTypes:HashMap<String,Object> = HashMap<String,Object>()
    var Levels:Int? = null
    var AllAssests:Int? = null
    var Barcode:String? = null
    var CustomDataFields:ArrayList<CustomDataField> = ArrayList<CustomDataField>()
}

open class Schedule
{
    var Workspace:String? = null
    var ObjectId:String? = null
    var VersionId:String? = null
    var BasedOn:String? = null
    var Start:String? = null
    var End:String? = null
    var TimeZone:String? = null
    var Users:ArrayList<String> = ArrayList<String>()
    var Teams:ArrayList<String> = ArrayList<String>()
    var Data:HashMap<String,Object> = HashMap<String,Object>()
}

open class DomainItem
{
    var Workspace:String? = null
    var ObjectId:String? = null
    var VersionId:String? = null
    var LastUpdated:String? = null
}

open class Geometry
{
    var Type:String? = null
    var Coordinates:ArrayList<Location> = ArrayList<Location>()
}

open class Location
{
    var y:Double? = null
    var x:Double? = null
}

open class MaintenanceRecord
{
    var DateTime:String? = null
    var Notes:String? = null
}

open class LocationHistory
{
    var Date:String? = null
    var Location:Location? = null
    var Barcode:String? = null
    var Notes:String? = null
    var IsScan:Boolean? = null
}

open class ClassedItem
{
    var ObjectId:String? = null
    var Class:String? = null
    var VersionId:String? = null
    var Ancestors:ArrayList<String> = ArrayList<String>()
    var Type:String? = null
}

open class EventItem
{
    var ObjectId:String? = null
    var Date:String? = null
    var Location:Location? = null
    var Barcode:String? = null
    var Details:String? = null
    var Type:String? = null
    var IsScan:Boolean? = null
    var User:String? = null
    var SelectedBy:String? = null
    var Status:String? = null
    var StatusType:String? = null
    var DateCreated:String? = null
    var Automatic:Boolean? = null
}

open class Anno
{
    var X:Double? = null
    var Y:Double? = null
    var R:Double? = null
    var S:Double? = null
    var T:String? = null
}

open class AddressBasic
{
    var Street:String? = null
    var Unit:String? = null
    var City:String? = null
    var State:String? = null
    var Zip:String? = null
    var Country:String? = null
    var Location:Location? = null
}

open class CustomDataField
{
    var Binding:String? = null
    var Label:String? = null
    var Value:Object? = null
    var DataType:String? = null
    var IsReadOnly:Boolean? = null
    var IsHidden:Boolean? = null
    var Values:String? = null
}

Kotlin AssetQuery DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /{Workspace}/AssetQuery HTTP/1.1 
Host: dev.fieldsquared.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	Workspace: String,
	Filters: 
	[
		{
			Field: String,
			Operator: String,
			Value: {}
		}
	],
	RecStart: 0,
	RecCount: 0,
	Sort: 
	[
		{
			Field: String,
			Direction: String
		}
	],
	SuppressGeometry: False
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	Assets: 
	[
		{
			Workspace: String,
			TimeZone: String,
			AssignedWorkspace: String,
			ObjectId: String,
			VersionId: String,
			BasedOn: String,
			ExternalId: String,
			Created: String,
			LastUpdated: String,
			Name: String,
			Schedules: 
			[
				{
					Workspace: String,
					ObjectId: String,
					VersionId: String,
					BasedOn: String,
					Start: String,
					End: String,
					TimeZone: String,
					Users: 
					[
						String
					],
					Teams: 
					[
						String
					],
					Data: 
					{
						String: {}
					}
				}
			],
			Documents: 
			[
				{
					Workspace: String,
					ObjectId: String,
					VersionId: String,
					LastUpdated: String
				}
			],
			Tasks: 
			[
				{
					Workspace: String,
					ObjectId: String,
					VersionId: String,
					LastUpdated: String
				}
			],
			TaskSeries: 
			[
				String
			],
			TaskSeriesTemplates: 
			[
				String
			],
			Users: 
			[
				{
					Workspace: String,
					ObjectId: String,
					VersionId: String,
					LastUpdated: String
				}
			],
			Type: String,
			Symbol: String,
			Data: 
			{
				String: String
			},
			Geometry: 
			{
				Type: String,
				Coordinates: 
				[
					{
						y: 0,
						x: 0
					}
				]
			},
			MaintenanceHistory: 
			[
				{
					DateTime: String,
					Notes: String
				}
			],
			Parent: String,
			Ancestors: 
			[
				String
			],
			LocationHistory: 
			[
				{
					Date: String,
					Location: 
					{
						y: 0,
						x: 0
					},
					Barcode: String,
					Notes: String,
					IsScan: False
				}
			],
			Owner: 
			{
				ObjectId: String,
				Class: String,
				VersionId: String,
				Ancestors: 
				[
					String
				],
				Type: String
			},
			IsParent: False,
			Assets: 
			[
				String
			],
			Contacts: 
			[
				String
			],
			GeometryString: String,
			SourceProjection: String,
			Events: 
			[
				{
					ObjectId: String,
					Date: String,
					Location: 
					{
						y: 0,
						x: 0
					},
					Barcode: String,
					Details: String,
					Type: String,
					IsScan: False,
					User: String,
					SelectedBy: String,
					Status: String,
					StatusType: String,
					DateCreated: String,
					Automatic: False
				}
			],
			Anno: 
			{
				X: 0,
				Y: 0,
				R: 0,
				S: 0,
				T: String
			},
			Teams: 
			[
				String
			],
			Address: 
			{
				Street: String,
				Unit: String,
				City: String,
				State: String,
				Zip: String,
				Country: String,
				Location: 
				{
					y: 0,
					x: 0
				}
			},
			CreatedBy: String,
			InventoryItems: 
			[
				String
			],
			ActiveLaborTypes: 
			{
				String: {}
			},
			Levels: 0,
			AllAssests: 0,
			Barcode: String,
			CustomDataFields: 
			[
				{
					Binding: String,
					Label: String,
					Value: {},
					DataType: String,
					IsReadOnly: False,
					IsHidden: False,
					Values: String
				}
			]
		}
	],
	TotalCount: 0,
	RecStart: 0,
	RecCount: 0
}