How to?

Como criar um widget de raiz?

Criar um widget implica:

1º No modelo de serviços criar um "Service Operation" e um "Resource" para cada widget.

2º Nas propriedades do "Service Operation" e definir o tipo de operação, o tipo retornado e o resource. Exemplo:

Service Operation

3º No modelo de apresentação de um qualquer módulo (o que fizer mais sentido), a partir da toolbox, arrastar uma caixa do tipo "widget":

Toolbox - Widget

4º Preencher o nome do widget - este nome será usado para gerar o nome do controlador MVC e também do estado ui-router associado.

Widget

Widget

5º Transformar. Após a transformação será gerado o controlador MVC (no projeto .Web)

6º Fazer override ao método partial gerado no controlador MVC na pasta Custom (exemplo: AcpKpiWidget)

namespace Primavera.Sales.Web.Controllers
{
    /// <summary>
    /// ACP KPI widget controller.
    /// </summary>
    public partial class AcpKpiWidgetController
    {
        /// <summary>
        /// Called when [navigate to respective ui-router state].
        /// </summary>
        /// <returns>The respective view.</returns>
        protected override ActionResult OnShowAcpKpiWidgetView()
        {
            return this.View("~/Views/Sales/Custom/AcpKpiWidgetView.cshtml");
        }
    }
}

7º Criar a view razor (exemplo: AcpKpiWidget)

  • Neste caso reutilizou-se um componente da framework (pri-kpi-widget) com uma configuração especifica para o indicador de prazo médio de recebimento (acp).
  • O html desta view fica ao critério do developer, já que não é obrigatório reutilizar-se componentes base da framework.
  • Mais exemplos de widgets podem ser encontrados em:
    • $/Elevation3/FW/Prototyping/Development/Products/Primavera.JasminPremium/Host/Views/sales/Custom
@inherits System.Web.Mvc.WebViewPage

@{
    Layout = null;
}

<pri-kpi-widget operation='sales/indicatorService/getIndicatorByCode?code=acp'
title='caption'
value='value'
trend='trend'
conditions='[{"operator": 1,"value":0,"cssClass":"widget-grid-cell-conditions-two"},{"operator":0,"value":0,"cssClass":"widget-grid-cell-conditions-one"}]'>
</pri-kpi-widget>

8º Dentro do Manager da entidade fazer override da função da operação. Exemplo de operação:

public async override Task<QuantityCount> OperationRequestedAsync()
        {
            //para não dar warning
            await Task.Yield();

            //buscar a lista das agendas
            IDbSet<Agenda> agendaList = this.EntityContext.Agendas;

            //variavel para contar os requested
            int requested = 0;

            //para cada agenda
            foreach (var agenda in agendaList)
            {
                //se for requested
                if (agenda.StateList.Value == StateListEnumeration.Requested)
                {
                    //encontrou um requested
                    requested++;
                }
            }

            //criar a operação quantityCount para poder devolver
            QuantityCount quantityCount = new QuantityCount
            {
                Count = requested
            };

            //devolver o resultado obtido
            return quantityCount;
        }