| POST | /{Workspace}/AssetQuery |
|---|
import Foundation
import ServiceStack
/**
* /{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'
*/
public class AssetQuery : Codable
{
public var workspace:String
public var filters:[QueryFilter] = []
public var recStart:Int?
public var recCount:Int?
public var sort:[SortCriteria] = []
public var suppressGeometry:Bool?
required public init(){}
}
public class QueryFilter : Codable
{
public var field:String
public var `operator`:String
//value:Object ignored. Type could not be extended in Swift
required public init(){}
}
public class SortCriteria : Codable
{
public var field:String
public var direction:String
required public init(){}
}
public class AssetQueryResponse : Codable
{
public var assets:[Asset] = []
public var totalCount:Int
public var recStart:Int
public var recCount:Int
required public init(){}
}
/**
* Contains the data for an asset within the system.
*/
public class Asset : Codable
{
public var workspace:String
public var timeZone:String
public var assignedWorkspace:String
public var objectId:String
public var versionId:String
public var basedOn:String
public var externalId:String
public var created:String
public var lastUpdated:String
public var name:String
public var schedules:[Schedule] = []
public var documents:[DomainItem] = []
public var tasks:[DomainItem] = []
public var taskSeries:[String] = []
public var taskSeriesTemplates:[String] = []
public var users:[DomainItem] = []
public var type:String
public var symbol:String
public var data:[String:String] = [:]
public var geometry:Geometry
public var maintenanceHistory:[MaintenanceRecord] = []
public var parent:String
public var ancestors:[String] = []
public var locationHistory:[LocationHistory] = []
public var owner:ClassedItem
public var isParent:Bool
public var assets:[String] = []
public var contacts:[String] = []
public var geometryString:String
public var sourceProjection:String
public var events:[EventItem] = []
public var anno:Anno
public var teams:[String] = []
public var address:AddressBasic
public var createdBy:String
public var inventoryItems:[String] = []
public var activeLaborTypes:[String:Object] = [:]
public var levels:Int
public var allAssests:Int
public var barcode:String
public var customDataFields:[CustomDataField] = []
required public init(){}
}
public class Schedule : Codable
{
public var workspace:String
public var objectId:String
public var versionId:String
public var basedOn:String
public var start:String
public var end:String
public var timeZone:String
public var users:[String] = []
public var teams:[String] = []
public var data:[String:Object] = [:]
required public init(){}
}
public class DomainItem : Codable
{
public var workspace:String
public var objectId:String
public var versionId:String
public var lastUpdated:String
required public init(){}
}
public class Geometry : Codable
{
public var type:String
public var coordinates:[Location] = []
required public init(){}
}
public class Location : Codable
{
public var y:Double
public var x:Double
required public init(){}
}
public class MaintenanceRecord : Codable
{
public var dateTime:String
public var notes:String
required public init(){}
}
public class LocationHistory : Codable
{
public var date:String
public var location:Location
public var barcode:String
public var notes:String
public var isScan:Bool
required public init(){}
}
public class ClassedItem : Codable
{
public var objectId:String
public var `class`:String
public var versionId:String
public var ancestors:[String] = []
public var type:String
required public init(){}
}
public class EventItem : Codable
{
public var objectId:String
public var date:String
public var location:Location
public var barcode:String
public var details:String
public var type:String
public var isScan:Bool
public var user:String
public var selectedBy:String
public var status:String
public var statusType:String
public var dateCreated:String
public var automatic:Bool
required public init(){}
}
public class Anno : Codable
{
public var x:Double
public var y:Double
public var r:Double
public var s:Double
public var t:String
required public init(){}
}
public class AddressBasic : Codable
{
public var street:String
public var unit:String
public var city:String
public var state:String
public var zip:String
public var country:String
public var location:Location
required public init(){}
}
public class CustomDataField : Codable
{
public var binding:String
public var label:String
//value:Object ignored. Type could not be extended in Swift
public var dataType:String
public var isReadOnly:Bool
public var isHidden:Bool
public var values:String
required public init(){}
}
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=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
}