studio
2023.10
false
- Notes de publication
- Démarrage
- Paramétrage et configuration
- Projets d'automatisation
- À propos de la publication de projets d'automatisation
- Conception d'automatisations
- Gérer les package d’activités
- Configuration des paramètres du projet d'activité
- Signature de paquets
- Gouvernance
- Import des entités
- Modern Design Experience
- Lier un projet à une idée dans Automation Hub
- Utilisation du gestionnaire de données
- Dépendances
- Types de workflows
- Comparaison de fichiers
- Meilleures pratiques d'automatisation
- Intégration du contrôle de code source
- Débogage
- L'outil de diagnostic (Diagnostic Tool)
- Analyseur de workflow
- À propos de l'analyseur de workflow
- ST-NMG-001 - Convention d'affectation de noms des variables
- ST-NMG-002 - Convention d'affectation de noms des arguments
- ST-NMG-004 - Duplication du nom complet
- ST-NMG-005 - La variable remplace une autre
- ST-NMG-006 - La variable remplace l'argument
- ST-NMG-008 - Longueur de variable dépassée
- ST-NMG-009 - Ajouter un préfixe aux variables DataTable
- ST-NMG-011 - Ajouter un préfixe aux arguments Datatable
- ST-NMG-012 - Valeurs par défaut de l'argument
- ST-NMG-016 : longueur d'argument dépassée
- ST-DBP-002 - Nombre élevé d'arguments
- ST-DBP-003 - Bloc d'interception vide
- ST-DBP-007 - Plusieurs couches de l'organigramme
- ST-DBP-020 - Propriétés de sortie non définies
- ST-DBP-021 - Délai d'expiration codé en dur
- ST-DBP-023 : Workflow vide
- ST-DBP-024 - Vérification de l’activité de persistance
- ST-DBP-025 - Condition préalable à la sérialisation des variables
- ST-DBP-026 - Utilisation de l’activité Délai
- ST-DBP-027 - Pratiques exemplaires de persistance
- ST-DBP-028 - Condition préalable à la sérialisation des arguments
- ST-MRD-002 - Valeurs par défaut des noms d'activités
- ST-MRD-004 - Activités inaccessibles
- ST-MRD-005 - Séquences redondantes
- ST-MRD-007 - Clauses If imbriquées
- ST-MRD-008 - Séquence vide
- ST-MRD-009 - Activités profondément imbriquées
- ST-MRD-011 - Utilisation de la ligne d'écriture
- ST-MRD-017 - Incomplet si (Incomplete If)
- ST-USG-005 - Arguments d'activité codée en dur
- ST-USG-009 - Variables inutilisées
- ST-USG-010 - Dépendances inutilisées
- ST-USG-014 - Restrictions sur les paquets (Package Restriction)
- ST-USG-020 - Nombre minimum de messages consignés
- ST-USG-024 - Non utilisé, sauvegardé pour plus tard (Unused Saved for Later)
- ST-USG-025 - Utilisation abusive de la valeur enregistrée (Saved Value Misuse)
- ST-USG-026 - Restrictions d'activité (Activity Restrictions)
- ST-USG-027 - Packages requis
- ST-USG-028 - Restreindre l'invocation des modèles de fichier
- ST-USG-027 - Balises requises
- ST-USG-034 – URL Automation Hub
- Variables
- Arguments
- Noms d'espace importés
- Automatisations codées
- Introduction
- Enregistrement de services personnalisés
- Contextes Avant (Before) et Après (After)
- Automatisation Attended basée sur déclencheur
- Enregistrement
- Éléments de l'interface utilisateur
- À propos des éléments d'interface utilisateur
- Propriétés des activités de l'interface utilisateur
- Exemple d'utilisation des méthodes de saisie
- Méthodes de sortie ou de capture de données d'écran
- Exemple d'utilisation de méthodes de sortie ou de capture de données d'écran
- Génération de tables à partir de données non structurées
- Capture relative de données
- Flux de contrôle
- Sélecteurs
- Réf. d’objets
- Capture de données
- Automatisation des images et des textes
- À propos de l'automatisation des images et des textes
- Activités liées à la souris et au clavier
- Exemple d'utilisation de l'automatisation de la souris et du clavier
- Les activités de type texte
- Exemple d'utilisation d'automatisation de texte
- Activités de type OCR
- Activités de type image
- Exemple d'utilisation de l'automatisation d'image et d'OCR
- Automatisation des technologies Citrix
- Automatisation de RDP
- Automatisation de Salesforce
- Automatisation SAP
- Automatisation VMware Horizon
- Journalisation
- Outil ScreenScrapeJavaSupport
- Protocole Webdriver
- Tests Studio
- Extensions
- À propos des extensions
- Outil SetupExtensions
- UiPathRemoteRuntime.exe n'est pas en cours d'exécution dans la session distante
- UiPath Remote Runtime bloque la fermeture de la session Citrix
- UiPath Remote Runtime provoque une fuite de mémoire
- Le package UiPath.UIAutomation.Activities ne correspond pas aux versions d’UiPath Remote Runtime
- L'extension UiPath requise n'est pas installée sur la machine distante
- Paramètres de résolution d’écran
- Stratégies de groupe
- Impossible de communiquer avec le navigateur
- L’extension Chrome est automatiquement supprimée
- L'extension a peut-être été corrompue
- Vérification de l'installation et de l'activation de l'extension pour Chrome
- Vérifiez si ChromeNativeMessaging.exe est en cours d’exécution
- Vérifier si la variable ComSpec est correctement définie
- Activez l’accès aux URL de fichiers et au mode navigation privée
- Profils de navigateur multiples
- Group Policy conflict
- Problèmes connus spécifiques aux extensions MV3
- Liste des extensions pour Chrome
- Extension Chrome sur Mac
- Stratégies de groupe
- Impossible de communiquer avec le navigateur
- L’extension Edge est automatiquement supprimée
- L'extension a peut-être été corrompue
- Vérification si l'extension pour Microsoft Edge est installée et activée
- Vérifiez si ChromeNativeMessaging.exe est en cours d’exécution
- Vérifier si la variable ComSpec est correctement définie
- Activation de l'accès aux URL de fichiers et au mode navigation privée
- Profils de navigateur multiples
- Group Policy conflict
- Problèmes connus spécifiques aux extensions MV3
- Liste des extensions pour Edge
- Extension pour VMware Horizon
- Plug-in du gestionnaire de solution SAP
- Complément Excel
- Résolution des problèmes
- À propos de la résolution des problèmes
- Prise en charge et limitations de Microsoft App-V
- Résolution des problèmes rencontrés avec Internet Explorer x64
- Problèmes rencontrés avec Microsoft Office
- Identification des éléments d'IU dans PDF avec options d'accessibilité
- Réparation de la prise en charge d'Active Accessibility
- La validation des projets volumineux hérités depuis Windows prend plus de temps que prévu
Important :
La localisation du contenu nouvellement publié peut prendre 1 à 2 semaines avant d’être disponible.

Guide de l’utilisateur de Studio
Dernière mise à jour 3 sept. 2025
Enregistrement de services personnalisés
linkAfin d’améliorer vos automatisations codées, vous pouvez enregistrer des services personnalisés. En enregistrant un service personnalisé, vous pourrez l’utiliser de façon globale dans votre projet. Il sera ainsi accessible non plus pour une seule automatisation codée, mais pour toutes les automatisations codées de votre projet.
- Créez un fichier source du code et définissez une interface publique nommée comme le service que vous souhaitez créer.Cette interface doit répertorier les méthodes que vous avez l'intention d'utiliser avec votre service personnalisé. Chaque méthode doit être implémentée dans une classe distincte qui hérite du même fichier dans lequel vous définissez l'interface.Pour cet exemple, nommez l'interface
IMyService
et nommez la méthode associéeDoMyMethod
.{ public interface IMyService { void DoMyMethod(); } }
{ public interface IMyService { void DoMyMethod(); } } - Passez à un autre fichier source du code et implémentez les méthodes de l'interface créée précédemment.Cette classe doit hériter du même fichier source du code dans lequel l'interface publique a été créée.Dans cet exemple, implémentez la méthode
DoMyMethod
pour générer la valeur d'une variable.public class MyService : IMyService { public void DoMyMethod() { var a = "hello world"; Console.WriteLine(a); } } }
public class MyService : IMyService { public void DoMyMethod() { var a = "hello world"; Console.WriteLine(a); } } } - Créez une classe partielle pour encapsuler votre service personnalisé, le rendant ainsi accessible à partir de tout workflow codé qui hérite de cette classe.
- Créez un autre fichier source du code et déclarez la classe partielle publique nommée
Coded Workflow
. Faites en sorte que cette classe hérite de la classeCodedWorkflowBase
. - Créez une propriété à récupérer uniquement pour le service personnalisé que vous avez créé et qui permet d'accéder à une instance de l'interface de service.L'instance est obtenue par l'injection de dépendances à l'aide de la méthode
serviceContainer.Resolve<IMyService>()
. Cela permet d'interagir avec le service personnalisé dans la classe partielle.public IMyService myService { get => serviceContainer.Resolve<IMyService>()};
public IMyService myService { get => serviceContainer.Resolve<IMyService>()}; - Développez davantage votre classe en ajoutant la méthode
RegisterServices
.En appelant cette méthode, vous enregistrez votre service personnalisé dans le conteneur de service UiPath.protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator) { serviceLocator.RegisterType<IMyService, MyService>(); }
protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator) { serviceLocator.RegisterType<IMyService, MyService>(); }Vous pouvez également utiliserRegisterInstance
au lieu deRegisterType
. Vérifiez les différences suivantes entre les deux implémentations et leurs méthodes de signature respectives :RegisterType
: lorsque vous utilisezRegisterType
, vous indiquez le conteneur pour créer une nouvelle copie ou instance de votre service chaque fois que vous l’appelez.RegisterType
donne un modèle à suivre, basé sur lequel créer un nouveau service à chaque fois.TService
: il s’agit du type d’interface de service qui sera utilisé par le service. C’est l’interface que vous créez pour votre service. Dans cet exemple, il s’agit deIMyService
.TServiceImplementation
: il s’agit de la classe qui implémente l’interfaceTService
. C’est la classe qui est créée lorsqu’un service de typeTService
est demandé.registrationType
: la valeur est définie par défaut surCodeServiceRegistrationType.Singleton
. Cela définit la stratégie d’enregistrement du service.
void RegisterType<TService, TServiceImplementation>(CodeServiceRegistrationType registrationType = CodeServiceRegistrationType.Singleton) where TService : class where TServiceImplementation : class, TService;
void RegisterType<TService, TServiceImplementation>(CodeServiceRegistrationType registrationType = CodeServiceRegistrationType.Singleton) where TService : class where TServiceImplementation : class, TService;RegisterInstance
: lorsque vous utilisezRegisterInstance
, vous offrez au conteneur une instance prête à l’emploi de ce service, que vous avez déjà créée auparavant. Chaque fois que vous appelez le service, le conteneur renvoie ce service exact prédéfini.RegisterInstance
renvoie une copie exacte du service que vous avez créé.TServiceImplementation
: il s’agit de l’instance prête à l’emploi d’une classe que vous avez déjà créée. Cette instance est renvoyée chaque fois qu’un service de ce type doit être résolu. Pour cet exemple,MySecondService
.serviceTypes
: il s’agit d’un tableau des types sous lesquels l’instance sera disponible lors de l’appel.
void RegisterInstance<TServiceImplementation>(TServiceImplementation instance, params Type[] serviceTypes) where TServiceImplementation : class;
void RegisterInstance<TServiceImplementation>(TServiceImplementation instance, params Type[] serviceTypes) where TServiceImplementation : class;
L'extrait de code ci-dessous montre un exemple d'implémentation de classe partielle publique :public partial class CodedWorkflow : CodedWorkflowBase { public IMyService myService { get => serviceContainer.Resolve<IMyService>() ; } protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator) { // Implementation using 'RegisterType' serviceLocator.RegisterType<IMyService, MyService>(); // Implementation using 'RegisterInstance' var secondService = new MySecondService(); serviceLocator.RegisterInstance<MySecondService>(secondService); }
public partial class CodedWorkflow : CodedWorkflowBase { public IMyService myService { get => serviceContainer.Resolve<IMyService>() ; } protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator) { // Implementation using 'RegisterType' serviceLocator.RegisterType<IMyService, MyService>(); // Implementation using 'RegisterInstance' var secondService = new MySecondService(); serviceLocator.RegisterInstance<MySecondService>(secondService); } - Créez un autre fichier source du code et déclarez la classe partielle publique nommée
Prochaines étapes
linkPour utiliser le service personnalisé que vous avez créé, référencez l'espace de noms de ce service dans le fichier sur lequel vous travaillez, en utilisant l'instruction
using
. L'espace de noms du service personnalisé est constitué du nom du projet et du nom des dossiers/sous-dossiers dans lesquels le fichier .cs
peut se trouver. Le format de l'espace de noms est le suivant : <ProjectName>.<Folder>.<SubFolder>
Par exemple, si vous créez un service personnalisé dans un projet nommé
GeneralCustomServices
, dans le dossier MyCustomService
, l'espace de noms de ce service sera le suivant : GeneralCustomServices.MyCustomService
.