How to?
Como modelar uma action para fazer download de um ficheiro?
Para modelar uma action que faz download de ficheiros é necessário seguir os seguintes passos:
- 1 - Modelar uma ServiceAction no modelo de Serviços
- 2 - Escolher o ResponseType da ServiceAction (o recomendado é "blob")
- 3 - Fazer override do método criado para a ServiceAction
- 4 - Usar a action numa View ou Operation no modelo de Apresentação
O exemplo seguinte demonstra a modelação de uma action para fazer download de um Report da Quotation através de um Button.
1 & 2 -Modelar Service Action

3 - Fazer override ao método gerado
protected override async Task<HttpResponseMessage> OnDownloadReportAsync(Guid id, [FromBody] string version)
{
// Get the printing service
Primavera.Core.ApplicationServices.IPrintingService printingService =
ApplicationService.Resolve<Primavera.Core.ApplicationServices.IPrintingService>();
//
System.IO.Stream stream = await printingService.PrintAsync("Sales", "Quotations", id.ToString(), "Sales_QuotationReport");
HttpResponseMessage response = this.Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StreamContent(stream);
response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf");
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "Quotation.pdf";
response.Content.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
return response;
}
Nota: neste exemplo, como é para fazer o download de um report, a stream vem do método printingService.PrintAsync, a stream pode vir de qualquer lado.
Importante: adicionar os headers à resposta tal como neste exemplo, o header ContentType deve ser definido de acordo com o tipo de ficheiro.
4 - Utilizar service action numa editor view

A Service Action também pode ser utilizada em Secondary & Context Actions:
