sdk
latest
false
Importante :
Este contenido se ha localizado parcialmente a partir de un sistema de traducción automática. La localización de contenidos recién publicados puede tardar entre una y dos semanas en estar disponible.
UiPath logo, featuring letters U and I in white

Guía del desarrollador

Última actualización 25 de oct. de 2024

Crear actividades de Configuración del proyecto

Utilizando el paquete UiPath.Activities.API de la fuente oficial (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.
Nota: El paquete .API deUiPath Activities debe usarse como una dependencia de desarrollo en tu proyecto personalizado. Más información sobre las dependencias de desarrollo.

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.



Crear configuración de actividad

El siguiente ejemplo crea un conjunto de configuraciones para una actividad de muestra de un reproductor de música.

Agregar la pestaña y la sección

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:



Agregar ajustes

  • 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:



Obtener ID de procesos y registros

Mediante los métodos aplicados a la referencia 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 proceso
    • ProcessName: recupera el nombre del proceso
    • ProcessVersion: recupera la versión del proceso
    • WorkflowFilePath: recupera la ruta completa del proceso
    • InitiatedBy: recupera la fuente de un trabajo (Robot, Studio, Orchestrator, etc.)
    • FolderId : recupera el ID de la carpeta del proceso
    • FolderName : recupera el nombre de la carpeta del proceso
    • TenantId : recupera el ID del tenant
    • TenantKey : recupera la clave del tenant.
    • TenantName : recupera el nombre del tenant
    • RobotName : 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 no
    • InternalArguments : recupera cualquier argumento interno del proceso
    • OrganizationId : 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 Windows
      • PictureInPictureSession : 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 recuperar
    • Message: el mensaje que se mostrará
El siguiente código es un ejemplo del uso del método 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}"
        });
    }
}

Agregar el proyecto a Studio

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.

Crear el paquete NuGet



  1. Launch NuGet Package Explorer.
  2. 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.
  3. Haz clic con el botón derecho en la sección Contenido del paquete. Se mostrará un menú contextual.
  4. Haz clic en Agregar carpeta lib. Ten cuenta que se creará un nuevo elemento lib en la sección de Contenidos del paquete.
  5. Haz clic en lib y selecciona Agregar un archivo existente....
  6. Carga el ensamblado externo (.dll) de tu proyecto.
  7. Haz clic en Editar > Editar metadatos. Se mostrará la sección Metadatos del paquete.
  8. Rellena los campos como creas conveniente para describir mejor tu proyecto.
  9. 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.
  10. 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.

Instalar el paquete NuGet en UiPath Studio

Una vez creado el archivo .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.

Configuración de la muestra

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.

¿Te ha resultado útil esta página?

Obtén la ayuda que necesitas
RPA para el aprendizaje - Cursos de automatización
Foro de la comunidad UiPath
Uipath Logo White
Confianza y seguridad
© 2005-2024 UiPath. Todos los derechos reservados.