Skip to main content
Version: v2.0

List and query records

Fetch the records matching a filter and read fields from each result.

When to use this pattern​

  • You're pulling a working set of records into another system (open incidents, pending approvals, recent changes)
  • You need server-side filtering so you only transfer the records you care about
  • You're reading field values out of the results, not just counting them (for counts and aggregates, use the Aggregation API)

Required values​

ValueDescription
Table nameThe table to read (for example, incident)
Encoded queryThe server-side filter (for example, active=true^priority=1)

Example​

package main

import (
"context"
"fmt"
"log"

servicenow "github.com/michaeldcanady/servicenow-sdk-go/v2"
"github.com/michaeldcanady/servicenow-sdk-go/v2/credentials"
tableapi "github.com/michaeldcanady/servicenow-sdk-go/v2/tableapi"
)

func main() {
// Step 1: Authenticate and initialize the client
cred := credentials.NewBasicProvider("{username}", "{password}")

client, err := servicenow.NewServiceNowServiceClient(
servicenow.WithAuthenticationProvider(cred),
servicenow.WithInstance("{instance}"),
)
if err != nil {
log.Fatalf("failed to initialize client: %v", err)
}

// Step 2: Configure the query — an encoded query filters server-side
tableQuery := "active=true^priority=1"
limit := int32(10)
config := &tableapi.TableRequestBuilderGetRequestConfiguration{
QueryParameters: &tableapi.TableRequestBuilderGetQueryParameters{
Query: &tableQuery,
Limit: &limit,
},
}

// Step 3: Fetch the matching records
response, err := client.Now().Table("{TableName}").Get(context.Background(), config)
if err != nil {
log.Fatalf("unable to list records: %v", err)
}

records, err := response.GetResult()
if err != nil {
log.Fatalf("unable to read results: %v", err)
}

// Step 4: Read a field from each record
for _, record := range records {
element, err := record.Get("number")
if err != nil {
log.Fatal(err)
}
value, err := element.GetValue()
if err != nil {
log.Fatal(err)
}
number, err := value.GetStringValue()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Record: %s\n", *number)
}
}

Tips​

  • Compose non-trivial filters with the query builder instead of concatenating encoded-query strings.
  • Reading a field is a three-step unwrap (Get → GetValue → GetStringValue) — Core Concepts explains why.
  • Limit caps one page, not the result set — iterate with pagination when the match count can exceed it.

Next steps​

Was this page helpful?