인스턴스에서 테이블 데이터와 ServiceNow 상호 작용

  • 릴리스 버전: Zurich
  • 업데이트 날짜 2025년 07월 31일
  • 소요 시간: 8분
  • 이를 Mobile SDK 사용하면 인스턴스에 있는 테이블의 데이터와 상호작용할 수 있습니다 ServiceNow . REST 인터페이스를 직접 호출하는 NowTableService() API를 사용하는 REST 테이블 API 또는 REST GraphQL API에 대해 지정된 GraphQL 쿼리를 실행하는 NowGraphQLService() API를 통해 이 데이터와 ServiceNow 상호작용할 수 있습니다.

    단일 호출 내에서 여러 테이블의 데이터를 반환하려면 NowGraphQLService() API를 사용해야 합니다. 다른 ServiceNow REST API와 상호 작용해야 하는 경우 문서를 참조하십시오 인스턴스에서 공용 REST API와 ServiceNow 상호 작용.

    NowGraphQLService를 사용하여 테이블과 ServiceNow 상호작용

    NowGraphQLService 클래스는 로그인한 사용자에게 적절한 권한이 있는 경우 인스턴스 내의 ServiceNow 지정된 테이블에서 GraphQL 쿼리를 구성하고 실행할 수 있는 메서드를 제공합니다. GraphQL 쿼리 내에서 모든 CRUD 작업을 정의할 수 있습니다.

    NowGraphQLService 는 완료 핸들러를 반환하여 쿼리에 대한 결과 가져오기를 지원합니다.
    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>
    
    다음 예시에서는 NowData 프레임워크를 임포트한 다음 인스턴스의 테이블 ServiceNow 과 상호작용하는 데 사용할 수 있는 NowGraphQLService 객체를 초기화하는 방법을 보여줍니다.
    // 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
        }
      }
    }
    이 예제에서는 가장 최근에 게시된 KB 문서를 가져오고 게시하는 비동기 함수를 만드는 방법을 보여 줍니다.
    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 메서드는 결과 데이터를 반환하기 위한 세 가지 구현을 제공합니다. 하나는 async/await를 사용하고, 하나는 열거형을 사용하여 Result 완성 처리기를 호출하고, 다른 하나는 현재 사용되지 않는 Combine 게시자를 반환합니다.

    예를 들어, 모든 createRecord() 메서드는 구성된 레코드를 지정된 테이블에 삽입하지만,

    NowTableService - createRecord(필드: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions, configuration: FieldReadConfiguration, completion: @escaping (Result<Data, NowDataError>)

    메서드는 열거형을 사용하여 완성 처리기를 Result 호출합니다( .success 사례에는 결과가 연결된 값으로 포함됨).

    NowTableService - createRecord(with fields: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions? = nil, configuration: FieldReadConfiguration? = nil) async throws

    메서드는 async/await 함수를 수행합니다. 동안

    NowTableService - createRecord(필드 포함: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions? = nil, configuration: FieldReadConfiguration? = nil)

    메서드는 Combine 게시자를 반환하지만 현재는 더 이상 사용되지 않습니다.

    또한 NowTableService 는 원시 데이터를 반환하는 CRUD 메서드와 Codable 모델을 반환하는 CRUD 메서드의 두 가지 구현을 제공합니다. 예를 들어, update()updateRecord() 메소드는 모두 지정된 테이블에서 지정된 레코드를 업데이트하지만 update() 메소드는 Codable 모델을 리턴하고 updateRecord() 메소드는 원시 데이터를 리턴합니다. 경우에 따라 Codable 메소드가 선호될 수 있는데, 이는 강력하게 형식화된 Codable 구조가 원시 데이터 필드의 콜렉션보다 더 많은 유연성을 제공하기 때문입니다.

    다음 예시에서는 NowData 프레임워크를 임포트한 다음 인스턴스 테이블과 ServiceNow 상호작용하는 데 사용할 수 있는 NowTableService 객체를 초기화하는 방법을 보여줍니다.
    // 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 .