Dúvida sobre padrão para upload de arquivo Excel com save() de Command Object
11/06/2013 21:20
0
Boa noite pessoal. Estou recorrendo mais uma vez ao grupo do fórum para uma análise sobre uma regra de negócio que estou implementando.

Tenho um conceito no meu negócio de operação que envolve muitas Domains, para isso criei um Command Object para trafegar os valores entre minha camada de view e o servidor.

Quero implementar um sistema de cadastro, que funciona por upload de um arquivo em excel, ou seja ele lê o arquivo, vai na primeira linha e popula um objeto para mim. Consegui fazer a leitura dele normalmente e popular um obj. que criei. Até aí sem problemas.
* Esta leitura é realizada em uma service.

Pensei em popular o Command OBject, fazer a validação e depois de criar esta lista de CO*, se nenhum possuir erros, eu salvo eles no banco e devolvo a mensagem de sucesso para o usuário.

Queria saber se alguém já desenvolveu isto, e como foi que realizou esta atividade, apesar dela estar bem encaminhada, não tenho muita certeza se esta é a forma mais adequada (acessar o CO pela service).

Esta é a minha service:


class UploadService {

def workbook
ExcelBuilder builder = new ExcelBuilder()

/**
* Método responsável por fazer a leitura do arquivo de excel
* e popular o Command Object
* @param file
* @return
*/
def readExcel(CommonsMultipartFile file){

switch (file.contentType) {

case "application/vnd.ms-excel":
workbook = readFileXls(file)
break;
case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":
workbook = readFileXlsx(file)
break;
}

try{
builder.ExcelBuilderXLS(workbook).eachLine([labels:true]) { workbook ->
//Aqui é onde populo e valido meus objetos e armazeno em uma lista em caso positivo, se houver algum erro, ele devolve a mensagem para o usuário
}
}catch(Exception ex){
throw new RuntimeException(ex.printStackTrace(), ex)
}


Desde já agradeço as respostas
Tags: command objects, domain, service, controller, excel, upload


0
Olá, Eduardo.

IMHO: Se você tem certeza que a quantidade de tipos de arquivos não for aumentar não vejo problema nesse switch case.

Mas se a quantidade de tipos se tornar grande um dia eu sugeriria criar um arquivo ".properties" e usar o "reflection" do Groovy para evitar "ifs" e "switchs".

Abraços.


0
Obrigado pelo comentário Yoshi.

Só não tenho certeza de devo utilizar um command object mesmo ou criar um POJO para fazer validação dos dados. Estou em dúvida quanto a isso.


0
Olá, Eduardo.

Estou iniciando no mundo Grails :).

Estou em um projeto que tenho que realizar importação de dados excel para meu banco de dados.

Será que vc pode compartilhar as classes que vc esta usando para realizar sua importação?

Desde já agradeço.
28/06/2013 02:55


0
Fala Irineu! Blz?

Para fazer a importação eu estou usando o plugin excel-import. Usa ele, bem intuitivo. Só que ele tem um bug, ao menos na versão 2.1.1 para importar arquivos xlsx, mas pra xls funcionar perfeitamente. Vou até reportar esse bug no fds.

Abs cara. Qualquer dúvida sobre isso só ir respondendo por aqui, que assim que possível eu respondo.


0
Bom dia Eduardo!

Primeiramente obrigado pelo rápido retorno :)

O método readFileXls, que vc adicionou no seu exemplo acima é desse plugin?

Vc poderia me enviar os exemplos que vc tem?
28/06/2013 13:34



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto