Stocker les données dans les bases de données
Cette section explique le fonctionnement du stockage dans les bases de données Kofax RPA.
- Clés d'objet
-
Les tables que vous créez pour un type dans une base de données ont une colonne pour chacun des attributs dans votre type, plus les 7 champs de propriété supplémentaires suivants : ObjectKey, RobotName, ExecutionId, FirstExtracted, LastExtracted, ExtractedInLastRun et LastUpdated. Le champ le plus important est ObjectKey, car il s'agit de la clé primaire de la table.
Remarque La raison du nom « ObjectKey » se trouve dans la terminologie utilisée précédemment dans Kofax RPA. Auparavant, les types et les variables s'appelaient des « objets » Pour adhérer à la nouvelle terminologie, « ObjectKey » doit s'appeler « ValueKey ». Le changement de nom causerait cependant de nombreux problèmes de compatibilité rétroactive, et c'est pourquoi son ancien nom a été conservé.ObjectKey pour un type identifie de manière unique les valeurs extraites des variables de ce type lorsqu'elles sont stockées dans une base de données. Vous devez déterminer ce qui identifie de manière unique les valeurs du type. Si vous créez un répertoire de voitures, le numéro VIN peut être suffisant pour fournir une identification unique de chaque voiture. Si vous recueillez des résultats de baseball, vous aurez peut-être besoin de l'année, du nom des équipes, du stade et de la date pour identifier chaque match de façon unique.
En construisant le type, vous pouvez sélectionner la manière dont ObjectKey sera calculé. Pour ce faire, il suffit de cocher l'option « Partie de la clé en base de données » lors de la création d'un attribut. Pour notre exemple de voiture, le numéro d'identification du véhicule (VIN) serait le seul attribut marqué comme faisant partie de la clé dans la base de données. Pour l'exemple de match de baseball, les attributs année, noms d'équipe, stade et date seraient tous marqués comme faisant partie de la clé dans la base de données.
Le développeur du robot peut également spécifier la clé directement sur l'activité « Stocker dans la base de données », afin de remplacer l'algorithme par défaut défini sur le type.
Les attributs qui ne font pas partie de la clé dans la base de données sont parfois appelés Champs non clés. Par exemple, la voiture peut avoir un attribut de prix, mais même si le prix change, nous considérerons toujours qu'il s'agit de la même voiture.
- Stocker dans la base de données
-
Kofax RPA propose trois activités pour la gestion des valeurs dans une base de données : Stocker dans la base de données, Recherche dans la base de données, Calculer la clé, Supprimer de la base de données, Interroger la base de données et Exécuter SQL. Les actions Rechercher et Supprimer sont simples, mais Stocker dans la base de données ne se limite pas au stockage de la valeur.
Stocker dans la base de données peut insérer une nouvelle valeur dans la table, ou mettre à jour une valeur existante qui a été précédemment stockée. Voici ce qui se passe exactement.
-
Lors du stockage de la valeur d'une variable, ObjectKey est calculé sur la base des valeurs des attributs de la variable qui, dans le type de la variable, sont marqués Partie de la clé en base de données. Si le développeur du robot spécifie une clé sur l'activité, cette clé est utilisée à la place.
- En utilisant la clé calculée, on vérifie si la valeur existe déjà dans la base de données.
- Si la valeur n'existe pas, une nouvelle ligne est insérée dans la base de données (sous cet ObjectKey).
- Si la valeur existe déjà, elle est mise à jour, et tous les attributs non clés sont écrits dans la table (sous cet ObjectKey).
-
- Champs de propriété
-
Chaque fois qu'une valeur est insérée, les 7 champs de propriété sont mis à jour. Lors de la mise à jour, seuls certains champs changent. Le tableau suivant fournit un aperçu.
Champ
Description
Cause du changement
ObjectKey
Clé primaire de cette valeur
Insérer
RobotName
Nom du robot qui a stocké cette valeur.
Insertion et mise à jour
ExecutionId
Identifiant d'exécution du robot qui a stocké cette valeur.
Insertion et mise à jour
FirstExtracted
Première fois que la valeur a été stockée.
Insérer
LastExtracted
Dernière fois que la valeur a été stockée.
Insertion et mise à jour
LastUpdated
Date de la dernière mise à jour de la valeur.
Mise à jour
ExtractedInLastRun
Si la valeur a été extraite lors de la dernière exécution (utilise « y » et « n »).
Insertion et mise à jour
Après chaque exécution du robot (au cours de laquelle le robot a utilisé la fonction « Stocker dans la base de données »), toutes les valeurs précédemment collectées par le robot, mais non stockées pendant cette exécution, ont ExtractedInLastRun affecté de la valeur « n », et LastUpdated affecté de la valeur « now », indiquant que la valeur n'a pas été trouvée sur le site web pendant la dernière exécution.
Remarque Si une valeur a été trouvée lors de l'exécution précédente et qu'aucun champ non-clé n'a changé, LastUpdated n'est pas mis à jour. Toutefois, si la valeur n'a pas été trouvée lors de l'exécution précédente, mais dans une exécution antérieure, LastUpdated est mis à jour, même si les champs non-clés n'ont pas changé. Cela signifie que la valeur a été supprimée du site et est réapparue plus tard. - Tables de recueil de données
-
Les tables créées par Kofax RPA sont souvent appelées des tables de recueil de données, car les robots y recueillent des données.
Pour déterminer quelles informations étaient disponibles sur un site web la dernière fois que le robot a été lancé, vous pouvez utiliser la commande SQL suivante :
SELECT * FROM table WHERE ExtractedInLastRun = 'y'
Si vous lancez des requêtes sur une table en même temps qu'un robot y stocke des données, le résultat est composé des données de la précédente exécution, combinées aux données que le robot a stockées jusqu'à présent. Nous vous recommandons de copier les données des tables de recueil de données dans un autre ensemble de tables de production, afin de pouvoir effectuer des requêtes sur un ensemble de données stable.
Il existe de nombreuses solutions où des robots sont utilisés pour stocker des données dans une base de données, mais la plupart d'entre elles relèvent de l'un des trois scénarios répertoriés dans le tableau suivant.
Scénario
Description
Site web de correspondance de répertoires (petits ensembles de données)
L'idée est d'avoir un répertoire qui correspond aux éléments d'un site web 1 à 1.
La façon la plus simple d'y parvenir est d'utiliser une table de production tronquée (en supprimant toutes les lignes) chaque fois que le robot a terminé son exécution, puis de copier chaque enregistrement où ExtractedInLastRun='y' de la table de recueil de données vers cette table. Cela fonctionne bien pour les petits ensembles de données.
Site web de correspondance de répertoires (grands ensembles de données)
Même chose que ci-dessus, mais l'ensemble des données est trop important pour pouvoir copier toutes les données après chaque exécution du robot. Nous voulons plutôt mettre à jour la table de production après chaque exécution du robot, en fonction des changements qui surviennent.
C'est là que le champ LastUpdated s'avère utile. Toutes les valeurs qui ont été mises à jour ont une valeur de champ LastUpdated supérieure à l'heure de démarrage du robot. Vous pouvez obtenir l'heure de début à partir des tables de journalisation de la base de données, ou vous pouvez demander au robot de la stocker quelque part.
Pour détecter les valeurs supprimées, utilisez la commande suivante :
SELECT * FROM table WHERE LastUpdated > 'StartTime' AND ExtractedInLastRun = 'n'
Pour détecter les nouvelles valeurs :
SELECT * FROM table WHERE LastUpdated > 'StartTime' AND ExtractedInLastRun = 'y' AND FirstExtracted > 'StartTime'
Pour détecter les valeurs actualisées
SELECT * FROM table WHERE LastUpdated > 'StartTime' AND ExtractedInLastRun = 'y' AND FirstExtracted < 'StartTime'
Mettez ensuite à jour la table de production en conséquence.
Données d'historiques
La configuration par défaut vous permet de déterminer quand une valeur a été extraite pour la première fois et quand elle a été mise à jour pour la dernière fois, mais vous ne pouvez pas déterminer dans quelle exécution du robot la valeur a été trouvée.
Dans ce cas, vous devez copier toutes les données de votre table de recueil de données dans une autre table après l'exécution du robot, mais dans votre nouvelle table, ObjectKey ne doit pas être une clé primaire. Créez plutôt une colonne supplémentaire RUN_ID et utilisez-la avec ObjectKey pour créer une clé primaire composée. Si vous n'avez pas besoin d'une colonne RUN_ID, vous pouvez simplement créer une colonne auto-incrémentée et l'utiliser comme clé primaire de la table secondaire. Tronquez la table de recueil de données avant chaque exécution.
Vous n'êtes pas obligé de copier tous les champs de propriété dans la table de production ; seule ObjectKey est nécessaire pour mettre à jour les tables de production
- Considérations sur la simultanéité
-
Si vous disposez de plusieurs robots qui stockent des valeurs de même type dans la même base de données, tenez compte des points suivants.
- Chaque fois qu'une valeur est stockée, la colonne RobotName est mise à jour. Si vous disposez de deux robots stockant la même valeur (telle qu'identifiée par ObjectKey), seul le dernier s'affiche une fois que l'exécution des robots est terminée.
- Si deux robots stockent la même valeur exactement au même moment, vous obtenez une erreur. Ils constatent tous les deux que la valeur n'est pas dans la table et ils tentent de l'y insérer, mais un seul d'entre eux y parviendra. Dans la plupart des cas, l'erreur peut être ignorée parce qu'il s'agit de la même valeur.
- Si vous exécutez le même robot deux fois en même temps et que le robot stocke les données dans une base de données, vous brisez la façon dont la colonne ExtractedInLastRun est utilisée. Lorsque le premier robot a terminé son exécution, il met à jour ExtractedInLastRun en lui affectant la valeur « n » pour toutes les valeurs qu'il n'a pas stockées. Cela inclut toutes les valeurs stockées par le deuxième robot jusqu'à présent. Ensuite, lorsque l'exécution du deuxième se termine, il affecte à ExtractedInLastRun la valeur « n » pour toutes les valeurs stockées par le premier robot, annulant ainsi complètement la première exécution.
- Relations de valeur
-
Le système de stockage ne permet pas de gérer de manière automatisée les relations entre les valeurs. Si vous avez une valeur de type Personne et une valeur de type Adresse, et que vous voulez les relier, vous devez maintenir ce lien.
La façon la plus simple de créer un lien est de faire en sorte que la valeur ObjectKey de la valeur Personne soit une clé étrangère dans la valeur Adresse qui doit être liée à cette personne.
Si ObjectKey est calculé automatiquement à partir du type, vous pouvez utiliser l'activité Calculer ObjectKey pour générer la clé et l'affecter à chacune des valeurs d'adresse avant de les stocker.
Vous devez être prudent lorsque vous créez des robots avec des connexions entre les valeurs stockées. Si une erreur se produit lorsque vous enregistrez la valeur Personne, assurez-vous qu'aucune valeur Adresse n'est enregistrée.
- Mises en garde concernant ObjetKey
-
Si vous utilisez MySQL ou Oracle, consultez ces importantes règles ObjectKeys.
- Sur Oracle, une chaîne vide est stockée comme chaîne null.
- MySQL n'a pas une précision de l'ordre de la milliseconde dans les horodatages.
Ces deux cas entraînent une perte potentielle de données lorsque les données sont stockées dans la base de données. ObjectKey est calculé à l'intérieur du robot sur la base des données de la variable donnée. Si vous chargez ultérieurement la valeur depuis la base de données et essayez de recalculer ObjectKey, ObjectKey est différent si une perte de données s'est produite dans l'un des attributs marqués comme faisant partie de la clé dans la base de données.