Field Squared API Services

<back to all web services

PublicTask

The following routes are available for this service:
GET/{Workspace}/API/Task/Schema
GET, PUT, POST, DELETE/{Workspace}/API/Task/{Id}
GET, PUT, POST, DELETE/{Workspace}/API/Task
GET/{Workspace}/API/Task/Schema/{TaskTemplate}
import Foundation
import ServiceStack

// @DataContract
public class PublicTask : Codable
{
    // @DataMember
    public var id:String

    // @DataMember
    public var workspace:String

    // @DataMember
    public var taskTemplate:String

    // @DataMember
    public var task:Task

    // @DataMember
    public var tasks:[Task] = []

    required public init(){}
}

/**
* Contains the data for a task within the system, with versioned object referneces to users and forms.
*/
public class Task : Codable
{
    public var workspace: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 lastUpdatedLocal:String
    public var rank:Double
    public var name:String
    public var Description:String
    public var address:Address
    public var schedules:[Schedule] = []
    public var status:String
    public var blockedReason:String
    public var taskType:String
    public var dueDate:String
    public var desiredCompletionDate:String
    public var desiredTimeWindow:TimeWindow
    public var priority:Int?
    public var percentComplete:Double
    public var users:[String] = []
    public var usersExtended:[DomainItem] = []
    public var teams:[DomainItem] = []
    public var documents:[String] = []
    public var docs:[DomainItem] = []
    public var docSummaries:[Document] = []
    public var data:[String:Object] = [:]
    public var contacts:[String] = []
    public var statusLocation:Location
    public var assets:[String] = []
    public var tasks:[String] = []
    public var owner:String
    public var events:[EventItem] = []
    public var userStatuses:[String:[EventItem]] = [:]
    public var createdBy:String
    public var timeZone:String
    public var seriesId:String
    public var jobTimerRunTime:Int
    public var jobTimerPauseTime:Int
    public var jobTimerTransitTime:Int
    public var currentJobTimerStatus:String
    public var currentJobTimerTime:String
    public var inventoryItems:[String] = []
    public var laborItems:[String] = []
    public var requiredAssets:[RequiredAsset] = []
    public var requiredInventoryTypes:[RequiredInventoryType] = []
    public var requiredUsers:[RequiredUser] = []
    public var locked:Bool
    public var ready:Bool
    public var taskTemplate:TaskTemplate
    public var customDataFields:[CustomDataField] = []

    required public init(){}
}

public class Address : Codable
{
    public var street:String
    public var unit:String
    public var city:String
    public var state:String
    public var zip:String
    public var contactTitle:String
    public var contactName:String
    public var contactPhone:String
    public var contactEmail:String
    public var location:Location
    public var siteName:String
    public var geocodeFailed:Bool
    public var country:String

    required public init(){}
}

public class Location : Codable
{
    public var y:Double
    public var x:Double

    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 TimeWindow : Codable
{
    public var start:Int
    public var end:Int

    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(){}
}

/**
* Represents a document associated with a task or user. To return multiple documents, call /{Workspace}/Document and pass in query parameter ids = comma separated list of document ids. 
*/
public class Document : Codable
{
    public var workspace:String
    public var assignedWorkspace:String
    public var objectId:String
    public var versionId:String
    public var basedOn:String
    public var created:String
    public var externalId:String
    public var lastUpdated:String
    public var type:String
    public var name:String
    public var title:String
    public var data:[String:Object] = [:]
    public var owner:ClassedItem
    public var secondaryOwners:[ClassedItem] = []
    public var location:Location
    public var date:String
    public var createdBy:String
    public var percentComplete:Double
    public var percentTotal:Int
    public var percentDone:Int
    public var rangeExceptions:[RangeExceptionItem] = []
    public var submitted:Bool
    public var schema:String
    public var ownerData:DocumentOwnerData

    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 RangeExceptionItem : Codable
{
    public var binding:String
    public var message:String
    public var type:String
    public var className:String

    required public init(){}
}

public class DocumentOwnerData : Codable
{
    public var ownerType:String
    public var taskData:DocumentOwnerDataTask
    public var assetData:DocumentOwnerDataAsset

    required public init(){}
}

public class DocumentOwnerDataTask : Codable
{
    public var objectId:String
    public var name:String
    public var status:String
    public var taskType:String
    public var lastUpdated:Date
    public var created:Date
    public var priority:Int?
    public var rank:Double
    public var firstTeam:Team
    public var address:Address
    public var customDataFields:[CustomDataField] = []

    required public init(){}
}

/**
* Represents a DTO for a team in a workspace. Calls without an ObjectId will retrieve an array of all team objects for the workspace.
*/
public class Team : Codable
{
    public var workspace:String
    public var timeZone:String
    public var objectId:String
    public var externalId:String
    public var versionId:String
    public var basedOn:String
    public var name:String
    public var enabled:Bool
    public var members:[DomainItem] = []
    public var lead:DomainItem
    public var parent:DomainItem
    public var address:Address
    public var data:[String:String] = [:]
    public var teams:[String] = []
    public var events:[EventItem] = []
    public var createdBy:String
    public var activeLaborTypes:[String:Object] = [:]

    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 Address : AddressBase
{
    public var siteName:String
    public var contactTitle:String
    public var contactName:String
    public var contactPhone:String
    public var contactEmail:String

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case siteName
        case contactTitle
        case contactName
        case contactPhone
        case contactEmail
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        siteName = try container.decodeIfPresent(String.self, forKey: .siteName)
        contactTitle = try container.decodeIfPresent(String.self, forKey: .contactTitle)
        contactName = try container.decodeIfPresent(String.self, forKey: .contactName)
        contactPhone = try container.decodeIfPresent(String.self, forKey: .contactPhone)
        contactEmail = try container.decodeIfPresent(String.self, forKey: .contactEmail)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if siteName != nil { try container.encode(siteName, forKey: .siteName) }
        if contactTitle != nil { try container.encode(contactTitle, forKey: .contactTitle) }
        if contactName != nil { try container.encode(contactName, forKey: .contactName) }
        if contactPhone != nil { try container.encode(contactPhone, forKey: .contactPhone) }
        if contactEmail != nil { try container.encode(contactEmail, forKey: .contactEmail) }
    }
}

public class AddressBase : Codable
{
    public var id:String
    public var addressLine1:String
    public var addressLine2:String
    public var city:String
    public var state:String
    public var zip:String
    public var location:Location
    public var name:String
    public var nameSingleLine:String
    public var nameSingleLine5DigitZip:String
    public var hasValidLocation:Bool
    public var geocodeFailed:Bool
    public var geocodeResultCode:String
    public var country:String

    required public init(){}
}

public class Location : Codable
{
    public var latitude:Double
    public var longitude:Double
    public var hasValidLocation:Bool

    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(){}
}

public class DocumentOwnerDataAsset : Codable
{
    public var objectId:String
    public var name:String
    public var assetType:String
    public var lastUpdated:Date
    public var created:Date
    public var address:AddressBasic
    public var customDataFields:[CustomDataField] = []

    required public init(){}
}

public class AddressBasic : AddressBase
{
    required public init(){ super.init() }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
    }
}

public class RequiredAsset : Codable
{
    public var number:Int
    public var type:String

    required public init(){}
}

public class RequiredInventoryType : Codable
{
    public var number:Int
    public var type:String
    public var name:String
    public var isSerialized:Bool
    public var Description:String

    required public init(){}
}

public class RequiredUser : Codable
{
    public var number:Int
    public var skillTags:[String] = []

    required public init(){}
}

public class TaskTemplate : Codable
{
    public var customFields:[CustomField] = []
    public var statuses:[TaskStatusDef] = []
    public var taskListDetails:String
    public var autoAssignStatus:String
    public var autoUnassignStatus:String
    public var autoScheduleStatus:String
    public var autoUnscheduleStatus:String
    public var autoUpdateStartStatus:String
    public var autoUpdateEndStatus:String
    public var arrivalStatus:String
    public var departureStatus:String
    public var confirmArrival:Bool
    public var confirmDeparture:Bool
    public var manualArrivalAllowed:Bool
    public var manualDepartureAllowed:Bool
    public var hideDisabledStatuses:Bool
    public var geofenceRadius:Int

    required public init(){}
}

public class CustomField : Codable
{
    public var key:String
    public var label:String
    public var isActive:Bool
    public var isReadOnly:Bool
    public var isHidden:Bool
    public var isMandatory:Bool
    public var displayOnMap:Bool
    public var customFieldDataType:CustomFieldDataType
    public var values:String
    public var prompt:String
    public var `default`:String
    public var defaultAutoUpdate:Bool
    public var requiredIf:String
    public var hidden:[String] = []
    public var readOnly:[String] = []
    public var controlArgs:[String:Object] = [:]
    public var indexSlot:String
    public var index:String

    required public init(){}
}

public enum CustomFieldDataType : String, Codable
{
    case Text
    case Number
    case Decimal
    case Money
    case PhoneNumber
    case Ssn
    case List
    case Date
    case File
    case Barcode
    case GPS
    case Photo
    case Spacer
    case Separator
    case AutoNumber
    case TextArea
    case Contact
    case User
    case Asset
    case Checkbox
    case CoreAssetList
    case CoreTaskList
    case CoreParentTask
    case CoreContactList
    case ComboBox
    case DateTime
    case Time
    case Location
    case CoreLocation
    case Label
    case EventLog
    case Address
    case Catalog
    case CoreTeamList
    case Segment
    case CoreTimeSeries
    case TimeSeries
    case Command
    case AutoNumberNumeric
    case CatalogList
    case CatalogComboBox
    case DateRange
    case DocumentGrid
    case ReportLink
    case Hyperlink
    case PercentComplete
    case Chart
    case Range
    case ExternalId
    case AssetCatalog
    case Inventory
    case CoreTaskLaborItemTypes
    case CoreTaskLaborItems
    case ObjectList
    case CoreTimeZone
}

public class TaskStatusDef : Codable
{
    public var name:String
    public var color:String
    public var code:String
    public var transitionFrom:String
    public var transitionMessage:String
    public var transitionCustomFields:[String] = []
    public var hiddenIf:String
    public var isStart:Bool
    public var isEnd:Bool
    public var isBlocked:Bool
    public var statusType:String
    public var progressType:String
    public var autoCreateDocuments:[String] = []
    public var lockTask:Bool
    public var submittedForms:[BindingDescriptor] = []

    required public init(){}
}

public class BindingDescriptor : Codable
{
    public var binding:String
    public var required:Bool

    required public init(){}
}


Swift PublicTask DTOs

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

HTTP + XML

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

POST /{Workspace}/API/Task/{Id} HTTP/1.1 
Host: dev.fieldsquared.com 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<PublicTask xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Field2Office.API.Model.PublicApi.Tasks">
  <Id>String</Id>
  <Task>
    <Asset xmlns="">String</Asset>
    <City xmlns="">String</City>
    <Contact xmlns="">String</Contact>
    <Country xmlns="">String</Country>
    <Created xmlns="">String</Created>
    <Data xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns="">
      <d3p1:KeyValueOfstringanyType>
        <d3p1:Key>String</d3p1:Key>
        <d3p1:Value />
      </d3p1:KeyValueOfstringanyType>
    </Data>
    <Description xmlns="">String</Description>
    <DesiredCompletionDate xmlns="">String</DesiredCompletionDate>
    <DueDate xmlns="">String</DueDate>
    <ExternalId xmlns="">String</ExternalId>
    <LastUpdated xmlns="">String</LastUpdated>
    <Lat xmlns="">0</Lat>
    <Lon xmlns="">0</Lon>
    <Name xmlns="">String</Name>
    <Priority xmlns="">0</Priority>
    <ScheduleEnd xmlns="">String</ScheduleEnd>
    <ScheduleStart xmlns="">String</ScheduleStart>
    <State xmlns="">String</State>
    <Status xmlns="">String</Status>
    <StreetAddress xmlns="">String</StreetAddress>
    <TaskType xmlns="">String</TaskType>
    <Team xmlns="">String</Team>
    <TimeZone xmlns="">String</TimeZone>
    <Unit xmlns="">String</Unit>
    <User xmlns="">String</User>
    <Zip xmlns="">String</Zip>
  </Task>
  <TaskTemplate>String</TaskTemplate>
  <Tasks>
    <Task xmlns="">
      <Asset>String</Asset>
      <City>String</City>
      <Contact>String</Contact>
      <Country>String</Country>
      <Created>String</Created>
      <Data xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <d4p1:KeyValueOfstringanyType>
          <d4p1:Key>String</d4p1:Key>
          <d4p1:Value />
        </d4p1:KeyValueOfstringanyType>
      </Data>
      <Description>String</Description>
      <DesiredCompletionDate>String</DesiredCompletionDate>
      <DueDate>String</DueDate>
      <ExternalId>String</ExternalId>
      <LastUpdated>String</LastUpdated>
      <Lat>0</Lat>
      <Lon>0</Lon>
      <Name>String</Name>
      <Priority>0</Priority>
      <ScheduleEnd>String</ScheduleEnd>
      <ScheduleStart>String</ScheduleStart>
      <State>String</State>
      <Status>String</Status>
      <StreetAddress>String</StreetAddress>
      <TaskType>String</TaskType>
      <Team>String</Team>
      <TimeZone>String</TimeZone>
      <Unit>String</Unit>
      <User>String</User>
      <Zip>String</Zip>
    </Task>
  </Tasks>
  <Workspace>String</Workspace>
</PublicTask>