ServiceNowインスタンス内のテーブルデータの操作

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:7分
  • Mobile SDKを使用すると、ServiceNowインスタンスに存在するテーブル内のデータを操作できます。このデータは、REST インターフェイスを直接呼び出す NowTableService() API を使用する ServiceNow REST Table API を介して、または REST GraphQL API に対して指定された GraphQL クエリを実行する NowGraphQLService() API を介して操作できます。

    1回の呼び出しで複数のテーブルからデータを返す場合は、 NowGraphQLService() APIを使用する必要があります。テーブル API 以外の ServiceNow REST API とやり取りする必要がある場合は、「ServiceNowインスタンスでのパブリック REST API とのやり取り」を参照してください。

    NowGraphQLService を使用した ServiceNow テーブルとのやり取り

    NowGraphQLService クラスは、ログインしているユーザーが適切な権限を持っている場合に、ServiceNow インスタンス内の指定されたテーブルで GraphQL クエリを構築して実行できるメソッドを提供します。すべての CRUD 操作を GraphQL クエリ内で定義できます。

    次の例は、NowData フレームワークをインポートし、 ServiceNow インスタンス内のテーブルとのやり取りに使用できる NowGraphQLService オブジェクトを初期化する方法を示しています。
    /**
     * 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 }
        }
    }
    この例では、GraphQL クエリを使用して公開された KB 記事を取得する方法を示します。
    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.name はユーザーの名前を返します。

    要求されたデータを返すと、該当するすべてのアクセス制御リスト (ACL) がデータに適用されるため、結果が予想よりも少なくなるか、認証されたユーザーが指定されたテーブルへのアクセス権を持っていない場合は認証エラーが発生する可能性があります。

    次の例は、 NowData フレームワークをインポートし、 ServiceNow インスタンステーブルとのやり取りに使用できる NowTableServce オブジェクトを初期化する方法を示しています。
    /**
     * 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 ドキュメントを参照してください。