Меню

Desarrolle sus propias actividades (personalizadas)
Una Actividad es una instancia que describe alguna acción que se realiza en un paso del script.
Contiene una descripción de los parámetros entrantes y salientes.


Carga de actividades en un flujo de trabajo
Las actividades se entregan como un DLL. Una lista de todas las Actividades cargadas al proceso actualmente en ejecución se encuentra en la propiedad List de la clase estática ActivityManager. Cuando se cargan, los archivos con la etiqueta "Activities.*.dll" se leen desde la carpeta del flujo de trabajo. Todas las clases que implementan la clase Activity se cargan desde el ensamblaje.
Visualización de Pasos con Actividad Personalizada No Reconocida
Si un script contiene un paso con una actividad no estándar (personalizada) para la cual no existe un archivo de librería en el directorio de PIX Studio, el paso aparece ahora en el script como no reconocido (!) y es nombrado "Actividad faltante o inválida".


Desarrollo
Un nuevo conjunto de actividades se desarrolla en un nuevo proyecto. El nombre de un proyecto con un conjunto de actividades empieza por "Actividades".
Activity se implementa a través de la clase BR.Core.Activity. La interfaz se encuentra en la dll que viene con la plataforma: Core.dll. Debe conectarse al proyecto de la actividad.
Todas las propiedades de la actividad se describen mediante atributos especiales.
Para implementar la actividad correctamente, se requiere una implementación del método Execute (int? optionID).
La implementación específica de la lógica de la actividad, necesita ser puesta en clases auxiliares separadas (u otros proyectos si es necesario).

Es necesario seleccionar una biblioteca de clases para crear un proyecto con actividades.

Al seleccionar una plataforma de destino, se debe seleccionar .NET Standart 2.0, por lo que las actividades serán compatibles con cualquier versión de PIX. Si la API disponible en .NET Standart 2.0 no es suficiente para el desarrollo, puede utilizar .NET Core 3.1, pero entonces las actividades solo serán compatibles con la versión 2.0 y superiores de PIX.

Cuando se utilizan bibliotecas de terceros (por ejemplo, paquetes NuGet), la propiedad CopyLocalLockFileAssemblies debe añadirse al archivo de proyecto como se muestra en el código de ejemplo a continuación. Copie los archivos de bibliotecas de terceros junto con el archivo de actividad en la carpeta PIX.


Atributos
Los atributos son específicos de la clase (Path, CanHasChilds, etc.), específicos de la propiedad (IsRequired, IsOut, etc.) o universales (ScreenName, Description, etc.). También existen versiones de localización de estos atributos. Estos atributos requieren que se introduzcan el tipo de datos del recurso del proyecto y el nombre del recurso.

Por separado, debemos describir cómo funciona el atributo Icono. Pasa un URL de una imagen contenida en un ensamblado, proyecto o cualquier otro lugar al que se pueda hacer referencia. Un ejemplo de implementación del atributo: [Icon("package://application:,,,/Core;component/BaseActivities/Icons/sleep.png")]

Ejemplos de actividades
1. Se dan dos números como parámetros de entrada. El resultado de la actividad es la suma de los números.

using BR.Core;
using BR.Core.Attributes;

namespace Activities.Custom
{
    [ScreenName("Suma de los números")] // El nombre de la actividad aparece en la lista de actividades y en la cabecera de los pasos
    [Representation("[FirstNumber] + [SecondNumber] = [Result]")] // Representación de los pasos. Las posiciones entre corchetes se sustituyen por los valores de las propiedades.
    [Path("Custom activities")] // Ruta a la actividad en el panel "Actividades"
    public class SummNumbers : Activity
    {
        [ScreenName("Número 1")] 
        [Description("Primer sumando")]
        [IsRequired]
        public int FirstNumber { get; set; }

        [ScreenName("Número 2")]
        [Description("Segundo sumando")]
        [IsRequired]
        public int SecondNumber { get; set; }
        
        [ScreenName("Resultado")]
        [Description("El resultado de sumar los 2 números")]
        [IsOut]
        public int Result { get; set; }


        public override void Execute(int? optionID)
        {
            Result = FirstNumber + SecondNumber;
        }
    }
}
2. Añada un parámetro con varias opciones (de una lista desplegable).
Para ello, el tipo de datos debe convertirse en enum.
Como ejemplo, veamos la actividad para guardar datos de una sección de Word.
La propiedad SaveFormat no es más que una lista desplegable en la que se puede seleccionar un valor.

El tipo se establece como enum:

En el Studio, se ve así:

Cambiar el icono de actividad
El atributo Imagen especifica el icono que aparece junto al nombre de la actividad en Studio.

Пример иконки
Vamos a añadir un icono a nuestra actividad desarrollada "Suma de números".
Para ello, siga los pasos que se indican a continuación:
1. Descargue una imagen del icono deseado. Elija preferentemente iconos en formato 1:1 (cuadrado), 16 por 16 píxeles, 32 por 32 píxeles, etc.

Icono de actividad
2. Guarde el icono en el archivo de proyecto de su actividad. Para ver la ubicación del proyecto, haga clic con el botón derecho en el nombre del proyecto en el panel Explorador de soluciones y seleccione "Abrir carpeta en el explorador" en el menú contextual.

Cómo abrir la carpeta del proyecto
3. Resalte el icono cargado en el navegador de soluciones, haga clic con el botón derecho y seleccione "Propiedades". En la ventana de propiedades, para el parámetro "Acciones de construcción", seleccione "Recurso implementado" en el menú desplegable.

Parámetro "Recurso implementado"
4. Añade un atributo Image especificando la ruta a la imagen en el proyecto y en la clase pública: [Image(typeof(<indicacionclasepublica>), "<nombredelproyecto>.<nombredelarchivoicon>")]

[Image(typeof(SummNumbers), "Activities.Custom.sum.png")]
La actividad tiene ahora su propio icono.
Ubicación
Para que los nombres de las propiedades y otros campos de texto de actividad de la interfaz de Studio cambien en función del idioma seleccionado, proceda del siguiente modo
1. Introduzca las propiedades del proyecto haciendo clic en el nombre del proyecto en la barra de Solution Mapper y seleccione Propiedades en el menú contextual.

Ir a las propiedades del proyecto
2. En la ventana "Propiedades" que se abre, seleccione "Recursos" en la parte izquierda y haga clic en "Abrir o crear recursos". Se creará y abrirá el archivo Resources.resx.

Crear un recurso
3. En este fichero en la columna "Nombre" hay que escribir los nombres de las variables que almacenarán los nombres de las propiedades de la actividad, por ejemplo el nombre de la propiedad para introducir el primer número se recomienda que sea Nombre_Pantalla_1, para el segundo número Nombre_Pantalla_2, etc.

Resourses.resx
4. Realice los siguientes cambios en el código:
sustituya ScreenName() por LocalizableScreenName("<Nombre de variable en el archivo Resources.resx>", typeof(Resources)). Esta línea permite seleccionar las firmas de propiedad necesarias del archivo Resourses.resx.

using Activities.Custom.Properties;
using BR.Core;
using BR.Core.Attributes;

namespace Activities.Custom
{
    [LocalizableScreenName("SummNumbers_ScreenName", typeof(Resources))] // El nombre de la actividad aparece en la lista de actividades y en la cabecera de los pasos
    [Representation("[FirstNumber] + [SecondNumber] = [Result]")] // Representación del paso. Las posiciones entre corchetes se sustituyen por los valores de las propiedades.
    [Path("Custom activities")] // Ruta a la actividad en el panel "Actividades"
    [Image(typeof(SummNumbers), "Activities.Custom.sum.png")] //Icono de actividad
    public class SummNumbers : Activity
    {
        [LocalizableScreenName("Number_1_ScreenName", typeof(Resources))]
        [Description("Primer sumando")]
        [IsRequired]
        public int FirstNumber { get; set; }

        [LocalizableScreenName("Number_2_ScreenName", typeof(Resources))]
        [Description("Segundo sumando")]
        [IsRequired]
        public int SecondNumber { get; set; }

        [LocalizableScreenName("Result_ScreenName", typeof(Resources))]
        [Description("El resultado de sumar los 2 números")]
        [IsOut]
        public int Result { get; set; }


        public override void Execute(int? optionID)
        {
            Result = FirstNumber + SecondNumber;
        }
    }
}
5. Cambia el nombre del fichero de código resaltando el nombre de la clase (en este caso SummNumbers), pulsa Ctrl + punto. En el menú que aparece, seleccione Renombrar Archivo a ....

Cambiar el nombre de un archivo
6. Para localizar el español, cree un archivo de recursos adicional. Para ello, haga clic con el botón derecho del ratón en "Propiedades" del "Navegador de soluciones", luego en "Añadir" y, por último, en "Crear elemento".
7. Seleccione "Archivo de recursos" y, en la parte inferior de la ventana, escriba el nombre del nuevo archivo: Resourses.en.resx.

Creación de un archivo de recursos
8. Copie los nombres de las variables del archivo Resources.resx en el archivo Resources.en.resx y escriba los nombres correspondientes en español.

Archivo Resources.es.resx
9. Construya el código, sustituya los archivos dll necesarios por los nuevos. Copie también el archivo Activities.Custom.resourses.dll de la carpeta een a la carpeta En donde está instalado Studio (PIX/Es).
Ahora, al cambiar de idioma en Studio, los nombres de las propiedades de nuestra actividad también cambiarán.

Vista de las propiedades de la actividad en la versión en español del Studio