인스턴스에서 테이블 데이터와 ServiceNow 상호작용
를 Mobile SDK 사용하면 인스턴스에 있는 테이블의 데이터와 상호작용할 수 있습니다 ServiceNow . REST 인터페이스를 직접 호출하는 NowTableService() API를 사용하여 REST 테이블 API를 통해 ServiceNow 또는 REST GraphQL API에 대해 지정된 GraphQL 쿼리를 실행하는 NowGraphQLService() API를 통해 이 데이터와 상호작용할 수 있습니다.
단일 호출 내에서 여러 테이블의 데이터를 반환하려면 NowGraphQLService() API를 사용해야 합니다. 다른 ServiceNow REST API와 상호 작용해야 하는 경우 을 참조하십시오 인스턴스에서 공용 REST API와 ServiceNow 상호작용.
NowGraphQLService를 사용하여 테이블과 ServiceNow 상호 작용
NowGraphQLService 클래스는 로그인한 사용자에게 적절한 권한이 있는 경우 인스턴스 내의 지정된 테이블에 대해 GraphQL 쿼리를 생성하고 실행할 수 있는 ServiceNow 메서드를 제공합니다. 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 클래스는 인스턴스에 있는 테이블의 레코드에 대해 CRUD 작업을 수행하는 메서드를 제공합니다ServiceNow. 이 인터페이스를 통해 로그인한 사용자에게 권한이 부여된 테이블 ServiceNow 내의 기록에 직접 액세스할 수 있습니다. NowTableService 는 참조 필드에 대한 닷워킹을 지원합니다. 예를 들어 테이블에 사용자 테이블에 대한 참조가 포함되어 있는 경우 닷워킹 값은 사용자의 이름을 반환 user.name .
요청된 데이터를 반환할 때 적용 가능한 모든 ACL(접근 제어 목록)이 데이터에 적용되어 예상보다 적은 결과가 발생하거나 인증된 사용자에게 지정된 테이블에 대한 액세스 권한이 없는 경우 권한 부여 오류가 발생할 수 있습니다.
대부분의 NowTableService 메서드는 결과 데이터를 반환하기 위한 세 가지 구현을 제공합니다. async/await를 사용하는 것, 열거형을 사용하여 Result 완료 처리기를 호출하는 것, 현재 사용되지 않는 Combine 게시자를 반환하는 것.
예를 들어, 모든 createRecord() 메서드는 구성된 레코드를 지정된 테이블에 삽입하지만
메서드는 열거형을 사용하여 완료 처리기를 Result 호출합니다( .success 사례에는 결과가 연결된 값으로 포함됨).
는
NowTableService - createRecord(with fields: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions? = nil, configuration: FieldReadConfiguration? = nil) async throws메서드는 async/await 함수를 수행합니다. 동안
메서드는 Combine 게시자를 반환하지만 현재는 사용되지 않습니다.
또한 NowTableService 는 CRUD 메서드의 두 가지 구현, 즉 원시 데이터를 반환하는 구현과 코드 가능한 모델을 반환하는 구현을 제공합니다. 예를 들어, update() 및 updateRecord() 메서드는 모두 지정된 테이블에서 지정된 레코드를 업데이트하지만 update() 메서드는 코드 가능 모델을 반환하고 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 메서드를 사용하는 추가 코드 예제는 API 설명서를 참조하세요 NowTableService 클래스 - iOS .