ServiceNowインスタンスでのテーブルデータの操作
Mobile SDKを使用すると、ServiceNowインスタンスに存在するテーブルのデータを操作できます。このデータは、REST インターフェイスを直接呼び出す NowTableService() API を使用して ServiceNow REST テーブル API を介して、または REST GraphQL API に対して指定された GraphQL クエリを実行する NowGraphQLService() API を介して操作できます。
1 回の呼び出しで複数のテーブルからデータを返す場合は、 NowGraphQLService() API を使用する必要があります。他の ServiceNow REST API とやり取りする必要がある場合は、「 ServiceNowインスタンスでパブリック REST API とやり取りする」を参照してください。
NowGraphQLService を使用して ServiceNow テーブルを操作する
NowGraphQLService クラスは、ログインしているユーザーが適切な権限を持っている場合に、ServiceNow インスタンス内の指定されたテーブルで GraphQL クエリを構築して実行できるようにするメソッドを提供します。GraphQL クエリ内ですべての CRUD 操作を定義できます。
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 テーブルへの参照が含まれている場合、ドット連結値 user.name はユーザーの名前を返します。
要求されたデータを返すと、該当するすべてのアクセス制御リスト (ACL) がデータに適用されます。その結果、結果が予想よりも少なくなったり、認証されたユーザーが指定されたテーブルへのアクセス権を持っていない場合は認証エラーが発生したりする可能性があります。
ほとんどの NowTableService メソッドは、結果データを返すための 3 つの実装を提供します。async/await を使用するもの、 Result 列挙型で補完ハンドラーを呼び出すもの、および現在非推奨の Combine パブリッシャーを返すもの。
たとえば、すべての createRecord() メソッドは、構築されたレコードを指定されたテーブルに挿入しますが、
メソッドは、 Result 列挙を使用して補完ハンドラーを呼び出します ( .success ケースには、関連付けられた値として結果が含まれます)。
application
NowTableService - createRecord(with fields: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions? = nil, configuration: FieldReadConfiguration? = nil) async throwsメソッドは非同期/待機関数を実行します。一方、
メソッドは Combine パブリッシャーを返しますが、現在は非推奨です。
さらに、 NowTableService は、生データを返すものと Codable モデルを返すものの、2 つの異なる CRUD メソッドの実装を提供します。たとえば、 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 ドキュメントを参照してください。