- 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 con código (heredado)
There are two major steps required to create a custom activity:
- Writing the custom activity code.
- Adding the external assembly (.dll) in UiPath.
Los siguientes componentes son necesarios para crear una actividad personalizada:
- Microsoft Visual Studio con la carga de trabajo de desarrollo de escritorio .NET instalada.
- Explorador de paquetes NuGet.
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.
- Haga clic en Archivo> Nuevo> Proyecto ... (atajo: Ctrl + Mayús + 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 #.
- Seleccione Biblioteca de clases (.NET Framework). Esto nos ayuda a exportar la actividad personalizada como un archivo
.dll
. Haz clic en Siguiente para ir a la ventana Configura tu nuevo proyecto . - Rellena el campo Nombre del proyecto con el nombre de la actividad deseada. En nuestro caso, podemos usar "MathS SquareOfSum".
- Selecciona .NET Framework 4.6.1 en el menú desplegable de Framework . Esto garantiza que la biblioteca sea compatible con UiPath Studio.
- Haz clic en Crear para ir al diseñador de código y empezar a escribir el código de la actividad.
- En el panel Explorador de soluciones , haz clic con el botón derecho en la rama Referencias y selecciona Agregar referencia .... Se mostrará la ventana Gestor de referencias .
-
Busque las referencias
System.Activities
ySystem.ComponentModel.Composition
y añádalas. Asegúrese de marcar la casilla frente a cada uno y hacer clic en Aceptar. Hacerlo nos permite usar clases de las referencias 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) { }
<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.
<ReguiredArgument>
es necesario si quieres que la entrada de un elemento declarado sea obligatorio. Si no está rellenado, aparece un icono de precaución azul en la barra de título de la actividad.
<Execute( )>
. En nuestro caso, tiene este aspecto:
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);
}
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, necesitas tener instalado el componente Windows Workflow Foundation en Visual Studio. Si no ha seleccionado el componente desde el instalador de Visual Studio, puede agregarlo de la siguiente manera:
- En Visual Studio, haz clic en el menú Herramientas y selecciona Obtener herramientas y características. Se mostrará 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 frente al componente Windows Workflow Foundation y haz clic en Modificar. Se instala el componente necesario.
13. Haga clic con el botón derecho en el proyecto desde el panel Propiedades (en nuestro caso, el proyecto es MathS SquareOfSum). Aparece el menú contextual.
14. En Añadir elemento, selecciona Nuevo elemento…. Se mostrará la ventana Añadir nuevo elemento .
15. Haga clic en Flujo de trabajo en la categoría Instalado en el panel izquierdo. Se muestran todos los elementos relacionados.
16. Seleccione Diseñador de actividades y haga clic en Añadir para incluir el elemento en el proyecto.
.xaml
correspondiente se abre de inmediato. Debería tener este aspecto:
17.Sustituya 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="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="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:
18. Haga clic con el botón derecho en la actividad (en nuestro caso ActMathS SquareOfSum) y, en el menú Añadir , seleccione Clase ... Se mostrará la ventana Añadir nuevo elemento .
20. 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());
}
}
}
Asegúrese de probar el proyecto en busca de errores antes de intentar crearlo.
MathSquareOfSum.dll
ahora se crea y se guarda en la siguiente ubicación:
%UserProfile%\source\repos\MathSquareOfSum\MathSquareOfSum\bin\Debug
Una vez que se crea la biblioteca, el panel Salida debe mostrar un mensaje como se muestra a continuación:
- Inicia el Explorador de paquetes NuGet y haz clic en Crear un paquete nuevo (Ctrl + N). Se muestra una ventana dividida que muestra los metadatos y el contenido del paquete. Necesitamos agregar todas las dependencias en esta última sección.
- Haz clic con el botón derecho dentro de la sección Contenido del paquete . Se muestra 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....
- Cargue el ensamblado externo (
.dll
) creado anteriormente. En nuestro caso, el archivoMathSquareOfSum.dll
se encuentra en la carpeta%UserProfile%\source\repos\MathSquareOfSum\MathSquareOfSum\bin\Debug
. - Con el archivo seleccionado, acceda al menú Editar y seleccione Editar metadatos. El panel izquierdo ahora está equipado con campos de metadatos editables.
- Fill in the fields as you see fit to better describe your custom activity.
-
Rellena el campo de identificación . En nuestro caso, puede ser UiPath.MathS Square.Activities, donde el primer valor, UiPath, significa el equipo que creó el paquete. Si no participó ningún equipo en particular, el primer valor se puede dejar en blanco.
- Haz clic en el botón de marca de verificación verde en la esquina superior izquierda de la sección Metadatos del paquete para guardar todos los cambios.
- En el menú Archivo , seleccione Guardar como .... Aparecerá una ventana del explorador que te permitirá elegir la ubicación del nuevo archivo.
- Guarda el archivo en la carpeta donde UiPath almacena los paquetes locales (
C:\Program Files (x86)\UiPath\Studio\Packages
en versiones anteriores a 2021.4 oC:\Program Files\UiPath\Studio\Packages
a partir de la versión 2021.4). El archivoUiPath.MathSquare.Activities.1.0.0.nupkg
ahora se crea en la carpetaUiPath.MathSquare.Activities
dentro de la carpeta de paquetes.
- Acceda al Administrador de paquetes desde Studio.
- Puesto que guardamos el paquete NuGet en la carpeta de paquetes locales, la actividad debería estar disponible en la fuente local .
- Busca la actividad y haz clic en Instalar y luego Guardar. La nueva actividad ya está instalada y se puede utilizar en sus proyectos de automatización.