Manage Collections
A collection resource represents a list of items, such as accounts, announcements, or opportunities. You can sort, filter, and paginate your collection resources to make large result sets easier to use and consume. For instance, you might only want to select a subset of information from a customer collection resource, instead of the entire data set. You can manage data returned from a collection resource using the following actions:
Query
Querying a REST resource is easy: you simply need to know how to
        talk to your web server to get back the response you want. You can use the q parameter to query and filter a collection resource,
        or you can use the finder parameter supported by
        a resource to query the records. If you are working with SCIM resources, you can query using
        the attributes parameter, and filter results
        using the filter parameter. You'll find the
        details about these parameters as you read through this section.
                  
How You Identify Queryable Attributes
To know which attributes can be used in a GET operation along
        with the q parameter, you can use the attribute's queryable properties from the resource
        metadata. Use the GET method to retrieve metadata about REST resources from their /describe endpoints. Use this URL syntax in the
        request:
                  
https://servername.fa.us2.oraclecloud.com/fscmRestApi/resources/<version>/<resource>/describe
Let's assume that you want to identify the queryable attributes
        of the receivingReceiptRequests resource. Use
        this cURL command to send the describe request.
                  
curl -X GET -u <username:password> https://servername.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05/receivingReceiptRequests/describe HTTP/1.1 -H 'Content-Type: application/vnd.oracle.adf.resourceitem+json'  | json_ppIn the describe response, the queryable property of an attribute indicates whether that attribute is queryable or not.
 
                     
                  For example, in the screenshot, the queryable property of the
          CurrencyCode attribute is set to true. It means, you can include this attribute in the
        URL and use it in a GET operation. For example:
                  
https://servername.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05/receivingReceiptRequests?q=CurrencyCode=USDWhereas, if the queryable property is set to false, you can't use that attribute in a GET operation.
        Let's assume you want to run a query on the InsertAndProcessFlag attribute. You include it in the URL to send a GET
        request:
                  
https://servername.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05/receivingReceiptRequests?q=InsertAndProcessFlag=YesThe request fails and returns the 400 Bad Request status code in
        the response. It's because the queryable property of the InsertAndProcessFlag attribute is set to false (as seen in the screenshot), indicating that it's not a queryable
        attribute.
                  
The q Query Parameter
If you've defined the REST framework as Version 2, the q
        query parameter uses the expanded expression syntax that supports RowMatch expressions for filtering
        collection resources. In Version 2 and later, requests that use query-by-example syntax that
        Version 1 supports return an error. 
                  
For example, the query expression
        separated by a semicolon, q=deptno>=10;loc!=NY, returns an error in Version 2 and later. The RowMatch
        expression, q= deptno>=10 or loc!=NY, is
        supported in Version 2 and later. The following are examples of advanced query syntax
        supported in Version 2 and later:
                  
- To test whether a field's value is in
          a list of possibilities, use the inoperator:- DecisionLevelCode in ('DIRECTOR','VP')
 
- For relational comparisons, use
            betweenandnot between:- WinProb between 80 and 100
- WinProb not between 80 and 100
 
- To create complex query expressions,
          use andandor, along with the matching set of parentheses:- (DescriptionText is not null) or ((Revenue <= 300000) and (WinProb between 80 and 100))
 
If you're using REST Framework Version 1, you can use query-by-example syntax in requests. However, note that query-by-example syntax doesn't work in Version 2 and later. To learn more about versions, see Set the REST Framework Version.
The following table lists REST data types
        and the valid operators that you can use in query parameter strings. Note that the operators
          BETWEEN, NOT
          BETWEEN, IN, NOT
          IN, and the wildcard character % are
        available only in REST framework Version 2 and later. 
                  
| REST Data Type | Supported Operators
                for qParameter | 
|---|---|
| string | 
 | 
| boolean | 
 | 
| number | 
 | 
| integer | 
 | 
| date | 
 | 
| datetimeNote:Both UTC and local datetime formats are supported. | 
 | 
The finder Query Parameter
Use the finder
        parameter when you want to find a record based on specified criteria. The finder parameter is a predefined query associated with
        a resource. Use the supported finder names to return a record based on the criteria
        specified in the finder variables. For example, use the finder PrimaryKey, and the finder variable AnnouncementId, to get an announcement with a specific
        identifier. Here's a cURL command example:
                  
curl -u username:password \
-X GET https://servername.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05/announcements?finder=PrimaryKey;AnnouncementId=300100015957778\
-H 'Content-Type: application/vnd.oracle.adf.resourceitem+json'Note:
To learn more about the supported finder names and finder variables for any resource, see theRequest
          > Query Parameter > finder section for the resource's Get All method
        located in the Tasks section of this guide.
                  How You Use the attributes Parameter for Querying the System for Cross-Domain Identity
          Management (SCIM) Resources
Use the attributes
        parameter to query the SCIM resources:
                  
?attributes=<scim-attribute-list><attribute-name>[.<sub-attribute-name>]You can include the attributes parameter in any request that returns a response with an embedded
        SCIM resource, for example GET, PATCH, POST,
        and PUT.
                  
Here are some examples:
- ?attributes=id, name
- ?attributes=username, name.familyName
- ?attributes=displayName, email.primary
How You Use the filter Parameter with SCIM Resources
 Use the filter parameter
        to specify a subset of matching SCIM resources to return:
                  
?filter=<scim-filter>The following table lists the valid operators in a filtering expression you can use for SCIM resources.
| Operator | Description | 
|---|---|
| 
 | Use the  
 | 
| 
 | You can use the  
 | 
| 
 | You can use the  | 
| 
 | Interpreted as begin with. 
 | 
| 
 | Interpreted as end with. 
 | 
| co | Interpreted as contains. 
 | 
| 
 | Interpreted as equal to. 
 | 
| 
 | Interpreted as not equal to. 
 | 
| 
 | Interpreted as greater than or equal to. 
 | 
| 
 | Interpreted as greater than. 
 | 
| 
 | Interpreted as less than or equal to. 
 | 
| 
 | Interpreted as less than. 
 | 
| 
 | Interpreted as present, indicating that the attribute contains a value or a complex attribute contains a non-empty node. 
 | 
Paginate
Most resource collections need some kind of pagination. Without it, a simple search could return millions of records, bringing your network to a crawl. So, instead of receiving all the records of a collection resource, you can limit the number of records that are displayed on a page in the REST client response. To do so, set the following parameters in the request payload:
- limit- to specify the paging size
- offset- to specify the starting point from which the resources are returned
- totalResults- set to true to include the total number of search records that match the query
Set the following fields in the response payload:
- hasMore- set to true when there more records to be returned from the collection; set to false when the last set of records are retrieved from the collection
- totalResults- set to the total number of search records
For example, the client runs a GET command on an announcements resource. The server stores 100 announcements
        and the current request returns only 25. To indicate that there are more records to
        retrieve, the server sets the read-only hasMore field
        to true.
                  
Example Response Body
{
  "items": [
   .
   .
   .
  ],
  "count": 25,
  "hasMore": true,
  "limit": 25,
  "offset": 0,
  "links": [
    {
      .
      .
      .
    }
  ]
}If you set the totalResults parameter to true in the request, the response includes the totalResults field to indicate the total number of
        records that match your search criteria. After retrieving all the records as indicated by
        the totalResults value, the server sets hasMore to false.
                  
{
  "items": [
   .
   .
   .
  ],
  "totalResults": 100,
  "count": 25,
  "hasMore": true,
  "limit": 25,
  "offset": 0,
  "links": [
    {
	.
    .
	.
    }
  ]
}When you specify the limit and offset parameters, the
        paginated result isn't ordered. To ensure consistent results, use the orderBy parameter to order the results. If you update
        the collection resource between paging requests, the records displayed in each page may
        vary.
                  
| Example Requests | Records Returned | 
|---|---|
| GET
                  /announcements?offset=10&limit=20 | 11 through 30 | 
| GET
                  /announcements?q=Subject LIKE 'meeting%'&limit=10 | 1 through 10 | 
| GET
                  /announcements?q=Subject LIKE 'meeting%'&offset=25 | 26 through 50 | 
| GET
                  /announcements?totalResults=true&limit=20 | 1 through 20 Response includes the record count that match the query. | 
Note:
For most resources, the predefined query limit to retrieve the records is set by default to 500 rows or a similar value. If you need to retrieve more records than the set limit, you can do so in batches using the limit and offset parameters. For example, if you have about 1000 records, you can retrieve them in batches of 200 rows using a series of GET requests:/crmRestApi/resources/latest/subscriptionProducts?offset=0&limit=200
/crmRestApi/resources/latest/subscriptionProducts?offset=200&limit=200
/crmRestApi/resources/latest/subscriptionProducts?offset=400&limit=200
/crmRestApi/resources/latest/subscriptionProducts?offset=600&limit=200
/crmRestApi/resources/latest/subscriptionProducts?offset=800&limit=200Paginate Records for SCIM Resources
For paginating the response records for a SCIM resource request, set the following parameters in the request payload:
- count- to specify the paging size
- startIndex- to specify the starting point from which the resources are returned
| Example Request | Records Returned | 
|---|---|
| ?attributes=username&startIndex=11&count=20 | 11 through 30 | 
| ?attributes=firstname pr&count=10 | 1 through 10 | 
Sort
Sorting is another feature that makes it easier to work with
        data-heavy resources. You can sort items returned from a collection resource using the
          orderBy query parameter. 
                  
Note:
You must sort the results using only unique attributes, such asOptyId or PartyNumber, to get predictable paging results. For example, to get to the first
        page of opportunities, use the command:
                  GET /opportunities?orderBy=OptyIdAssuming that in the response, the last opportunity returned has
          OptyId=1000, then to get to the next page, the
        GET request should be structured as:
                  
GET /opportunities?orderBy=OptyId&q=OptyId>1000To set the sorting sequence, use asc for ascending order and desc for descending order. The default sequencing order
        is asc. Items returned in the response payload
        are sorted in a case-sensitive order.
                  
For example, to sort items according to documentId in descending order, enter the command:
                  
?orderBy=documentId:descTo sort items according to Deptno in ascending order, enter the command:
                  
?orderBy=Deptno:ascor only
?orderBy=Deptnobecause asc is the
        default sorting order.
                  
If you include multiple fields in the query parameter, the order
        in which you specify the fields determines the sorting order. For example, to sort items in
        ascending order of title, and then sort according
        to dateAdded in descending order, enter the
        command:
                  
?orderBy=title,dateAdded:descHow You Sort Records for SCIM Resources
You can sort items returned from a
        collection resource using the sortBy
        parameter:
                  
?sortBy=<scim-attribute><attribute> for simple
        attributes and <attribute.subattribute> for complex attributes.
                  For example, to sort items according to
          documentId in descending order, enter the
        command:
                  
?sortBy=documentId&sortOrder=descendingTo sort based on multiple fields, for
        example, to sort items in ascending order of title, and
        then sort according to dateAdded in descending
        order, enter the command:
                  
?sortBy=title,dateAdded&sortOrder=descendingYou now know how to manage your collection resources!