ServiceNowインスタンスでのテーブルデータの操作
Mobile SDKを使用すると、ServiceNowインスタンスに存在するテーブルのデータを操作できます。このデータは、REST インターフェイスを直接呼び出す NowTableService() API を使用して ServiceNow REST テーブル API を介して、または REST GraphQL API に対して指定された GraphQL クエリを実行する NowGraphQLService() API を介して操作できます。
1 回の呼び出しで複数のテーブルからデータを返す場合は、 NowGraphQLService() API を使用する必要があります。テーブル API 以外の ServiceNow REST API とやり取りする必要がある場合は、「ServiceNowインスタンスでパブリック REST API とやり取りする」を参照してください。
NowGraphQLService を使用して ServiceNow テーブルを操作する
NowGraphQLService クラスは、ログインしているユーザーが適切な権限を持っている場合に、ServiceNow インスタンス内の指定されたテーブルで GraphQL クエリを構築して実行できるようにするメソッドを提供します。GraphQL クエリ内ですべての CRUD 操作を定義できます。
/**
* 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
})
}NowTableService を使用した ServiceNow テーブルとのやり取り
NowTableService クラスは、ServiceNow インスタンスに存在するテーブルのレコードに対して CRUD 操作を実行するためのメソッドを提供します。このインターフェイスを介して、ログインしているユーザーが許可されている ServiceNow テーブル内のレコードに直接アクセスできます。NowTableService は、参照フィールドのドット連結をサポートしています。たとえば、テーブルに User テーブルへの参照が含まれている場合、ドット連結値 user.name はユーザーの名前を返します。
要求されたデータを返すと、該当するすべてのアクセス制御リスト (ACL) がデータに適用されます。その結果、結果が予想よりも少なくなったり、認証されたユーザーが指定されたテーブルへのアクセス権を持っていない場合は認証エラーが発生したりする可能性があります。
/**
* 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
}
}使用可能な NowTableService メソッドを使用したその他のコード例については、 NowTableService API ドキュメントを参照してください。