- Démarrage
- Paramétrage et configuration
- Prérequis logiciels et matériels
- À propos des licences à tarification unifiée
- À propos des licences Flex
- Activation de Studio
- Mettre à jour Studio
- Paramètres de la ligne de commande
- Applications et technologies prises en charge
- Activer Gmail pour les activités de messagerie
- Refus de la télémétrie
- Exécutables Studio
- 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
- Lier un projet à une idée dans Automation Hub
- Utilisation du gestionnaire de données
- Solutions
- Dépendances
- Types de workflows
- Flux de contrôle
- Comparaison de fichiers
- Meilleures pratiques d'automatisation
- Intégration du contrôle de code source
- À propos du contrôle de version
- Gestion de projets à l'aide de TFS
- Gestion de projets à l'aide de SVN
- Diff de workflow
- Le panneau de contrôle de code source
- Débogage
- Journalisation
- 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-NMG-017 : le nom de la classe correspond à l’espace de noms par défaut
- ST-DBP-002 - Nombre élevé d'arguments
- ST-DBP-003 - Bloc d'interception vide
- ST-DBP-007 - Plusieurs couches de l'organigramme
- ST-DPB-010 : plusieurs instances de [workflow] ou [cas de test]
- 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-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 - Propriétés de l'activité codées 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-017 - Modificateur de paramètre non valide
- 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)
- Génération du code
- Génération de cas de test codé à partir de cas de test manuels
- Écrire des workflows codés conviviaux
- Intégration d'OpenAI avec des workflows codés
- Demander un prêt auprès de UiBank
- Génération de files d'attente avec workflows codés et API Orchestrator
- Utilisation de projets de bibliothèque importés dans des automatisations codées
- Utilisation de l’authentification à deux facteurs dans des automatisations codées
- Connexion à MongoDB Atlas avec des automatisations codées
- Résolution des problèmes
- Automatisation Attended basée sur déclencheur
- Réf. d’objets
- Outil ScreenScrapeJavaSupport
- 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 Safari
- Extension pour Amazon WorkSpaces
- Plug-in du gestionnaire de solution SAP
- Complément Excel
- Tests Studio
- Résolution des problèmes
- À propos de la résolution des problèmes
- Erreurs de compilation de l’assembly
- 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
Recommandations pour structurer les workflows codés afin que la visionneuse low-code les restitue sous forme de diagrammes low-code propres et lisibles.
Un peu de structure fait un long chemin vers une zone de dessin propre. Les recommandations ci-dessous aident la visionneuse low-code à restituer votre workflow codé sous forme de blocs low-code lisibles au lieu de blocs de code sombres. Elles sont triées par impact, en commençant par les modifications qui comptent le plus.
Services UiPath via du code déroulant
Appels aux services du projet — system.AddQueueItem(...), excel.ReadRange(...), mail.SendSmtp(...), uiAutomation.Click(...) — rendus sous forme de cartes d'activité enrichies: un nom complet convivial, l'icône de service, des propriétés modifiables et une variable de sortie saisie.
La même opération implémentée à partir de zéro — avec HttpClient, System.IO ou une bibliothèque NuGet Excel — s'affiche au mieux comme une carte Assign contenant une longue expression, et au pire sous forme d'un bloc de code. Le fait d'atteindre les packages d'activités en premier et de passer au C# personnalisé uniquement lorsqu'aucune activité ne couvre le besoin vous permet de garder la plus grande partie du workflow visible.
// Renders as a "Write Range" activity card with editable properties:
excel.WriteRange("C:\\out.xlsx", "Sheet1", "A1", table);
// Renders as an opaque code block:
using var writer = new StreamWriter("C:\\out.csv");
// Renders as a "Write Range" activity card with editable properties:
excel.WriteRange("C:\\out.xlsx", "Sheet1", "A1", table);
// Renders as an opaque code block:
using var writer = new StreamWriter("C:\\out.csv");
La méthode d’entrée en tant que couche d’orchestration
La vue Graphique affiche uniquement la méthode d'entrée ([Workflow] ou Execute). Chaque appel à l'une de vos propres méthodes devient un seul bloc étiqueté, et sa sélection permet d'explorer l'assistant.
En conservant la ramification de niveau supérieur, les boucles et la gestion des erreurs dans la méthode d'entrée et en déplaçant des séquences d'étapes détaillées dans des méthodes privées bien nommées, le graphique est lu comme un flux propre et de haut niveau — ValidateInvoice → PostToQueue → NotifyFinance — au lieu d'un tableau de cartes de faible niveau. Chaque assistant dispose également de sa propre section dans la vue Workflow, donc rien n’est masqué. Les noms qui montrent l'intention sont doubles ici: le nom de la méthode est le libellé du bloc.
Flux de contrôle sous forme d'instructions, et non d'expressions
La zone de dessin ne peut dessiner que le branchement et la boucle qui existent au niveau de l'instruction. La logique contenue dans les expressions — lambdas, chaînes Language Integration Query, ternes imbriquées ou switch expressions — est compressée dans une seule carte, ce qui va à l'encontre de l'objectif du visualiseur.
Il convient de noter la distinction switch: une instruction switch s’affiche entièrement sous la forme d’un conteneur Switch avec une branche par cas, tandis que la forme de l’expression (var label = total switch { ... };) reste compressée dans une seule carte Assign. La forme de l'instruction est le meilleur choix lorsque la ramification est une étape de processus qu'un lecteur doit voir.
// Invisible logic — one code block, the filtering and branching are not drawn:
invoices.Where(i => i.Amount > 1000).ToList().ForEach(i => Approve(i));
// Visible logic — a loop containing a decision containing an Invoke block:
foreach (var invoice in invoices)
{
if (invoice.Amount > 1000)
{
Approve(invoice);
}
}
// Invisible logic — one code block, the filtering and branching are not drawn:
invoices.Where(i => i.Amount > 1000).ToList().ForEach(i => Approve(i));
// Visible logic — a loop containing a decision containing an Invoke block:
foreach (var invoice in invoices)
{
if (invoice.Amount > 1000)
{
Approve(invoice);
}
}
Une ligne linq est toujours utilisable lorsqu’il s’agit d’une simple projection dont vous masqueriez les détails (var names = rows.Select(r => r.Name).ToList(); se présente sous la forme d’une carte Attribuer). La règle de la miniature: si un lecteur du diagramme doit voir la ramification, écrivez-la sous la forme if, switch ou foreach.
Équivalents affichables pour les constructions de secours
Plusieurs constructions courantes sont des blocs de code. Chacun a un équivalent restituable qui produit des blocs visibles à la place.
| Au lieu de | Écrire | Parce que |
|---|---|---|
list.ForEach(x => ...) | foreach (var x in list) | Le corps devient des blocs visibles |
| Fonctions locales | Méthodes privées | Les méthodes privées s'affichent sous forme de blocs d'appel navigables |
using var handle = excel.UseWorkbook(...); | using (var handle = excel.UseWorkbook(...)) { ... } | Le formulaire de bloc s'affiche sous la forme d'un cadre d'étendue et permet aux appels sur handle à l'intérieur de se résoudre en tant qu'activités |
int a = 1, b = 2; | Une déclaration par ligne | Chacun devient sa propre carte d’attribution |
string result; ... result = ...; ultérieurement | Une déclaration avec un initialiseur lors de la première utilisation | Les déclarations à barres retournent aux blocs de code |
Déclarations de variables en ligne, une par instruction
Une déclaration avec un initialisateur se présente sous la forme d’une carte Affecter (ou comme la sortie d’une carte d’activité) et alimente le panneau Variables par méthode. Une déclaration à barres se présente sous la forme d'un bloc de code. La déclaration de chaque variable où sa valeur est d'abord produite la rend visible.
var asset = system.GetAsset("Config"); // activity card, output: asset
int retryCount = 0; // Assign card, typed
var asset = system.GetAsset("Config"); // activity card, output: asset
int retryCount = 0; // Assign card, typed
Types explicites que la visionneuse ne peut pas déduire
Le canevas labellise chaque variable de sortie avec le meilleur type qu'il peut trouver:
- Pour les appels d’activité reconnus, le type est automatiquement fourni dans les métadonnées du package.
var asset = system.GetAsset(...)affiche déjà le type de retour réel, doncvarne coûte rien. - Pour tout le reste - affectations simples, appels à vos propres méthodes et expressions calculées -
vars'affiche littéralement commevar. Un type explicite place le type réel sur la carte et dans le panneau Variables.
var totals = ComputeTotals(rows); // Variables panel shows: totals : var
DataTable totals = ComputeTotals(rows); // Variables panel shows: totals : DataTable
var totals = ComputeTotals(rows); // Variables panel shows: totals : var
DataTable totals = ComputeTotals(rows); // Variables panel shows: totals : DataTable
Commentaires représentatifs de l'intention
Un commentaire // placé directement au-dessus d'une activité, d'un appel de méthode, if, foreach, for, switch, try, return, ou #region est attaché à ce bloc. Elle devient la description de la carte dans la vue Graphique, l’info-bulle de la ligne dans la vue Workflow et le champ Description dans le panneau Propriétés. Les lignes de commentaires consécutives sont jointes.
// High-value invoices need manual approval before posting
system.AddQueueItem("InvoiceApproval", reference: invoice.Id);
// High-value invoices need manual approval before posting
system.AddQueueItem("InvoiceApproval", reference: invoice.Id);
Les commentaires qui ne se trouvent pas au-dessus d'une telle instruction s'affichent comme leurs propres petites lignes de code, de sorte qu'un commentaire utile par étape se lit mieux que des commentaires éparsus.
Phases de processus regroupées avec des régions
#region Name ... #endregion s'affiche sous la forme d'un groupe nommé et réductible dans les deux vues, et les régions peuvent imbriquer. Lorsque les régions sont nommées d'après les phases métier — Login, Process invoices, Reporting — un graphique réduit se lit comme un résumé de processus, et le développement d'une région révèle ses étapes.
Tâches connexes regroupées
Deux affectations consécutives ou plus sont regroupées dans une seule carte d'affectation multiple. L'initialisation des valeurs associées dans une exécution ininterrompue les conserve dans une même carte de conservation au lieu de les répartir dans le flux. Inversement, une affectation qui méritent sa propre carte doit se distinguer des autres affectations.
Un appel par instruction
Lorsque les appels sont enchaînés (row.GetValue("col").ToString().Trim()), l'observateur ne peut faire apparaître la chaîne que sous la forme d'une seule ligne, et les chaînes sur les récepteurs non reconnus se replient entièrement. La division d'une chaîne significative en étapes avec des variables intermédiaires nommées donne à chaque étape son propre bloc. Pour les API de gestion, telles que les classeurs Excel et les dossiers de messagerie, il permet également à la visionneuse de suivre le handle afin que les appels de suivi soient rendus comme des activités appropriées.
Invocations de workflow identifiables
workflows.MyOtherWorkflow(arg1, arg2)s'affiche sous la forme d'une carte Appeler le workflow dédiée, avec chaque argument badgé par direction (Entrée, Sortie ou EntréeSortie) et la navigation vers le fichier de workflow.- Les appels
SharedHelpers.Method(...)dans un autre fichier.csdu projet s'affichent sous forme de blocs d'invocation navigables. Les conserver sous forme d'un seul appel par instruction, plutôt que de faire partie d'une chaîne plus longue, est ce qui leur permet de se résoudre.
Liste de contrôle rapide
- Les étapes utilisent des services d'activité (
system.,excel.,mail.et similaires), et non des équivalents lancés à la main. - La méthode
[Workflow]est courte et orchestre des méthodes privées bien nommées. - Les branches et les boucles sont des instructions (
if,switch,foreach,for,while,try), sans logique cachée dans les lambdas ou les pipelines linQ. - Les variables sont déclarées en ligne, une par instruction, avec un initialiseur.
- Les types explicites sont utilisés lorsque l'observateur ne peut pas en déduire un, tels que les résultats de la méthode d'assistance et les valeurs calculées.
- Un commentaire
//en une ligne précède chaque étape significative. - Les phases de processus sont encapsulées dans
#region. - Chaque instruction contient un appel de service ou d’aide, sans chaînes longues.
- Les autres workflows sont appelés via
workflows.X(...). - Aucune carte de bloc de code grise ne reste sur le canevas - chacune est un endroit où la vue visuelle est masquée.
Contenu associé
- Services UiPath via du code déroulant
- La méthode d’entrée en tant que couche d’orchestration
- Flux de contrôle sous forme d'instructions, et non d'expressions
- Équivalents affichables pour les constructions de secours
- Déclarations de variables en ligne, une par instruction
- Types explicites que la visionneuse ne peut pas déduire
- Commentaires représentatifs de l'intention
- Phases de processus regroupées avec des régions
- Tâches connexes regroupées
- Un appel par instruction
- Invocations de workflow identifiables
- Liste de contrôle rapide
- Contenu associé