- Información general
- Actividades personalizadas
- Comprender la estructura del proyecto de actividad
- Escribir el código de actividad
- Configurar los metadatos de la actividad
- Compilación de la solución y creación del paquete NuGet
- Utilizar la actividad en un proyecto de Studio
- Probar tu actividad
- Escribir el código para una actividad personalizada
- Añadir el ensamblado externo .dll en UiPath Studio
- Migración de 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
- SDK de agentes

Guía del desarrollador
Escribir el código para una actividad personalizada
Para comprender mejor cómo escribir el código para una actividad personalizada, vamos a crear una actividad simple que le pide al usuario dos números y luego genera el cuadrado de su suma.
-
Inicia Microsoft Visual Studio.
-
Selecciona Archivo > Nuevo > Proyecto... (atajo:
Ctrl + Shift + N). Se mostrará la ventana Nuevo proyecto . -
Selecciona C# en el menú desplegable Idiomas . Se muestra la lista de todas las dependencias que utilizan C#.
-
Selecciona Biblioteca de clases (.NET Framework). Esto nos ayuda a exportar la actividad personalizada como un archivo
.dll. Selecciona Siguiente para ir a la ventana Configurar tu nuevo proyecto .
-
Rellena el campo Nombre del proyecto con el nombre de la actividad deseada. En nuestro caso, podemos utilizar "MathSquareOfSum".
-
Selecciona .NET Framework 4.6.1 en el menú desplegable de Framework . Esto garantiza que la biblioteca sea compatible con UiPath Studio.
Importante:En proyectos Windows: heredado, UiPath Studio admite actividades creadas con .NET Framework 4.5.2 a 4.6.1. Para obtener información sobre cómo migrar actividades a .NET para su uso en proyectos con la compatibilidad de Windows, consulta Migrar actividades a .NET 6.

-
Selecciona Crear para ir al diseñador de código y empezar a escribir el código de actividad.
-
En el panel Explorador de soluciones , haz clic con el botón derecho en la rama Referencias y selecciona Añadir referencia.... Se mostrará la ventana Gestor de referencias .
-
Busca las referencias
System.ActivitiesySystem.ComponentModel.Compositiony añádelas. Asegúrate de marcar la casilla situada delante de cada uno de ellos y haz clic en Aceptar. Esto nos permite utilizar clases de las referencias antes mencionadas.

-
Ahora, debemos asegurarnos de que nuestro código utiliza las referencias recién agregadas. Esto se hace añadiendo las siguientes líneas en el diseñador de código:
using System.Activities; using System.ComponentModel;using System.Activities; using System.ComponentModel;Nuestro proyecto debería tener ahora este aspecto:

-
Añade los parámetros de entrada y salida. En nuestro caso, el código debería tener este aspecto:
//Note that these attributes are localized so you need to localize this attribute for Studio languages other than English //Dots allow for hierarchy. App Integration.Excel is where Excel activities are. [Category("Category.Where.Your.Activity.Appears.In.Toolbox")] [DisplayName("Human readable name instead of class name")] [Description("The text of the tooltip")] public class MathSqSum : CodeActivity { //Note that these attributes are localized so you need to localize this attribute for Studio languages other than English [Category("Input")] [DisplayName("First Number")] [Description("Enter the first number")] [RequiredArgument] public InArgument<int> FirstNumber { get; set; } [Category("Input")] [DisplayName("Second Number")] [Description("Enter the second number")] [RequiredArgument] public InArgument<int> SecondNumber { get; set; } [Category("Output")] public OutArgument<int> ResultNumber { get; set; } protected override void Execute(CodeActivityContext context) { }//Note that these attributes are localized so you need to localize this attribute for Studio languages other than English //Dots allow for hierarchy. App Integration.Excel is where Excel activities are. [Category("Category.Where.Your.Activity.Appears.In.Toolbox")] [DisplayName("Human readable name instead of class name")] [Description("The text of the tooltip")] public class MathSqSum : CodeActivity { //Note that these attributes are localized so you need to localize this attribute for Studio languages other than English [Category("Input")] [DisplayName("First Number")] [Description("Enter the first number")] [RequiredArgument] public InArgument<int> FirstNumber { get; set; } [Category("Input")] [DisplayName("Second Number")] [Description("Enter the second number")] [RequiredArgument] public InArgument<int> SecondNumber { get; set; } [Category("Output")] public OutArgument<int> ResultNumber { get; set; } protected override void Execute(CodeActivityContext context) { }El atributo
<DisplayName(" ")>es la etiqueta que se muestra antes del campo de entrada en el panel Propiedades en Studio. El atributo<Description(" ")>es el texto de la información sobre herramientas que se muestra al pasar el ratón por encima.
El atributo
<ReguiredArgument>es necesario si quieres que un elemento declarado sea obligatorio para la entrada. Si no se rellena, aparece un icono de precaución en la barra de título de la actividad. -
Añade la funcionalidad en la función anulada
<Execute( )>. En nuestro caso, se ve así:protected override void Execute(CodeActivityContext context) { var firstNumber = FirstNumber.Get(context); var secondNumber = SecondNumber.Get(context); var result = (int)Math.Pow(firstNumber + secondNumber, 2); ResultNumber.Set(context, result); }protected override void Execute(CodeActivityContext context) { var firstNumber = FirstNumber.Get(context); var secondNumber = SecondNumber.Get(context); var result = (int)Math.Pow(firstNumber + secondNumber, 2); ResultNumber.Set(context, result); }
(Opcional) Crear una interfaz de diseñador
Si no desea que su actividad tenga una interfaz de diseñador, puede pasar a la sección Crear la biblioteca.
Para crear una interfaz de diseñador, debes tener instalado el componente Windows Workflow Foundation en Visual Studio. Si no has seleccionado el componente desde el instalador de Visual Studio, puedes añadirlo de la siguiente manera:
- En Visual Studio, haz clic en el menú Herramientas y selecciona Obtener herramientas y características.... Aparecerá la ventana del instalador de Visual Studio.
- Cambia a la pestaña Componentes individuales y busca el componente Windows Workflow Foundation . Se encuentra en la sección Actividades de desarrollo .
- Marca la casilla situada delante del componente Windows Workflow Foundation y haz clic en Modificar. El componente requerido se instala.

-
Haz clic con el botón derecho en el proyecto desde el panel Propiedades (en nuestro caso, el proyecto es MatemáticasCuadradoDeSuma). Aparecerá el menú contextual.
-
Desde Añadir elemento, selecciona Nuevo elemento.... Se mostrará la ventana Añadir nuevo elemento .
-
Selecciona Flujo de trabajo en la categoría Instalado en el panel izquierdo. Se muestran todos los elementos relacionados.
-
Selecciona Diseñador de actividades y haz clic en Añadir para incluir el elemento en el proyecto.

Se añade el elemento Diseñador de actividad y el archivo
.xamlcorrespondiente se abre de inmediato. Debería tener este aspecto:
-
Reemplaza el código del Diseñador de actividades existente por lo siguiente:
<sap:ActivityDesigner x:Class="MathSquareOfSum.MathSqSumDesigner" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation" xmlns:sapc="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation" xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation"> <a href="https://docs.uipath.com/es/sap:ActivityDesigner.Resources">sap:ActivityDesigner.Resources</a> <ResourceDictionary> <sapc:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" /> </ResourceDictionary> </sap:ActivityDesigner.Resources> <DockPanel Width="300"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="90"></ColumnDefinition> <ColumnDefinition Width="210"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="First Number"></TextBlock> <sapv:ExpressionTextBox Grid.Row="0" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="Enter first number" Expression="{Binding Path=ModelItem.FirstNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=In, Mode=TwoWay}" /> <TextBlock Grid.Row="1" Grid.Column="0" Text="Second Number"></TextBlock> <sapv:ExpressionTextBox Grid.Row="1" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="Enter second number" Expression="{Binding Path=ModelItem.SecondNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=In, Mode=TwoWay}" /> <TextBlock Grid.Row="2" Grid.Column="0" Text="Result"></TextBlock> <sapv:ExpressionTextBox Grid.Row="2" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="The sum of the numbers" UseLocationExpression="True" Expression="{Binding Path=ModelItem.ResultNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=Out, Mode=TwoWay}" /> </Grid> </DockPanel> </sap:ActivityDesigner><sap:ActivityDesigner x:Class="MathSquareOfSum.MathSqSumDesigner" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation" xmlns:sapc="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation" xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation"> <a href="https://docs.uipath.com/es/sap:ActivityDesigner.Resources">sap:ActivityDesigner.Resources</a> <ResourceDictionary> <sapc:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" /> </ResourceDictionary> </sap:ActivityDesigner.Resources> <DockPanel Width="300"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="90"></ColumnDefinition> <ColumnDefinition Width="210"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="First Number"></TextBlock> <sapv:ExpressionTextBox Grid.Row="0" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="Enter first number" Expression="{Binding Path=ModelItem.FirstNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=In, Mode=TwoWay}" /> <TextBlock Grid.Row="1" Grid.Column="0" Text="Second Number"></TextBlock> <sapv:ExpressionTextBox Grid.Row="1" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="Enter second number" Expression="{Binding Path=ModelItem.SecondNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=In, Mode=TwoWay}" /> <TextBlock Grid.Row="2" Grid.Column="0" Text="Result"></TextBlock> <sapv:ExpressionTextBox Grid.Row="2" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="s:Int32" HintText="The sum of the numbers" UseLocationExpression="True" Expression="{Binding Path=ModelItem.ResultNumber, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=Out, Mode=TwoWay}" /> </Grid> </DockPanel> </sap:ActivityDesigner>El nuevo diseño definido para la actividad debería tener este aspecto:

-
Haz clic con el botón derecho en la actividad (en nuestro caso ActMathSquareOfSum) y, en el menú Añadir , selecciona Clase.... Se mostrará la ventana Añadir nuevo elemento .
-
El elemento Clase ya está seleccionado. Todo lo que se necesita ahora es cambiarle el nombre a DesignerMetadata.cs y seleccionar Añadir. La nueva clase se añade ahora a la actividad y se abre en una nueva pestaña.

-
Añade el siguiente contenido en la clase DesignerMetadata recién creada:
using MathSquareOfSum; using System.Activities.Presentation.Metadata; using System.ComponentModel; namespace ActMathSquareOfSum { public class DesignerMetadata : IRegisterMetadata { public void Register() { AttributeTableBuilder attributeTableBuilder = new AttributeTableBuilder(); attributeTableBuilder.AddCustomAttributes(typeof(MathSqSum), new DesignerAttribute(typeof(MathSqSumDesigner))); MetadataStore.AddAttributeTable(attributeTableBuilder.CreateTable()); } } }using MathSquareOfSum; using System.Activities.Presentation.Metadata; using System.ComponentModel; namespace ActMathSquareOfSum { public class DesignerMetadata : IRegisterMetadata { public void Register() { AttributeTableBuilder attributeTableBuilder = new AttributeTableBuilder(); attributeTableBuilder.AddCustomAttributes(typeof(MathSqSum), new DesignerAttribute(typeof(MathSqSumDesigner))); MetadataStore.AddAttributeTable(attributeTableBuilder.CreateTable()); } } }