- Vue d'ensemble (Overview)
- Activités personnalisées (Custom Activities)
- Migration des activités vers .NET 6
- Notes de publication
- Création de règles d'analyse de flux de travail
- Création de paramètres de projet d'activité
- Création d'assistants personnalisés
- Classer les activités par ordre de priorité
- UiPath.Activities.Api.Base
- UiPath.Studio.Activities.Api
- UiPath.Studio.Activities.Api.Activities
- UiPath.Studio.Activities.Api.BusyService
- UiPath.Studio.Activities.Api.ExpressionEditor
- UiPath.Studio.Activities.Api.Expressions
- UiPath.Studio.Activities.Api.Licensing
- UiPath.Studio.Activities.Api.Mocking
- UiPath.Studio.Activities.Api.ObjectLibrary
- UiPath.Studio.Activities.Api.PackageBindings
- UiPath.Studio.Activities.Api.ProjectProperties
- UiPath.Studio.Activities.Api.ScopedActivities
- UiPath.Studio.Activities.Api.Settings
- UiPath.Studio.Activities.Api.Wizards
- UiPath.Studio.Activities.Api.Workflow
- UiPath.Studio.Api.Controls
- UiPath.Studio.Api.Telemetry
- UiPath.Studio.Api.Theme
- Robot JavaScript SDK
- SDK de déclencheurs
Guide du développeur
Création de paramètres de projet d'activité
https://pkgs.dev.azure.com/uipath/Public.Feeds/_packaging/UiPath-Official/nuget/v3/index.json
), vous pouvez créer et ajouter vos propres paramètres de projet d'activité personnalisés dans Studio. Pour plus d'informations sur l'utilisation de l'API, consultez SDK Activités Studio ( Studio Activities SDK).
Les paramètres de projet d'activité englobent un ensemble d'options qui peuvent être ajustées au niveau du projet directement à partir de la fenêtre Paramètres du projet (Project Settings).
L'exemple suivant crée un ensemble de paramètres pour un exemple d'activité de lecteur de musique.
using UiPath.Studio.Activities.Api;
using UiPath.Studio.Activities.Api.Settings;
namespace MyCustomActivityPack
{
public static class SettingsCreator
{
// This is the key used to reference a tab, even across packages.
internal const string CategoryKey = "DemoTabUniqueKey";
// This is the key used to reference the setting, even across packages.
internal const string CommentTextKey = CategoryKey + ".Comment";
internal const string PresetKey = CategoryKey + ".Preset";
internal const string ShuffleKey = CategoryKey + ".Shuffle";
public static void CreateSettings(IWorkflowDesignApi workflowDesignApi)
{
var settingsApi = workflowDesignApi.Settings;
// Add the category (a tab in the settings page)
var category = new SettingsCategory()
{
Description = "Settings Sample",
Header = "Settings Sample",
Key = CategoryKey
};
settingsApi.AddCategory(category);
AddMusicPlayerSection(settingsApi, category);
AddMiscSettings(settingsApi, category);
using UiPath.Studio.Activities.Api;
using UiPath.Studio.Activities.Api.Settings;
namespace MyCustomActivityPack
{
public static class SettingsCreator
{
// This is the key used to reference a tab, even across packages.
internal const string CategoryKey = "DemoTabUniqueKey";
// This is the key used to reference the setting, even across packages.
internal const string CommentTextKey = CategoryKey + ".Comment";
internal const string PresetKey = CategoryKey + ".Preset";
internal const string ShuffleKey = CategoryKey + ".Shuffle";
public static void CreateSettings(IWorkflowDesignApi workflowDesignApi)
{
var settingsApi = workflowDesignApi.Settings;
// Add the category (a tab in the settings page)
var category = new SettingsCategory()
{
Description = "Settings Sample",
Header = "Settings Sample",
Key = CategoryKey
};
settingsApi.AddCategory(category);
AddMusicPlayerSection(settingsApi, category);
AddMiscSettings(settingsApi, category);
Cela ajoute un onglet et une section à la fenêtre Paramètres de projet d'activité (Activity Project Settings). La description de l'onglet est visible lorsque vous survolez l'info-bulle de l'onglet :
-
Section des paramètres extensibles :
private static SettingsSection AddMusicPlayerSection(IActivitiesSettingsService settingsApi, SettingsCategory category) { var section = new SettingsSection() { Description = "Settings for a music player", IsExpanded = true, //set this to control default expansion Title = "Music Player Settings", // the key of a section has to be unique only within the category Key = "Player" }; settingsApi.AddSection(category, section); AddSimpleBoolean(settingsApi, section); AddSingleChoice(settingsApi, section); return section; }
private static SettingsSection AddMusicPlayerSection(IActivitiesSettingsService settingsApi, SettingsCategory category) { var section = new SettingsSection() { Description = "Settings for a music player", IsExpanded = true, //set this to control default expansion Title = "Music Player Settings", // the key of a section has to be unique only within the category Key = "Player" }; settingsApi.AddSection(category, section); AddSimpleBoolean(settingsApi, section); AddSingleChoice(settingsApi, section); return section; }
Cela donne :
-
Case d'option des valeurs booléennes :
private static void AddSimpleBoolean(IActivitiesSettingsService settingsApi, SettingsSection section) { var booleanSetting = new SingleValueEditorDescription<bool> { DefaultValue = true, Description = "If active, the playlist is shuffled", // The value returned by GetDisplayValue should be localized GetDisplayValue = b => b ? "On" : "Off", Key = ShuffleKey, Label = "Shuffle" }; settingsApi.AddSetting(section, booleanSetting); }
private static void AddSimpleBoolean(IActivitiesSettingsService settingsApi, SettingsSection section) { var booleanSetting = new SingleValueEditorDescription<bool> { DefaultValue = true, Description = "If active, the playlist is shuffled", // The value returned by GetDisplayValue should be localized GetDisplayValue = b => b ? "On" : "Off", Key = ShuffleKey, Label = "Shuffle" }; settingsApi.AddSetting(section, booleanSetting); }
Cela donne :
-
Liste de valeurs à choix multiples :
private static void AddSingleChoice(IActivitiesSettingsService settingsApi, SettingsSection category) { var booleanSetting = new SingleValueSelectorDescription { DefaultValue = "pop", Values = new[] { "classic", "pop", "rock" }, Description = "Sample single choice setting", // The value returned by GetDisplayValue should be localized GetDisplayValue = choice => choice + " music", Key = PresetKey, Label = "Mixer Preset" }; settingsApi.AddSetting(category, booleanSetting); }
private static void AddSingleChoice(IActivitiesSettingsService settingsApi, SettingsSection category) { var booleanSetting = new SingleValueSelectorDescription { DefaultValue = "pop", Values = new[] { "classic", "pop", "rock" }, Description = "Sample single choice setting", // The value returned by GetDisplayValue should be localized GetDisplayValue = choice => choice + " music", Key = PresetKey, Label = "Mixer Preset" }; settingsApi.AddSetting(category, booleanSetting); }
Cela donne :
-
Champ de texte d'entrée avec validation :
private static void AddSimpleString(IActivitiesSettingsService settingsApi, SettingsSection section) { var simpleStringSetting = new SingleValueEditorDescription<string>() { Description = "A free text comment that can't contain the word 'invalid'", // The GetDisplayValue obtains a localized screen representation of the underlying setting value. GetDisplayValue = LocalizeSimpleSettingValue, IsReadOnly = false, DefaultValue = "There is no comment", Label = "Comment", Validate = ValidateSimpleStringSetting, Key = CommentTextKey }; // Add the setting to the section. // A setting may also be directly added on a category. It will appear as a setting without a section (top level setting) settingsApi.AddSetting(section, simpleStringSetting); } private static string LocalizeSimpleSettingValue(string s) => $"A localized value of <code>{s}</code>"; private static string ValidateSimpleStringSetting(string arg) { if (arg?.ToLowerInvariant().Contains("invalid") == true) { return "The sample string setting is invalid if it contains the <code>invalid</code> keyword"; } return string.Empty; }
private static void AddSimpleString(IActivitiesSettingsService settingsApi, SettingsSection section) { var simpleStringSetting = new SingleValueEditorDescription<string>() { Description = "A free text comment that can't contain the word 'invalid'", // The GetDisplayValue obtains a localized screen representation of the underlying setting value. GetDisplayValue = LocalizeSimpleSettingValue, IsReadOnly = false, DefaultValue = "There is no comment", Label = "Comment", Validate = ValidateSimpleStringSetting, Key = CommentTextKey }; // Add the setting to the section. // A setting may also be directly added on a category. It will appear as a setting without a section (top level setting) settingsApi.AddSetting(section, simpleStringSetting); } private static string LocalizeSimpleSettingValue(string s) => $"A localized value of <code>{s}</code>"; private static string ValidateSimpleStringSetting(string arg) { if (arg?.ToLowerInvariant().Contains("invalid") == true) { return "The sample string setting is invalid if it contains the <code>invalid</code> keyword"; } return string.Empty; }
Cela donne :
IExecutorRuntime
, vous pouvez obtenir des informations sur l'ID de processus exécuté par le Robot, ainsi que les journaux d'exécution. Les méthodes suivantes peuvent être utilisées :
-
IRunningJobInformation
: collecte des informations sur le processus en cours d'exécution et prend en charge les propriétés suivantes :JobID
: récupère l'ID de processusProcessName
: récupère le nom du processusProcessVersion
: récupère la version du processusWorkflowFilePath
: récupère le chemin complet du processusInitiatedBy
: récupère la source d’une tâche (Robot, Studio, Orchestrator, etc.)FolderId
: récupère l'ID de dossier du processusFolderName
: récupère le nom du dossier du processusTenantId
: récupère l'ID du locataireTenantKey
: récupère la clé du locataireTenantName
: récupère le nom du locataireRobotName
: récupère le nom du robotLicenseType
: récupère le type de licence du robotRuntimeGovernanceEnabled
: fournit des informations si la gouvernance de Runtime est activée ou nonInternalArguments
: récupère tous les arguments internes du processusOrganizationId
: récupère l'ID de l'organisation-
PictureInPictureMode
: récupère le type de mode d'incrustation d'image utilisé. Les valeurs suivantes sont disponibles :Main
: le processus s'exécute dans la session Windows principalePictureInPictureSession
- le processus s'exécute dans la session PiPPictureInPictureDesktop
: le processus s'exécute en mode de bureau virtuel PiP
LogMessage
: génère des Robot Execution Logs (Journaux d'exécution du Robot) selon un Niveau de journalisation (Logging Level) que vous spécifiez. Découvrez-en davantage sur les journaux sur cette page. Les propriétés suivantes sont prises en charge :EventType
: niveau de journalisation à récupérerMessage
: message à afficher
LogMessage
:
public class MyLogMessageActivity : CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
var executorRuntime = context.GetExtension<IExecutorRuntime>();
var jobInfo = executorRuntime.RunningJobInformation;
executorRuntime.LogMessage(new LogMessage
{
EventType = TraceEventType.Warning,
Message = $"Job {jobInfo.JobId}: My log message from workflow {jobInfo.WorkflowFilePath}"
});
}
}
public class MyLogMessageActivity : CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
var executorRuntime = context.GetExtension<IExecutorRuntime>();
var jobInfo = executorRuntime.RunningJobInformation;
executorRuntime.LogMessage(new LogMessage
{
EventType = TraceEventType.Warning,
Message = $"Job {jobInfo.JobId}: My log message from workflow {jobInfo.WorkflowFilePath}"
});
}
}
Pour rendre les paramètres visibles dans Studio dans la fenêtre Paramètres de projet d'activité (Activity Project Settings), vous devez publier vos activités personnalisées dans un paquet NuGet et les mettre à disposition d'un flux défini dans Studio, version 2019.10.1 ou ultérieures.
- Launch NuGet Package Explorer.
- Cliquez sur Créer un nouveau paquet (Create a new package) (Ctrl + N). Une fenêtre divisée s'ouvre, affichant Métadonnées de paquet (Package metadata) et Contenu du paquet (Package content). Il faut ajouter toutes les dépendances dans cette dernière section.
- Cliquez avec le bouton droit sur la section Contenu du paquet (Package content). Un menu contextuel s'affiche.
- Cliquez sur Ajouter un dossier lib (Add lib folder). Notez qu'un nouvel élément lib (lib) est créé dans la section Contenu du package (Package contents).
- Cliquer sur lib (lib) avec le bouton droit de la souris et sélectionner Ajouter un fichier existant... (Add Existing File...).
- Chargez l'assembly externe (.dll) de votre projet.
- Cliquez sur Modifier > Modifier les métadonnées (Edit > Edit Metadata). La section Métadonnées du package (Package metadata) apparaît.
- Renseignez les champs de façon à décrire au mieux votre projet.
- Remplissez le champ ID (ID) et assurez-vous d'inclure le mot-clé “Activités” afin que le paquet puisse être affiché dans la fenêtre Gérer les paquets (Manage Packages), dans Studio.
-
Click File > Save. In our case, the
.nupkg
file is created.Note: Be sure to create an intuitive folder structure for your activities. All empty folders inside the custom activity get removed when used with Orchestrator.
.nupkg
créé, ajoutez-le à un flux personnalisé dans Studio, comme expliqué ici.
Ouvrez la fenêtre Gérer les paquets (Manage Packages) et installez le paquet. Assurez-vous que le flux personnalisé est activé dans Studio.
Ensemble, l'onglet, la section et les paramètres créés ci-dessus sont visibles dans la fenêtre Paramètres de projet d'activité (Activity Project Settings) :
Suivez simplement le lien ci-dessous pour télécharger l'exemple, qui contient également un exemple de Création d'assistants personnalisés.