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)
-
Na modelação, adicionar na service operation pretendida, o tipo de comando que se pretende: Main Action, Secondary Action ou Context Action.

-
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.
-
No projeto Primavera.
.Services.Controllers, criar uma classe partial do Controller da entidade. 
namespace Primavera.Sales.Services.Controllers { /// <summary> /// Invoice type Controller Custom Implementation. /// </summary> public partial class InvoicesAppController : InvoicesAppControllerBase { -
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. } -
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.
- ActionType: tipo da ação do comando. (Obrigatório)
-
Esta CommandAction é interpretada por um serviço Angular (commandHandlerService).