Меню

Como elaborar suas próprias atividades (personalizadas)
Atividade (Activity) -uma instância descrevendo alguma ação que é realizada em uma etapa do script.
Contém uma descrição dos parâmetros de entrada e saída.


Carregar as atividades para o fluxo de trabalho
As atividades são entregues como DLLs. A lista de propriedade da classe ActivityManager contém uma lista de todas as Atividades carregadas no processo em execução no momento. Ao carregar, os arquivos com a tag "Activities.*.dll" são lidos a partir da pasta do projeto. Todas as classes que implementam a classe abstrata Activity são carregadas a partir do assembler.

Desenvolvimento
Um novo conjunto de atividades é desenvolvido em um novo projeto. O nome de um projeto com um conjunto de atividades começa com "Atividades".
A atividade é implementada através da classe abstrata BR.Core.Activity. A interface está contida na dll que vem com a plataforma Core.dll. Ela deve ser conectada ao projeto da atividade.
Todas as propriedades de atividade são descritas por atributos especiais.
Para implementar a atividade corretamente, é necessária uma implementação do método Execute (int? optionID).
A implementação específica da lógica da atividade precisa ser colocada em classes auxiliares separadas (ou outros projetos, se necessário).

É necessário selecionar uma biblioteca de classe para criar um projeto com atividades.

Ao selecionar uma plataforma alvo, o .NET Standart 2.0 deve ser selecionado, para que as atividades sejam compatíveis com qualquer versão do PIX. Se a API disponível no .NET Standart 2.0 não for suficiente para o desenvolvimento, você pode usar o .NET Core 3.1, mas então as atividades só serão compatíveis com a versão PIX 2.0 e superior.

Ao utilizar bibliotecas de terceiros (por exemplo, pacotes NuGet), a propriedade CopyLocalLockFileAssemblies deve ser adicionada ao arquivo do projeto, como mostrado no seguinte código de exemplo. Copie os arquivos das bibliotecas de terceiros junto com o arquivo de atividades para a pasta PIX.


Atributos
Os atributos são específicos da classe (Path, CanHasChilds, etc.), específicos da propriedade (IsRequired, IsOut, etc.) ou universais (ScreenName, Description, etc.). Versões localizadas desses atributos também existem. Estes atributos exigem o tipo de dados do recurso do projeto e o nome do recurso a ser inserido.

Separadamente, devemos descrever como funciona o atributo Ícone. Ele passa um URI para uma imagem, que está contida em uma montagem, projeto ou em qualquer lugar que possa ser referenciado. Um exemplo de implementação do atributo: [Ícone("pacote://aplicação:,,,/Core;componente/BaseAtividades/Icones/sleep.png")]]


Exemplos de atividades
1. dois números são dados como parâmetros de entrada. O resultado da atividade é a soma dos números.

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

namespace Activities.Custom
{
    [ScreenName("Сумма чисел")] // Имя активности, отображаемое в списке активностей и в заголовке шага
    [Representation("[FirstNumber] + [SecondNumber] = [Result]")] // Представление шага. Позиции в квадратных скобках заменяются значениями свойств.
    [Path("Custom activities")] // Путь к активности в панели "Активности"
    public class SummNumbers : Activity
    {
        [ScreenName("Число 1")] 
        [Description("Первое слагаемое")]
        [IsRequired]
        public int FirstNumber { get; set; }

        [ScreenName("Число 2")]
        [Description("Второе слагаемое")]
        [IsRequired]
        public int SecondNumber { get; set; }
        
        [ScreenName("Результат")]
        [Description("Результат сложения 2-х чисел")]
        [IsOut]
        public int Result { get; set; }


        public override void Execute(int? optionID)
        {
            Result = FirstNumber + SecondNumber;
        }
    }
}
2. Adicione um parâmetro com uma seleção de opções (a partir de uma lista suspensa).
Para fazer isso, o tipo de dados deve ser convertido em enumeração.
Como exemplo, vejamos a atividade para salvar dados de uma seção do Word.
A propriedade SaveFormat é apenas uma lista suspensa da qual você pode selecionar um valor.

O tipo é definido para enumerar:

No Studio, é o que parece: