Interagieren Sie mit Tabellendaten in einer ServiceNow -Instanz

  • Freigeben Version: Washingtondc
  • Aktualisiert 1. Februar 2024
  • 4 Minuten Lesedauer
  • Mit Mobile SDK können Sie mit Daten in Tabellen interagieren, die sich in Ihrer Instanz von ServiceNow befinden. Sie können mit diesen Daten über die ServiceNow REST Table -API mit der NowTableService()- API interagieren, die direkt die REST-Schnittstelle aufruft, oder über die NowGraphQLService()- API, die eine angegebene GraphQL-Abfrage für die REST GraphQL- API ausführt.

    Wenn Sie Daten aus mehreren Tabellen innerhalb eines einzigen Aufrufs zurückgeben möchten, müssen Sie die NowGraphQLService()- API verwenden. Wenn Sie mit anderen ServiceNow REST APIs interagieren müssen, lesen Sie Interagieren Sie mit der öffentlichen REST-API in einer ServiceNow -Instanz.

    Verwenden von NowGraphQLService zur Interaktion mit ServiceNow -Tabellen

    Die NowGraphQLService -Klasse stellt Methoden bereit, mit denen Sie GraphQL-Abfragen für eine angegebene Tabelle in Ihrer ServiceNow -Instanz erstellen und ausführen können, wenn der angemeldete Benutzer über die entsprechende Berechtigung verfügt. Sie können alle CRUD-Operationen in Ihrer GraphQL-Abfrage definieren.

    NowGraphQLService unterstützt das Abrufen von Ergebnissen für eine Abfrage durch Rückgabe eines Abschluss-Handlers:
    func execute(_ query: GraphQLQuery, completion: @escaping (Result<Data, NowDataError>) → Void)
    Durch async/await:
    func execute(_ query: GraphQLQuery) async throws -> Data
    Oder ein Kombinationsherausgeber (der derzeit veraltet ist):
    func publisher(for query: GraphQlQuery) → AnyPublisher<Data, NowDataError>
    
    Das folgende Beispiel zeigt, wie Sie das NowData-Framework importieren und dann ein NowGraphQLService-Objekt initialisieren, das Sie dann für die Interaktion mit Tabellen in Ihrer ServiceNow -Instanz verwenden können.
    // 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
        }
      }
    }
    Dieses Beispiel zeigt, wie eine asynchrone Funktion erstellt wird, die die zuletzt veröffentlichten KB-Artikel abruft und veröffentlicht.
    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
            }
          }
        }
      }
    }
    """

    Verwenden von NowTableService zur Interaktion mit ServiceNow -Tabellen

    Die NowTableService -Klasse stellt Methoden zum Ausführen von CRUD-Vorgängen für die Datensätze in Tabellen bereit, die sich in Ihrer Instanz ServiceNow befinden. Über diese Schnittstelle können Sie direkt auf alle Datensätze in einer beliebigen Tabelle ServiceNow zugreifen, für die der angemeldete Benutzer berechtigt ist. NowTableService unterstützt Dot-Walking für Referenzfelder. Wenn eine Tabelle beispielsweise einen Verweis auf die Benutzertabelle enthält, gibt der Dot-Walking-Wert user.name den Namen des Benutzers zurück.

    Bei der Rückgabe der angeforderten Daten werden alle zutreffenden Zugriffskontrolllisten (ACLs) auf die Daten angewendet, was zu weniger Ergebnissen als erwartet oder zu Autorisierungsfehlern führen kann, wenn der authentifizierte Benutzer keine Zugriffsrechte für die angegebene Tabelle hat.

    Die meisten NowTableService- Methoden bieten drei Implementierungen für die Rückgabe von Ergebnisdaten. Eine, die async/wait verwendet, eine, die einen Abschluss-Handler mit einer Result -Aufzählung aufruft, und eine, die einen Herausgeber vom Typ „ Combine “ zurückgibt, was derzeit veraltet ist.

    Zum Beispiel fügen alle createRecord()- Methoden einen erstellten Datensatz in eine angegebene Tabelle ein, jedoch die

    NowTableService – createRecord(mit Feldern: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions, Konfiguration: FieldReadConfiguration, Abschluss: @escaping (Ergebnis<Data, NowDataError> )

    Die Methode ruft einen Abschluss-Handler mit einer Result -Aufzählung auf (der .success- Fall enthält die Ergebnisse als zugehörigen Wert).

    Die zugehörigen Listen namens

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

    Die Methode führt eine asynchrone/warte-Funktion aus. Während die

    NowTableService – createRecord(mit Feldern: [FieldName: FieldValue], in tableName: String, writeOptions: FieldWriteOptions? = nil, configuration: FieldReadConfiguration? = nil)

    Die Methode gibt einen Kombinationsherausgeber zurück, ist jedoch derzeit veraltet.

    Darüber hinaus bietet NowTableService zwei verschiedene Implementierungen von CRUD-Methoden, eine, die Rohdaten zurückgibt, und eine, die codierbare Modelle zurückgibt. Zum Beispiel aktualisieren sowohl die Methoden update () als auch updateRecord() einen angegebenen Datensatz in einer angegebenen Tabelle, aber die Methoden update() geben ein Codable-Modell zurück, und die Methoden updateRecord() geben Rohdaten zurück. In einigen Fällen sind Codable-Methoden möglicherweise vorzuziehen, da eine stark typisierte Codable-Struktur mehr Flexibilität bietet als eine Sammlung von Rohdatenfeldern.

    Das folgende Beispiel zeigt, wie Sie das NowData- Framework importieren und dann ein NowTableService-Objekt initialisieren, das Sie dann für die Interaktion mit ServiceNow Instanztabellen verwenden können.
    // 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)")
      }
    }

    Weitere Codebeispiele mit den verfügbaren NowTableService- Methoden finden Sie in der API-Dokumentation NowTableService-Klasse – iOS .