Filtering
Short Description
Dataloy REST API uses a generic search/filtering functionality. In general all resources supports filtering on all properties of that resource and linked resources (for exceptions, see Limitations).
Chapter Contents:
Long Description
Syntax
The filter query parameter has the following format:
<Base URL>/<Resource>?filter=<json property>(OPERATOR)<value>
Example that will return currency information for USD:
localhost/ws/rest/Currency?filter=currencyCode(EQ)USD
Syntax Breakdown
<Base URL>
For more information see Getting Started with Dataloy REST API
<Resource>
Can be any of the Resources available in the Dataloy API.
<json property>
Can be any json property of the resource (for exceptions, see Limitations).
<OPERATOR>
The operator is always:
- surrounded by parenthesis
- is always upper case
List of Operators
Operator | Description | API Version | Example |
---|---|---|---|
(EQ) | Equals Exact Value, case sensitive | Get a Document with document number 2707374: Document?filter=documentNo(EQ)2707374 | |
(NE) | Not Equal | Get all Documents not in company 1000: Document?filter=company.companyCode(NE)1000 | |
(GT) | Greater Than ONLY numeric and date values | Get all Voyages modified since 2014-01-01 00:00:00, not including 2014-01-01 00:00:00: Voyage?filter=modifiedDate(GT)2014-01-01T00:00:00 | |
(GTE) | Greater Than or Equal ONLY numeric and date values | Get all Voyages modified since 2014-01-01 00:00:00, including 2014-01-01 00:00:00: Voyage?filter=modifiedDate(GTE)2014-01-01T00:00:00
| |
(LT) | Lesser Than ONLY numeric and date values | Get all Documents that has document amount less than 100000: Document?filter=documentAmount(LT)100000
| |
(LTE) | Lesser Than or Equal ONLY numeric and date values | Get all Documents that has document amount less than 100000, including 100000: Document?filter=documentAmount(LT)100000
| |
(IN) | Equals One of the Elements in a Given List | Get all Documents that are ready for posting and has status type INI, INO, CRI or CRO: Document?filter=invoicingStatus.statusTypeCode(EQ)RFP&filter=invoicingStatus.statusTypeCode(IN)(INI,INO,CRI,CRO) | |
(NULL) | Filter for NULL values | 2.10 | Get all Documents without business partner: Document?filter=businessPartner(NULL) |
(NOTNULL) | Filter for NOT NULL values | 2.10 | Get all Voyages with vessel: Voyage?filter=vessel(NOTNULL) |
(LK) | Like operator | 3.3 | Get all BunkerOrder with externalReferenceNo containing exactly the string "test": BunkerOrder?filter=externalReferenceNo(LK)test |
(LKIC) | Like ignore case operator | 3.3 | Get all BunkerOrder with externalReferenceNo containing the string "test" regardless upper or lower case: BunkerOrder?filter=externalReferenceNo(LKIC)tEsT |
<value>
- Numeric Values are straight forward. Can be integers or decimal numbers using a dot as decimal point.
- Dates must be specified in the format: yyyy-MM-ddTHH:mm:ss
- Strings can be surrounded by double quotes, but it is generally not necessary. Even if the string has spaces.
- Boolean must be specified with 0 for false and 1 for true.
Combining Filters
The filter URL parameter can be added multiple times to filter on multiple properties in one request. To do so, add a new filter parameter to the end of the URL
Syntax for Combining Filters
<Base URL>/<Resource>?filter=<json property>(OPERATOR)<value>&filter=<json property 2>(OPERATOR)<value>
Example:
<Base URL>/Document?filter=invoicingStatus.statusTypeCode(EQ)RFP&filter=invoicingStatus.statusTypeCode(IN)(INI,INO,CRI,CRO) Invoices ready to be transferred to accounting will be returned.
Properties for Sub Objects
Filters can be used for sub objects by using a "dot path". Example of a sub object is commodity on Cargo:
Part of the Cargo resource as an example: { "cargoReference": 12345, "freight": 20000, "cargoQuantity":100000, "commodity": { "commodityName": "Steel", "commodityCode": "10000", "key": 1069734, "self": "http://localhost:8080/ws/rest/Commodity/1069734" } }
To search for cargoes with commodity steel:
<Base URL>/Cargo?filter=commodity.commodityCode(EQ)10000
Limitations
The following properties are currently not possible for filtering:
- self
- remarks
A few other properties are unsupported, these are documented for each resource.
Examples
Cargo
Get Cargo with freight more than 1000000 and freightCurrency USD or EUR:
/Cargo?filter=freight(GT)1000000&filter=freightCurrency.currencyCode(IN)USD,EUR
Document
Get Documents with documentType "INV" and invoicingStatus "PEN"
/Document?filter=documentType.documentType(EQ)INV&filter=invoicingStatus.statusTypeCode(EQ)PEN
Voyage
Get Voyages for vessel with vessel code ABRA
/Voyage?filter=voyageHeader.vesselCode.vesselCode(EQ)ABRA
Get Voyage with reference number VES100
/Voyage?filter=voyageHeader.referenceNo(EQ)VES100
Get Voyage with start date > 01.01.2016 and operator is user with userCode "BAK"
/Voyage?filter=voyageHeader.voyageStartDate(GT)2016-01-01T00:00:00&voyageHeader.operator.userCode(EQ)BAK
Get Voyages that are operational for vessel ABRA
/Voyage?filter=voyageHeader.voyageStatus.statusTypeCode(EQ)OPR&filter=voyageHeader.vesselCode.vesselCode(EQ)ABRA
Get all Voyages that has Oslo as Load Port in 2015
/Voyage?filter=portCalls.reasonForCall.reasonForCall(EQ)L&filter=portCalls.port.portName(EQ)OSLO&filter=voyageHeader.voyageStartYear(EQ)2015