sexta-feira, 21 de fevereiro de 2014

Trabalhando com atributos do tipo Blob no GeneXus

Geralmente quando precisa-se armazenar imagens em aplicações que trabalham com GeneXus optamos por utilizar atributos do tipo Blob. O GeneXus disponibilizará automaticamente o botão para seleção do arquivo, através de um pop-up, e fará automaticamente o armazenamento das informações no banco de dados após o encerramento da transação.

Os problemas começam quando precisamos carregar o registro para exibição. O atributo que contém a imagem muitas vezes é carregado sem extensão, exibindo um monte de caracteres aleatórios ou ainda não exibindo nada. Passei por isso recentemente e, procurando soluções, percebi que muita gente também passa pelo mesmo problema, mas pouca gente publica a forma de resolvê-lo, portanto, resolvi compartilhar esta dica que me ajudou muito.

1º passo: Entendendo as propriedades do atributo Blob.



Além das propriedades normais, os atributos do tipo Blob possuem algumas especificidades importantes. As três propriedades utilizadas na resolução do problema citado acima são:

FileType: responsável por definir uma extensão fixa aos arquivos. Ou seja, o GeneXus assumirá que todos os arquivos enviados possuem a mesma extensão, e no momento de carregá-los na tela, vai forçar a utilização desta extensão. Mas, e se precisarmos de um atributo que receba arquivos de vários tipos? A solução é a propriedade abaixo.

FileTypeAttribute: propriedade que permite carregarmos extensões diferentes para os arquivos. É necessário criar um atributo que receba a extensão do arquivo no momento do upload e informar este atributo nessa propriedade, assim, o GeneXus sempre vai buscar no atributo a extensão correta para carregar o arquivo.

FileNameAttribute: sempre que um atributo do tipo Blob é carregado em tela, o GeneXus busca o "arquivo" no banco de dados e carrega-o em uma pasta temporária, utilizando um nome aleatório. Se você precisar manter o nome original do arquivo é preciso fazer o mesmo esquema da propriedade anterior: cria-se um atributo que recebe o nome do arquivo no momento do upload, e informa-se ele na propriedade FileNameAttribute, assim, no momento de exibir o arquivo na tela, o GeneXus busca o nome correto no atributo informado.

2º passo: Armazenando a extensão e o nome do arquivo com Blob corretamente no GeneXus

Após criar seu atributo do tipo Blob, crie outros dois atributos para armazenar o FileType e o FileName do arquivo. No exemplo abaixo, o atributo Blob é "ProdutoImg", os atributos para armazenar as informações são "ProdutoImgFileType" e "ProdutoImgFileName". Sugere-se que os mesmos tenham os tipos VarChar(3) e VarChar(255), respectivamente, porém, pode-se adaptar isso conforme a necessidade.
 


Nas propriedades do atributo Blob, selecione os atributos que foram criados para armazenar as informações do arquivo. Veja o exemplo abaixo:



Ok, agora que o GeneXus já sabe aonde buscar os valores, vamos garantir que os atributos recebam as informações necessárias. Para isso, nas regras da transação, vamos usar os métodos ".FileType" e ".FileName" para extrair as informações no momento do upload e armazená-las nos atributos. Veja o exemplo abaixo:


ProdutoImgFileType = ProdutoImg.FileType on AfterValidate;
ProdutoImgFileName = ProdutoImg.FileName on AfterValidate;

Precisa ser obrigatoriamente no evento AfterValidate? Não. Mas fazer as atribuições no AfterValidate vai funcionar sempre neste caso. É possível usar outros eventos, mas lembre-se de que é preciso já ter a informação do arquivo para usar os métodos citados acima.

Se precisares trabalhar com essas informações em variáveis, sugiro consultar o post GeneXus - Capturar o Blob File Name, criado por de

Tem alguma sugestão, correção, ou conhece um jeito melhor de fazer tudo isso? Compartilhe conosco nos comentários, toda ajuda é bem-vinda! :)

Até logo!

Compartilhe este artigo:

segunda-feira, 10 de fevereiro de 2014

Você está pronto para ser Product Owner?



Agora que já estudamos um pouco mais sobre quem é e o que faz o Product Owner, é hora de pensar se temos as qualidades e habilidades necessárias para cumprir bem esta função. Portanto, separei algumas das características mais exigidas e procuradas por grandes empresas na descrição de cargos de Product Owner. Confira:
  • Visão: um bom Product Owner precisa entender e enxergar como será o produto entregue ao final do projeto para assim poder orientar o time;
  • Liderança: o PO (Product Owner) atua em um papel muito parecido com o de Gerente de Projetos, portanto, é preciso ter facilidade em guiar o time na direção correta;
  • Negociação: a principal função do PO é fazer a ligação entre o cliente, a empresa e o time Scrum, e isso exige negociação de prazos, requisitos, custos e tudo mais. Portanto, o PO precisa ser um bom negociador para agradar à todas as partes.
  • Experiência: para poder ter uma boa visão do projeto e responder as duvidas do time é extremamente aconselhável que o PO tenha experiência na área em que está atuando, assim, os prazos diminuem e o ruído na comunicação praticamente não existirá.
  • Comunicação: descrever requisitos de forma objetiva para o time e apresentar os recursos do produto de forma clara para o cliente são os desafios diários de um PO, portanto, a comunicação eficaz é indispensável. Afinal, quem quer um PO lento em um projeto ágil?
Então, será que você está pronto para encarar este desafio? Pensou em mais alguma característica que um Product Owner tem que ter? Então compartilhe conosco nos comentários, e não deixe de acessar os links abaixo para entender melhor o que se espera de um Product Owner!

How a Product Owner work
How to make a good Product Owner
How to be a Product Owner

Até mais!

Compartilhe este artigo:

terça-feira, 28 de janeiro de 2014

Você sabe quem é o Product Owner?

Se você faz parte de um time de desenvolvimento de software, provavelmente usa o Scrum no dia a dia, correto? Não? Tudo bem, a maioria das empresas não usa (ainda).



As maiores empresas de software do mercado já usam as boas práticas do Scrum em seus processos diários de desenvolvimento para aumentar a produtividade e agilizar a entrega de seus projetos, e em breve a sua empresa deve começar também (se você também está esbarrando na resistência das pessoas à mudança, este texto pode te ajudar).

Um papel muito importante do Scrum é o de Product Owner, a pessoa responsável por entender os requisitos do produto e fazer o meio campo entre o cliente e o time de desenvolvimento. A lista de tarefas deste papel é extensa, e realizar todas essas atividades com sucesso exige dedicação integral da pessoa para o time. Dentre as tarefas do Product Owner, estão:
  • Criar a visão do produto: imaginar como ele será quando estiver pronto e descrever o que o mesmo precisará atender;
  • Gerenciar o Product Backlog: adicionar e remover itens do Product Backlog, sempre mantendo-o atualizado e de acordo com o andamento do projeto;
  • Gerenciar o Plano de Liberações: artefato que define a ordem em que as funcionalidades do produto serão entregues.
  • Aprovar ou rejeitar as entregas: avaliar se o produto entregue atende os requisitos de aceitação, e recusá-lo sempre que necessário, pois é o Product Owner que apresentará o produto ao cliente, portanto, ele precisa estar certo de que a entrega cumprirá o prometido.
  • Manter os interessados atualizados sobre o projeto, envolvendo-os em reuniões sempre que necessário;
  • Gerenciar o orçamento do projeto, utilizando seus recursos para garantir que os prazos sejam cumpridos.
  • Estar presente nas reuniões do Scrum, pois sempre que o time possuir alguma dúvida sobre o produto deverá recorrer ao Product Owner para esclarecê-la.
Percebeu como o Product Owner chega muito próximo de ser um Gerente de Projetos?  Ele acaba sendo a referência para o time, e é responsável por garantir que o produto final seja entregue dentro do esperado, no tempo esperado e com o custo combinado.

Quer saber mais sobre a vida de Product Owner? Consulte os links abaixo:
Entendendo o papel de Product Owner
Mas o que faz um Product Owner?

Compartilhe este artigo:

domingo, 15 de dezembro de 2013

Conceitos básicos do BPMN



Olá pessoal, tudo bem?

Estive essa semana precisando relembrar alguns conceitos básicos de BPMN e encontrei um material muito legal no blog da iProcess que traz um passo a passo muito bem explicado sobre os conceitos básicos do BPMN. Veja abaixo os links dos materiais:

1 - Atividades e sequências
2 - Gateways
3 - Eventos de Início e Fim
4 - Eventos Intermediários
5 - Subprocessos
6 - Swimlanes e Artefatos

O material é bem completo e tem exemplos bem legais que facilitam a interpretação e visualização da aplicação dos conceitos básicos. Vale a pena conferir! Compartilhe este artigo: