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

  • 릴리스 버전: Xanadu
  • 업데이트 날짜 2024년 08월 01일
  • 읽기8분
  • 이를 Mobile SDK 통해 인스턴스에 있는 테이블의 데이터와 상호작용할 수 있습니다 ServiceNow . REST 인터페이스를 직접 호출하는 NowTableService() API를 사용하거나 REST GraphQL API에 대해 지정된 GraphQL 쿼리를 실행하는 NowGraphQLService() API를 통해 REST 테이블 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 프레임워크를 가져온 다음 인스턴스의 테이블과 상호 작용하는 데 사용할 수 있는 NowGraphQLService 개체를 초기화하는 방법을 보여 줍니다 ServiceNow .
    // 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], tableName: String, writeOptions: FieldWriteOptions, 구성: FieldReadConfiguration, 완료: @escaping(Result<Data, NowDataError>)

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

    NowTableService - createRecord(with fields: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions? = nil, configuration: FieldReadConfiguration? = nil) 비동기 던지기

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

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

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

    또한 NowTableService 는 원시 데이터를 반환하는 것과 코딩 가능한 모델을 반환하는 두 가지 CRUD 메서드 구현을 제공합니다. 예를 들어, update()updateRecord() 메서드는 모두 지정된 테이블에서 지정된 레코드를 업데이트하지만 update() 메서드는 코드 가능 모델을 반환하고 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 메서드를 사용하는 추가 코드 예제는 NowTableService 클래스 - iOS API 설명서를 참조하세요.