ServiceNowインスタンス内のテーブルデータの操作
Mobile SDKを使用すると、ServiceNowインスタンスに存在するテーブル内のデータを操作できます。このデータは、REST インターフェイスを直接呼び出す NowTableService() API を使用する ServiceNow REST Table API を介して、または REST GraphQL API に対して指定された GraphQL クエリを実行する NowGraphQLService() API を介して操作できます。
1回の呼び出しで複数のテーブルからデータを返す場合は、 NowGraphQLService() APIを使用する必要があります。他の ServiceNow REST API とやり取りする必要がある場合は、「 ServiceNowインスタンスでのパブリック REST API とのやり取り」を参照してください。
NowGraphQLService を使用した ServiceNow テーブルとのやり取り
NowGraphQLService クラスは、ログインしているユーザーが適切な権限を持っている場合に、ServiceNow インスタンス内の指定されたテーブルで GraphQL クエリを構築して実行できるメソッドを提供します。すべての CRUD 操作を GraphQL クエリ内で定義できます。
func execute(_ query: GraphQLQuery, completion: @escaping (Result<Data, NowDataError>) → Void)async / await経由:func execute(_ query: GraphQLQuery) async throws -> Dataまたは、 Combine パブリッシャー (現在は非推奨) : func publisher(for query: GraphQlQuery) → AnyPublisher<Data, NowDataError>
// Import the NowData framework
import NowData
// Initialize a NowGraphQLService
// The makeGraphQLService completion handler returns a result that wraps
// the NowGraphQLService upon success or error.
private func initializeGraphQLService(instanceUrl: URL) {
makeGraphQLService(instanceUrl: instanceUrl) { [weak self] result in
switch result {
case .success(let service):
self?.graphQLService = service
case .failure(let error):
debugPrint("Creating GraphQL service failed with error: \(error.localizedDescription)")
self?.graphQLService = nil
}
}
}private func fetchArticles() async throws -> [Article] {
guard let graphQLService = graphQLService else {
throw ArticleListError.invalidGraphQLService
}
do {
let data = try await graphQLService.execute(GraphQLQuery(query: recentlyPublishedQuery))
let articles = try dataToArticleList(data)
} catch let error as NowDataError {
throw ArticleListError.fetchError(error)
} catch {
throw error
}
}
private let recentlyPublishedQuery =
"""
{
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
}
}
}
}
}
"""NowTableService を使用した ServiceNow テーブルとの対話
NowTableService クラスは、ServiceNowインスタンスに存在するテーブル内のレコードに対して CRUD 操作を実行するためのメソッドを提供します。このインターフェイスから、ログインしているユーザーが許可されている ServiceNow テーブル内の任意のレコードに直接アクセスできます。NowTableService は、 参照フィールドのドット連結をサポートしています。たとえば、テーブルにユーザーテーブルへの参照が含まれている場合、ドット連結値 user.name はユーザーの名前を返します。
要求されたデータを返すと、該当するすべてのアクセス制御リスト (ACL) がデータに適用されるため、結果が予想よりも少なくなるか、認証されたユーザーが指定されたテーブルへのアクセス権を持っていない場合は認証エラーが発生する可能性があります。
ほとんどの NowTableService メソッドには、結果データを返すための 3 つの実装が用意されています。1 つは async/await を使用し、もう 1 つは Result 列挙を使用して完了ハンドラーを呼び出し、もう 1 つは現在非推奨の Combine パブリッシャーを返します。
たとえば、すべての createRecord() メソッドは、構築されたレコードを指定されたテーブルに挿入しますが、
メソッドは、 Result 列挙型を使用して完了ハンドラーを呼び出します ( .success ケースには、関連付けられた値として結果が含まれます)。
-
NowTableService - createRecord(with fields: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions? = nil, configuration: FieldReadConfiguration? = nil) 非同期スローメソッドは async/await 関数を実行します。一方、
メソッドは Combine パブリッシャーを返しますが、現在は非推奨です。
さらに、 NowTableService には、生データを返すメソッドと Codable モデルを返す CRUD メソッドの 2 つの異なる実装が用意されています。たとえば、 update() メソッドと updateRecord() メソッドはどちらも指定されたテーブルの指定されたレコードを更新しますが、 update() メソッドは Codable モデルを返し、 updateRecord() メソッドは生データを返します。場合によっては、厳密に型指定された Codable 構造体は生データフィールドのコレクションよりも柔軟性が高いため、Codable メソッドが望ましい場合があります。
// Import the NowData framework
import NowData
// Initialize a NowTableService
// The makeTableService completion handler returns a result that wraps
// the NowTableService upon success or error.
makeTableService(instanceUrl: instanceUrl) { [weak self] result in
guard let self = self else { return }
switch result {
case .success(let tableService):
debugPrint("Successfully created a table service \(tableService)")
self.tableService = tableService
case .failure(let error):
debugPrint("Creating table service failed with error: \(error.localizedDescription)")
}
}使用可能な NowTableService メソッドを使用するその他のコード例については、 NowTableService クラス - iOS API ドキュメントを参照してください。