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:

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":

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.


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;
}