Interagir avec les données de table dans une ServiceNow instance
La Mobile SDK vous permet d’interagir avec les données dans les tables qui résident sur votre ServiceNow instance. Vous pouvez interagir avec ces données via l’API ServiceNowde table REST à l’aide de l’API NowTableService() qui appelle directement l’interface REST, ou via l’API NowGraphQLService() qui exécute une requête GraphQL spécifiée par rapport à l’API GraphQL REST.
Si vous souhaitez renvoyer les données de plusieurs tables au sein d’un seul appel, vous devez utiliser l’API NowGraphQLService(). Si vous devez interagir avec d’autres ServiceNow REST APIs, reportez-vous à la section Interagir avec l’API REST publique sur une ServiceNow instance.
Utilisation de NowGraphQLService pour interagir avec ServiceNow les tables
La classe NowGraphQLService fournit des méthodes qui vous permettent de construire et d’exécuter des requêtes GraphQL sur une table spécifiée au sein de votre ServiceNow instance si l’utilisateur connecté dispose de l’autorisation appropriée. Vous pouvez définir toutes les opérations CRUD dans votre requête GraphQL.
func execute(_ query: GraphQLQuery, completion: @escaping (Result<Data, NowDataError>) → Void)Via async/await :func execute(_ query: GraphQLQuery) async throws -> DataOu, un éditeur Combine (qui est actuellement déconseillé) : 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
}
}
}
}
}
"""Utilisation de NowTableService pour interagir avec ServiceNow des tables
La classe NowTableService fournit des méthodes permettant d’effectuer des opérations CRUD sur les enregistrements dans les tables qui résident sur votre ServiceNow instance. Grâce à cette interface, vous pouvez accéder directement à n’importe quel enregistrement de n’importe quelle ServiceNow table pour laquelle l’utilisateur connecté est autorisé. NowTableService prend en charge la remontée pas à pas pour les champs de référence. Par exemple, si une table contient une référence à la table Utilisateur, la valeur de remontée pas à pas renvoie user.name le nom de l’utilisateur.
Lors du renvoi des données demandées, toutes les listes de contrôle d’accès (ACL) applicables sont appliquées aux données, ce qui peut entraîner moins de résultats que prévu ou des erreurs d’autorisation si l’utilisateur authentifié ne dispose pas des droits d’accès à la table spécifiée.
La plupart des méthodes NowTableService fournissent trois implémentations pour renvoyer des données de résultats. L’une qui utilise async/await, l’autre qui appelle un gestionnaire de complétion avec une Result énumération et l’autre qui renvoie un éditeur Combine , qui est actuellement déconseillé.
Par exemple, toutes les méthodes createRecord() insèrent un enregistrement construit dans une table spécifiée, cependant, la méthode
appelle un gestionnaire de complétion avec une Result énumération (le cas .success contient les résultats en tant que valeur associée).
Le champ
NowTableService - createRecord(avec les champs : [FieldName : FieldValue], dans tableName : String, writeOptions : FieldWriteOptions ? = nil, configuration : FieldReadConfiguration ? = nil) lève une asynchroneexécute une fonction asynchrone/await. Alors que l'
renvoie un éditeur Combine, mais est actuellement déconseillée.
En outre, NowTableService fournit deux implémentations différentes des méthodes CRUD, l’une qui renvoie des données brutes et l’autre qui renvoie des modèles codables. Par exemple, les méthodes update() et updateRecord() mettent à jour un enregistrement spécifié dans une table spécifiée, mais les méthodes update() renvoient un modèle codable et les méthodes updateRecord() renvoient des données brutes. Dans certains cas, les méthodes codables peuvent être préférables, car une structure codable fortement typée offre plus de flexibilité qu’une collection de champs de données brutes.
// 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)")
}
}Pour obtenir des exemples de code supplémentaires utilisant les méthodes NowTableService disponibles, consultez la documentation de l’API Classe NowTableService : iOS .