| POST | /{Workspace}/AssetQuery |
|---|
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using ServiceStack;
using ServiceStack.DataAnnotations;
using Field2Office.API.Model.Assets;
using Field2Office.API.Model;
using Field2Office.API.Model.Schedules;
using Field2Office.Core.Model.Task;
namespace Field2Office.API.Model
{
public partial class AddressBasic
{
public virtual string Street { get; set; }
public virtual string Unit { get; set; }
public virtual string City { get; set; }
public virtual string State { get; set; }
public virtual string Zip { get; set; }
public virtual string Country { get; set; }
public virtual Location Location { get; set; }
}
public partial class Anno
{
public virtual double X { get; set; }
public virtual double Y { get; set; }
public virtual double R { get; set; }
public virtual double S { get; set; }
public virtual string T { get; set; }
}
///<summary>
///Contains the data for an asset within the system.
///</summary>
public partial class Asset
{
public Asset()
{
Schedules = new List<Schedule>{};
Documents = new List<DomainItem>{};
Tasks = new List<DomainItem>{};
TaskSeries = new List<string>{};
TaskSeriesTemplates = new List<string>{};
Users = new List<DomainItem>{};
Data = new Dictionary<string, string>{};
MaintenanceHistory = new List<MaintenanceRecord>{};
Ancestors = new List<string>{};
LocationHistory = new List<LocationHistory>{};
Assets = new List<string>{};
Contacts = new List<string>{};
Events = new List<EventItem>{};
Teams = new List<string>{};
InventoryItems = new List<string>{};
ActiveLaborTypes = new Dictionary<string, Object>{};
CustomDataFields = new List<CustomDataField>{};
}
public virtual string Workspace { get; set; }
public virtual string TimeZone { get; set; }
public virtual string AssignedWorkspace { get; set; }
public virtual string ObjectId { get; set; }
public virtual string VersionId { get; set; }
public virtual string BasedOn { get; set; }
public virtual string ExternalId { get; set; }
public virtual string Created { get; set; }
public virtual string LastUpdated { get; set; }
public virtual string Name { get; set; }
public virtual List<Schedule> Schedules { get; set; }
public virtual List<DomainItem> Documents { get; set; }
public virtual List<DomainItem> Tasks { get; set; }
public virtual List<string> TaskSeries { get; set; }
public virtual List<string> TaskSeriesTemplates { get; set; }
public virtual List<DomainItem> Users { get; set; }
public virtual string Type { get; set; }
public virtual string Symbol { get; set; }
public virtual Dictionary<string, string> Data { get; set; }
public virtual Geometry Geometry { get; set; }
public virtual List<MaintenanceRecord> MaintenanceHistory { get; set; }
public virtual string Parent { get; set; }
public virtual List<string> Ancestors { get; set; }
public virtual List<LocationHistory> LocationHistory { get; set; }
public virtual ClassedItem Owner { get; set; }
public virtual bool IsParent { get; set; }
public virtual List<string> Assets { get; set; }
public virtual List<string> Contacts { get; set; }
public virtual string GeometryString { get; set; }
public virtual string SourceProjection { get; set; }
public virtual List<EventItem> Events { get; set; }
public virtual Anno Anno { get; set; }
public virtual List<string> Teams { get; set; }
public virtual AddressBasic Address { get; set; }
public virtual string CreatedBy { get; set; }
public virtual List<string> InventoryItems { get; set; }
public virtual Dictionary<string, Object> ActiveLaborTypes { get; set; }
public virtual int Levels { get; set; }
public virtual int AllAssests { get; set; }
public virtual string Barcode { get; set; }
public virtual List<CustomDataField> CustomDataFields { get; set; }
}
public partial class ClassedItem
{
public ClassedItem()
{
Ancestors = new List<string>{};
}
public virtual string ObjectId { get; set; }
public virtual string Class { get; set; }
public virtual string VersionId { get; set; }
public virtual List<string> Ancestors { get; set; }
public virtual string Type { get; set; }
}
public partial class DomainItem
{
public virtual string Workspace { get; set; }
public virtual string ObjectId { get; set; }
public virtual string VersionId { get; set; }
public virtual string LastUpdated { get; set; }
}
public partial class EventItem
{
public virtual string ObjectId { get; set; }
public virtual string Date { get; set; }
public virtual Location Location { get; set; }
public virtual string Barcode { get; set; }
public virtual string Details { get; set; }
public virtual string Type { get; set; }
public virtual bool IsScan { get; set; }
public virtual string User { get; set; }
public virtual string SelectedBy { get; set; }
public virtual string Status { get; set; }
public virtual string StatusType { get; set; }
public virtual string DateCreated { get; set; }
public virtual bool Automatic { get; set; }
}
public partial class Geometry
{
public Geometry()
{
Coordinates = new List<Location>{};
}
public virtual string Type { get; set; }
public virtual List<Location> Coordinates { get; set; }
}
public partial class Location
{
public virtual double y { get; set; }
public virtual double x { get; set; }
}
public partial class LocationHistory
{
public virtual string Date { get; set; }
public virtual Location Location { get; set; }
public virtual string Barcode { get; set; }
public virtual string Notes { get; set; }
public virtual bool IsScan { get; set; }
}
public partial class MaintenanceRecord
{
public virtual string DateTime { get; set; }
public virtual string Notes { get; set; }
}
}
namespace Field2Office.API.Model.Assets
{
///<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>
public partial class AssetQuery
{
public AssetQuery()
{
Filters = new List<QueryFilter>{};
Sort = new List<SortCriteria>{};
}
public virtual string Workspace { get; set; }
public virtual List<QueryFilter> Filters { get; set; }
public virtual int? RecStart { get; set; }
public virtual int? RecCount { get; set; }
public virtual List<SortCriteria> Sort { get; set; }
public virtual bool? SuppressGeometry { get; set; }
}
public partial class AssetQueryResponse
{
public AssetQueryResponse()
{
Assets = new List<Asset>{};
}
public virtual List<Asset> Assets { get; set; }
public virtual long TotalCount { get; set; }
public virtual int RecStart { get; set; }
public virtual int RecCount { get; set; }
}
public partial class QueryFilter
{
public virtual string Field { get; set; }
public virtual string Operator { get; set; }
public virtual Object Value { get; set; }
}
public partial class SortCriteria
{
public virtual string Field { get; set; }
public virtual string Direction { get; set; }
}
}
namespace Field2Office.API.Model.Schedules
{
public partial class Schedule
{
public Schedule()
{
Users = new List<string>{};
Teams = new List<string>{};
Data = new Dictionary<string, Object>{};
}
public virtual string Workspace { get; set; }
public virtual string ObjectId { get; set; }
public virtual string VersionId { get; set; }
public virtual string BasedOn { get; set; }
public virtual string Start { get; set; }
public virtual string End { get; set; }
public virtual string TimeZone { get; set; }
public virtual List<string> Users { get; set; }
public virtual List<string> Teams { get; set; }
public virtual Dictionary<string, Object> Data { get; set; }
}
}
namespace Field2Office.Core.Model.Task
{
public partial class CustomDataField
{
public virtual string Binding { get; set; }
public virtual string Label { get; set; }
public virtual Object Value { get; set; }
public virtual string DataType { get; set; }
public virtual bool IsReadOnly { get; set; }
public virtual bool IsHidden { get; set; }
public virtual string Values { get; set; }
}
}
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
}