Interact with table data in a ServiceNow instance
Summarize
Summary of Interact with table data in a ServiceNow instance
This guide explains how to use the ServiceNow Mobile SDK to interact with table data on your ServiceNow instance. You can perform CRUD operations on table records using two primary APIs:NowTableService()for direct REST Table API calls andNowGraphQLService()for executing GraphQL queries. Both require the logged-in user to have proper authorization and respect all Access Control Lists (ACLs).
Show less
Using NowGraphQLService
The NowGraphQLService API allows you to construct and run GraphQL queries against your instance's tables, enabling combined data retrieval from multiple tables in a single call. This is useful when you need complex queries or data from multiple tables simultaneously.
Example usage includes initializing the service once during the application's lifecycle and then executing queries asynchronously. A sample GraphQL query to fetch published knowledge base articles demonstrates how to retrieve specific fields with pagination and ordering.
Using NowTableService
The NowTableService API provides methods to perform CRUD operations directly on individual records within any authorized ServiceNow table. It supports dot-walking to access referenced fields (e.g., retrieving a user’s name via a reference column).
Usage involves creating the service instance once per application lifecycle and then querying records with configurable filters and limits. The example shows fetching active customer service cases with a limit on the number of records returned.
Key Considerations for ServiceNow Customers
- Authorization and Security: All data access respects ACLs, so users will only see data they are authorized to access.
- Service Initialization: Both services should be initialized once, typically in an application-scoped manager class, to optimize performance and resource usage.
- API Selection: Use NowTableService for simple, single-table CRUD operations and NowGraphQLService when querying multiple tables or needing more complex data retrieval.
- Error Handling: Both APIs provide mechanisms to handle errors and unsuccessful responses which should be implemented in your integration logic.
Next Steps
For practical implementation, refer to the sample code snippets provided to initialize these services and perform queries. Additionally, review the NowTableService API documentation for more detailed methods and capabilities to tailor interactions to your specific use cases.
The Mobile SDK enables you to interact with data in tables that reside on your ServiceNow instance. You can interact with this data through the ServiceNow REST Table API using the NowTableService() API that directly calls the REST interface, or through the NowGraphQLService() API that executes a specified GraphQL query against the REST GraphQL API.
If you want to return data from multiple tables within a single call, you will need to use the NowGraphQLService() API. If you need to interact with ServiceNow REST APIs other than the Table API, see Interact with the public REST API on a ServiceNow instance.
Using NowGraphQLService to interact with ServiceNow tables
The NowGraphQLService class provides methods that enable you to construct and execute GraphQL queries on a specified table within your ServiceNow instance if the logged in user has the proper authorization. You can define all CRUD operations within your GraphQL query.
/**
* Helper class used to handle different Now service instances.
*/
@Singleton
class SdkManager @Inject constructor() {
private var nowGraphQLService: NowGraphQLService? = null
/**
* Create the NowGraphQLService once in the lifetime of the application inside the Application class or another manager class
* that will be injected into other classes via dagger/hilt.
* NowGraphQLService should be created after initializing the NowSDK
*/
suspend fun getNowGraphQLService(): NowGraphQLService? {
if (nowGraphQLService != null) return nowGraphQLService
return NowDataSDK.makeGraphQLService(URL("https://instance-name.service-now.com")).getOrThrow()
.also { this.nowGraphQLService = it }
}
}suspend fun loadList() = withContext(Dispatchers.IO) {
val kbArticlesQuery = """
{
GlideRecord_Query {
kb_knowledge(queryConditions: "active=true^ORDERBYpublishedDESC"
pagination:{ limit: 10, offset: 0 }) {
_results {
sys_id { value },
number { displayValue },
short_description { displayValue },
author { displayValue }
published { displayValue }
}
}
}
}
"""
val graphQLService = sdkManager.getNowGraphQLService()
//graphQLService?.graphQLRequest(kbArticlesQuery)?.execute() can also be used
graphQLService?.graphQLRequest(kbArticlesQuery)?.enqueue(
{ response ->
response.body?.let {
val resultString = String(it)
}
}, { nowDataError ->
//handle error
})
}Using NowTableService to interact with ServiceNow tables
The NowTableService class provides methods to perform CRUD operations on the records
in tables that reside on your ServiceNow instance. Through this
interface you can directly access any of the records within any ServiceNow table for which the logged in user is authorized.
NowTableService supports dot-walking for reference fields. For example,
if a table contains a reference to the User table, the dot-walked value
user.name returns the name of the user.
When returning the requested data, all applicable Access Control Lists (ACLs) are applied to the data, which may result in fewer results than expected, or authorization errors if the authenticated user does not have access rights to the specified table.
/**
* Helper class used to handle different Now service instances. It has an application scope or is Singleton
*/
@Singleton
class SdkManager @Inject constructor() {
private var nowTableService: NowTableService? = null
/**
* Create the NowTableService once in the lifetime of the application inside the Application class or another manager class
* that will be injected into other classes via dagger/hilt.
* NowTableService should be created after initializing the NowSDK
*/
suspend fun getNowTableService(): NowTableService? {
if (nowTableService != null) return nowTableService
return NowDataSDK.makeTableService(URL("https://instance-name.service-now.com")).getOrThrow()
.also { this.nowTableService = it }
}
}
suspend fun loadCases() = withContext(Dispatchers.IO) {
val tableService = sdkManager.getNowTableService()
//configure what data to pass back
val fetchConfiguration = FetchConfiguration(Filter("active=true"), 10)
val response = runCatching {
tableService?.records(
"sn_customerservice_case",
fetchConfiguration
)?.execute()
}
if (response.isSuccess) {
val resultString = response.getOrNull()?.body?.let { String(it) }
} else {
//handle unsuccessful result
}
}For additional code examples using the available NowTableService methods, refer to the NowTableService API documentation.