- Información general
- Actividades personalizadas
- Migrar actividades a .NET 6
- Notas relacionadas
- Construir reglas para el Analizador de flujo de trabajo
- Crear actividades de Configuración del proyecto
- Crear Asistentes personalizados
- Priorizar las actividades según su alcance
- 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
- Desencadenadores SDK
Guía del desarrollador
Crear actividades de Configuración del proyecto
https://pkgs.dev.azure.com/uipath/Public.Feeds/_packaging/UiPath-Official/nuget/v3/index.json
), puedes crear y añadir tu propia configuración de proyecto de actividad personalizada en Studio. Para obtener información sobre cómo utilizar la API, consulta SDK de actividades de Studio.
La configuración del proyecto de actividad incluye un conjunto de opciones que pueden ajustarse en el nivel de proyecto directamente desde la ventana Configuración del proyecto.
El siguiente ejemplo crea un conjunto de configuraciones para una actividad de muestra de un reproductor de música.
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);
Esto agrega una pestaña y una sección a la ventana de Configuración de actividad del proyecto. La descripción de la pestaña es visible cuando se pasa por encima de la información sobre herramientas de la pestaña:
-
Sección de configuración ampliable:
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; }
Esto resulta en:
-
Botón de radio para valores booleanos:
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); }
Esto resulta en:
-
Lista de valores de elección múltiple:
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); }
Esto resulta en:
-
Campo de texto de entrada con validación:
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; }
Esto resulta en:
IExecutorRuntime
, se puede obtener información sobre el ID del proceso que se está ejecutando por el Robot, así como los registros de ejecución. Pueden usarse los siguientes métodos:
-
IRunningJobInformation
: recopila información sobre el proceso que se está ejecutando, y es compatible con las siguientes propiedades:JobID
: recupera el ID del procesoProcessName
: recupera el nombre del procesoProcessVersion
: recupera la versión del procesoWorkflowFilePath
: recupera la ruta completa del procesoInitiatedBy
: recupera la fuente de un trabajo (Robot, Studio, Orchestrator, etc.)FolderId
: recupera el ID de la carpeta del procesoFolderName
: recupera el nombre de la carpeta del procesoTenantId
: recupera el ID del tenantTenantKey
: recupera la clave del tenant.TenantName
: recupera el nombre del tenantRobotName
: recupera el nombre del robot.LicenseType
: recupera el tipo de licencia del robot.RuntimeGovernanceEnabled
: proporciona información si el control de tiempo de Runtime está habilitado o noInternalArguments
: recupera cualquier argumento interno del procesoOrganizationId
: recupera el ID de la organización-
PictureInPictureMode
: recupera el tipo de modo Imagen en imagen utilizado. Están disponibles los siguientes valores:Main
: el proceso se ejecuta en la sesión principal de WindowsPictureInPictureSession
: el proceso se ejecuta en la sesión PiP.PictureInPictureDesktop
: el proceso se ejecuta en modo de escritorio virtual de PiP
LogMessage
: genera registros de ejecución del robot según el nivel de registro que especifiques. Obtén más información sobre los registros en esta página. Se admiten las siguientes propiedades:EventType
: el nivel de registro a recuperarMessage
: el mensaje que se mostrará
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}"
});
}
}
Para hacer que la configuración sea visible en Studio en la ventana Configuración de actividad del proyecto, deberás publicar tus actividades personalizadas en un paquete NuGet y ponerlas a disposición de una fuente definida en Studio, versión 2019.10.1 o superior.
- Launch NuGet Package Explorer.
- Haz clic en Crear un nuevo paquete (Ctrl + N). Aparecerá una ventana dividida que muestra Metadatos del paquete y Contenido del paquete. Debemos agregar todas las dependencias en esta última sección.
- Haz clic con el botón derecho en la sección Contenido del paquete. Se mostrará un menú contextual.
- Haz clic en Agregar carpeta lib. Ten cuenta que se creará un nuevo elemento lib en la sección de Contenidos del paquete.
- Haz clic en lib y selecciona Agregar un archivo existente....
- Carga el ensamblado externo (.dll) de tu proyecto.
- Haz clic en Editar > Editar metadatos. Se mostrará la sección Metadatos del paquete.
- Rellena los campos como creas conveniente para describir mejor tu proyecto.
- Rellena el campo Id y asegúrate de que se incluye la palabra clave "Actividades" para que el paquete pueda ser mostrado en la ventana de Gestión de paquetes, en 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
, añádelo a una transmisión personalizada en Studio, como se explica aquí.
Abre la ventana Gestionar paquetes e instala el paquete. Asegúrate de que la fuente personalizada esté activada en Studio.
En conjunto, la pestaña, la sección y la configuración creada anteriormente son visibles en la ventana Configuración del proyecto de actividad:
Simplemente siga el enlace a continuación para descargar la muestra, que también contiene un ejemplo de cómo crear asistentes personalizados.