Commands

Este documento descreve o funcionamento dos comandos Custom e de que forma pode o implementador criar comandos Custom além dos criados de base para todas as entidades.

Conceitos

No modelo Presentation é possível modelar diferentes tipos de Actions para cada view (ver Presentation Designer).

OperationMainAction

Corresponde a uma ação principal disponível no contexto de uma serviceOperation.

Estas ações principais serão representadas da mesma forma que as ações principais disponibilizadas automaticamente pela framework.

De base, a framework disponibiliza as ações Save e SaveAndNew.

A ação Save é disponibilizada nas operações de Update e nas operações de Create cujo serviço permita Update.

A ação SaveAndNew é disponibilizada em todas as operações Create.

OperationSecondaryAction

Corresponde a uma ação secundária disponível no contexto de uma serviceOperation.

Estas ações secundárias serão representadas com um aspeto distinto das ações principais, à esquerda das ações principais.

OperationContextAction

Corresponde a uma ação de contexto disponível no contexto de uma serviceOperation.

Estas ações de contexto serão representadas sobre a forma de menu por cima de um botão único no lado esquerdo da navegação, à esquerda das ações principais e secundárias.

As ações de contexto podem ter uma associação associada, definindo a opção de "generate command", ações, ou ser um pai de uma ou mais ações.

A operação pai de uma operação com Acão, é definida na propriedade “Parent Action”.

Personalização de Comandos

Com a modelação de comandos Custom são gerados métodos virtuais que o implementador deve fazer override de forma a definir o comportamento. Os métodos são gerados nos Controllers App (server side).

Exemplo de implementação de um comando principal (MainCommand)

  1. Na modelação, adicionar na service operation pretendida, o tipo de comando que se pretende: Main Action, Secondary Action ou Context Action.

    Service Operation

  2. Nas propriedades do comando, pode se definir:

    a) Caption - representa o texto que será apresentado ao utilizador;

    b) Generate Command – indica se o comando vai ter associado uma ação;

    c) Name - nome do comando;

    d) Parent Action - nome do comando pai, se é pretendido que o comando tenha um agrupador.

  3. No projeto Primavera..Services.Controllers, criar uma classe partial do Controller da entidade.

    Classe Partial do Controller da Entidade

    namespace Primavera.Sales.Services.Controllers
    {
        /// <summary>
        /// Invoice type Controller Custom Implementation.
        /// </summary>
        public partial class InvoicesAppController : InvoicesAppControllerBase
        {
    
  4. Nesta classe deve ser feito override ao método On. Por exemplo, se a ação adicionada tiver o nome SaveAndView deve ser feito override ao método OnSaveAndView.

    /// <summary>
    /// Saves the and view.
    /// </summary>
    /// <param name="id">The identifier.</param>
    /// <param name="version">The version.</param>
    /// <returns>
    /// Http Response Message.
    /// </returns>
    protected override HttpResponseMessage OnSaveAndView(Guid id, string version)
    {
        // TODO: Implement Custom Code Here.
    }
    
  5. Após a implementação do código Custom deve ser devolvido um objeto HttpResponseMessage com uma mensagem do tipo CommandAction com a seguinte estrutura:

    • ActionType: tipo da ação do comando. (Obrigatório)
      • o “navigate” – navega para uma nova operação
      • o “navigateToTab” – navega para uma nova operação num novo tabulador
    • ModuleName: nome do módulo da operação.
    • EntityName: nome plural da entidade da operação.
    • OperationName: nome da operação.
    • CompanyId: Id da company. (Obrigatório quando é uma entidade CompanyDependent)
    • CompanyKey: chave da company (Obrigatório quando é uma entidade CompanyDependent)
    • ShowMessage: (true|false) define se deve ser mostrado um toast antes da ação.
    • Message: resource key da mensagem a mostrar no toast.
    • MessageType: tipo da mensagem (‘success’ || ‘info’ || ‘error’ || ‘warning’)
    • Parameters: array de parâmetros a passar no URI

    Exemplo:

    CommandAction action = new CommandAction
    {
        ActionType = Primavera.Core.Services.CommandActionType.Navigate,
        ModuleName = "sales"
        EntityName = "invoices",
        OperationName = "editinvoice",
        CompanyId = new Guid(companyId),
        CompanyKey = companyKey,
        ShowMessage = true,
        Message = "core.controllers.RES_SaveSuccess_Toaster",
        MessageType = MessageType.Success,
        Parameters = new Dictionary<string, string> 
        { { "id", id.ToString() }, } 
    };
    

    Obter o companyId e o companyKey através dos métodos habituais.

  6. Esta CommandAction é interpretada por um serviço Angular (commandHandlerService).