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
namespace Field2Office.API.Model

open System
open System.Collections
open System.Collections.Generic
open System.Runtime.Serialization
open ServiceStack
open ServiceStack.DataAnnotations

    [<AllowNullLiteral>]
    type QueryFilter() = 
        member val Field:String = null with get,set
        member val Operator:String = null with get,set
        member val Value:Object = null with get,set

    [<AllowNullLiteral>]
    type SortCriteria() = 
        member val Field:String = null with get,set
        member val Direction:String = null with get,set

    ///<summary>
    ////{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'
    ///</summary>
    [<AllowNullLiteral>]
    type AssetQuery() = 
        member val Workspace:String = null with get,set
        member val Filters:ResizeArray<QueryFilter> = new ResizeArray<QueryFilter>() with get,set
        member val RecStart:Nullable<Int32> = new Nullable<Int32>() with get,set
        member val RecCount:Nullable<Int32> = new Nullable<Int32>() with get,set
        member val Sort:ResizeArray<SortCriteria> = new ResizeArray<SortCriteria>() with get,set
        member val SuppressGeometry:Nullable<Boolean> = new Nullable<Boolean>() with get,set

    [<AllowNullLiteral>]
    type Schedule() = 
        member val Workspace:String = null with get,set
        member val ObjectId:String = null with get,set
        member val VersionId:String = null with get,set
        member val BasedOn:String = null with get,set
        member val Start:String = null with get,set
        member val End:String = null with get,set
        member val TimeZone:String = null with get,set
        member val Users:ResizeArray<String> = new ResizeArray<String>() with get,set
        member val Teams:ResizeArray<String> = new ResizeArray<String>() with get,set
        member val Data:Dictionary<String, Object> = new Dictionary<String, Object>() with get,set

    [<AllowNullLiteral>]
    type DomainItem() = 
        member val Workspace:String = null with get,set
        member val ObjectId:String = null with get,set
        member val VersionId:String = null with get,set
        member val LastUpdated:String = null with get,set

    [<AllowNullLiteral>]
    type Location() = 
        member val y:Double = new Double() with get,set
        member val x:Double = new Double() with get,set

    [<AllowNullLiteral>]
    type Geometry() = 
        member val Type:String = null with get,set
        member val Coordinates:ResizeArray<Location> = new ResizeArray<Location>() with get,set

    [<AllowNullLiteral>]
    type MaintenanceRecord() = 
        member val DateTime:String = null with get,set
        member val Notes:String = null with get,set

    [<AllowNullLiteral>]
    type LocationHistory() = 
        member val Date:String = null with get,set
        member val Location:Location = null with get,set
        member val Barcode:String = null with get,set
        member val Notes:String = null with get,set
        member val IsScan:Boolean = new Boolean() with get,set

    [<AllowNullLiteral>]
    type ClassedItem() = 
        member val ObjectId:String = null with get,set
        member val Class:String = null with get,set
        member val VersionId:String = null with get,set
        member val Ancestors:ResizeArray<String> = new ResizeArray<String>() with get,set
        member val Type:String = null with get,set

    [<AllowNullLiteral>]
    type EventItem() = 
        member val ObjectId:String = null with get,set
        member val Date:String = null with get,set
        member val Location:Location = null with get,set
        member val Barcode:String = null with get,set
        member val Details:String = null with get,set
        member val Type:String = null with get,set
        member val IsScan:Boolean = new Boolean() with get,set
        member val User:String = null with get,set
        member val SelectedBy:String = null with get,set
        member val Status:String = null with get,set
        member val StatusType:String = null with get,set
        member val DateCreated:String = null with get,set
        member val Automatic:Boolean = new Boolean() with get,set

    [<AllowNullLiteral>]
    type Anno() = 
        member val X:Double = new Double() with get,set
        member val Y:Double = new Double() with get,set
        member val R:Double = new Double() with get,set
        member val S:Double = new Double() with get,set
        member val T:String = null with get,set

    [<AllowNullLiteral>]
    type AddressBasic() = 
        member val Street:String = null with get,set
        member val Unit:String = null with get,set
        member val City:String = null with get,set
        member val State:String = null with get,set
        member val Zip:String = null with get,set
        member val Country:String = null with get,set
        member val Location:Location = null with get,set

    [<AllowNullLiteral>]
    type CustomDataField() = 
        member val Binding:String = null with get,set
        member val Label:String = null with get,set
        member val Value:Object = null with get,set
        member val DataType:String = null with get,set
        member val IsReadOnly:Boolean = new Boolean() with get,set
        member val IsHidden:Boolean = new Boolean() with get,set
        member val Values:String = null with get,set

    ///<summary>
    ///Contains the data for an asset within the system.
    ///</summary>
    [<AllowNullLiteral>]
    type Asset() = 
        member val Workspace:String = null with get,set
        member val TimeZone:String = null with get,set
        member val AssignedWorkspace:String = null with get,set
        member val ObjectId:String = null with get,set
        member val VersionId:String = null with get,set
        member val BasedOn:String = null with get,set
        member val ExternalId:String = null with get,set
        member val Created:String = null with get,set
        member val LastUpdated:String = null with get,set
        member val Name:String = null with get,set
        member val Schedules:ResizeArray<Schedule> = new ResizeArray<Schedule>() with get,set
        member val Documents:ResizeArray<DomainItem> = new ResizeArray<DomainItem>() with get,set
        member val Tasks:ResizeArray<DomainItem> = new ResizeArray<DomainItem>() with get,set
        member val TaskSeries:ResizeArray<String> = new ResizeArray<String>() with get,set
        member val TaskSeriesTemplates:ResizeArray<String> = new ResizeArray<String>() with get,set
        member val Users:ResizeArray<DomainItem> = new ResizeArray<DomainItem>() with get,set
        member val Type:String = null with get,set
        member val Symbol:String = null with get,set
        member val Data:Dictionary<String, String> = new Dictionary<String, String>() with get,set
        member val Geometry:Geometry = null with get,set
        member val MaintenanceHistory:ResizeArray<MaintenanceRecord> = new ResizeArray<MaintenanceRecord>() with get,set
        member val Parent:String = null with get,set
        member val Ancestors:ResizeArray<String> = new ResizeArray<String>() with get,set
        member val LocationHistory:ResizeArray<LocationHistory> = new ResizeArray<LocationHistory>() with get,set
        member val Owner:ClassedItem = null with get,set
        member val IsParent:Boolean = new Boolean() with get,set
        member val Assets:ResizeArray<String> = new ResizeArray<String>() with get,set
        member val Contacts:ResizeArray<String> = new ResizeArray<String>() with get,set
        member val GeometryString:String = null with get,set
        member val SourceProjection:String = null with get,set
        member val Events:ResizeArray<EventItem> = new ResizeArray<EventItem>() with get,set
        member val Anno:Anno = null with get,set
        member val Teams:ResizeArray<String> = new ResizeArray<String>() with get,set
        member val Address:AddressBasic = null with get,set
        member val CreatedBy:String = null with get,set
        member val InventoryItems:ResizeArray<String> = new ResizeArray<String>() with get,set
        member val ActiveLaborTypes:Dictionary<String, Object> = new Dictionary<String, Object>() with get,set
        member val Levels:Int32 = new Int32() with get,set
        member val AllAssests:Int32 = new Int32() with get,set
        member val Barcode:String = null with get,set
        member val CustomDataFields:ResizeArray<CustomDataField> = new ResizeArray<CustomDataField>() with get,set

    [<AllowNullLiteral>]
    type AssetQueryResponse() = 
        member val Assets:ResizeArray<Asset> = new ResizeArray<Asset>() with get,set
        member val TotalCount:Int64 = new Int64() with get,set
        member val RecStart:Int32 = new Int32() with get,set
        member val RecCount:Int32 = new Int32() with get,set

F# 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
}