segunda-feira, 21 de março de 2011

Acabou o nosso carnaval...

Como diria o Vinicius, saudades e cinzas foi o que restou... Apesar do sol gostoso na beira da praia, do calor, da tranqüilidade que ocorre após o tsunami do carnaval, a quarta-feira de cinzas foi de fato cinzenta.

Agora imagina você, um dia antes, com o notebook, olhando pela janela do apartamento, na beira da praia, vendo a folia, naqueles dias em que o barulho e a confusão toma conta de tudo, guerra de sprays pra todo lado, empurra-empurra, e você tentando se concentrar para terminar um determinado programa ‘urgente’. E de repente, pane total no computador. Inclua-se ai às velhas e inconvenientes questões relacionadas com backups não atualizados, HD que não dá sinal de vida, falta de chaves de fenda, e de um HD externo, e pra finalizar stress total pela perda de tudo,....

Bom isso foi parte do carnaval de 2011, mas ficaram boas lições que compartilho com vocês, e a principal é que é possível recuperar uma KB do Genexus mesmo na ocorrência de um pane total.

Recuperando uma KB de um HD externo

 
Primeiramente, é claro, deve-se instalar o sistema operacional, drivers, banco de dados, Genexus, chaves, ... e após tudo estar configurado corretamente iniciar a recuperação da Kb.

Como nesses casos dificilmente é possível iniciar o Windows através do HD danificado, a saída é tentar lê-lo externamente, e para isso é necessário que se tenha um cabo USB para colocar o HD, que no meu caso é do tipo e-Sata, e torcer para que via USB o HD dê algum sinal de vida. No meu caso esse sinal levou uns longos, estressantes, e angustiantes 30 minutos para ocorrer, isso porque ao conectar o HD na USB do note, nada aconteceu, parecia um processo de ressuscitação. Após um tempo começou a piscar o led do leitor e as duas partições existentes foram montadas com sucesso.

HD montado agora podemos começar a recuperar as informações mais importantes, e no caso das Kb´s sem backup, é necessário copiar a pasta inteira da Kb, para o novo HD. Atenção nesse momento porque é necessário reproduzir exatamente o caminho original do HD danificado, mesmo que você queira, posteriormente, migrar para outro local diferente. Por exemplo, se a pasta do HD danificado é a C:\Models, então no novo HD deve ser criada uma pasta com o mesmo nome e no mesmo disco C:.

Atenção! Se aparecer uma mensagem de que a pasta foi movida de lugar, ao final do processo, significa que você não está recriando a pasta alvo com as mesmas características (nome, localização) da pasta original, e nesse caso o processo fica mais complexo.

Todos os arquivos da Kb no HD danificado devem ser copiados para o HD novo, e no processo de cópia pode ocorrer de certos arquivos estarem fisicamente danificados. Alguns casos não prejudicam a integridade da Kb como um todo, como imagens, js, css, e arquivos semelhantes. Se isso ocorrer é possível copiar o mesmo arquivo de outras Kbs, para a nova Kb recuperada no HD Novo.

Uma vez reproduzida à imagem da pasta da Kb, faz-se necessário recriar o database no SQL Server, ou seja, abrir o Management e realizar a operação attach apontando para o arquivo MDF localizado na raiz da KB, se não houve problema de integridade o DB será recriado sem maiores problemas.

Recriado o DB, agora basta abrir a KB no Genexus e esperar que nenhuma configuração original tenha sido perdida, por arquivos não copiados. Mesmo com todo o dano do HD, foi possível recuperar várias Kb´s, no meu caso.

Realize imediatamente um Backup de suas kbs, utilizando a operação de exportação de objetos, e, por favor, faça isso com freqüência.

Ficaram algumas lições para o próximo carnaval
  1. Não leve o notebook pra praia
  2. Curta e descanse no carnaval, mas cuidado com a guerra de sprays
  3. Nunca deixe seu netinho de 7 meses brincar com seu notebook, porque uma única pancada do mouse na máquina, pode danificar o HD, mesmo que seja bonitinho vê-lo fazendo Gu-Gu-Gu.

quinta-feira, 3 de março de 2011

Não no lugar correto


Nessa vida ouvimos mais nãos que sims (como é o plural de sim? rs...), e me parece que isso vai fazendo com que fiquemos mais maleáveis com nossos erros. Com o não aprendemos os limites, nossos pais já diziam isso.

Mas o que isso tem a ver com Genexus! na prática um não no lugar correto produz resultados incríveis, e principalmente se utilizamos juntamente com o operador IN, então um NÃO EM, facilita muito a vida. Quem já dizia isso era o nosso amigo pHd no Post Genexus dos Sonhos, veja como o não é importante em nossa vida.

Vamos então ao que interessa. Em Genexus temos o operador IN que trabalha sob conjuntos, verificando se determinada informação está presente entre conjuntos. Nossa luta era saber o que não estava.

Por exemplo, no conjunto abaixo, temos um único item que existe nos dois conjuntos (K), e vários que não (A,B,C,d) no conjunto azul e (1, 2, # @ !) no outro conjunto.

 

Nas versões anteriores de Genexus tínhamos a possibilidade de informar um conjunto de dados de forma fixa, como os exemplos abaixo.

(1)
 
 
(2)
 
 
(3)
 
 
Com destaque para o for...each (3) que realiza uma pesquisa em um conjunto de dados previamente carregados em uma variável coleção,  por meio de constantes (1, 2, 3).

Na versão X surgiu o objeto Data Selector que permite gerar conjuntos dinâmicos a partir de consultas as tabelas do modelo, gerando boas possibilidades de programação. Tomemos por exemplo as transações abaixo.

E o Data Selector que encontra um Pais qualquer, passado através de um parâmetro.
Um comando for...each devolveria todos os clientes de um determinado pais, cujo identificador é 1.

(4)
 
E se nosso interesse fosse obter os clientes que não residem no Pais 1, teríamos então que adicionar um NÃO na conversa, conforme o modelo abaixo.

 
(5)
 

Concluindo

 
Esse recurso permite que se pesquisem situações bem interessantes, tais como:
  • Os clientes que não compraram nos últimos 6 meses
  • Os vendedores que não venderam no mês passado
  • Os funcionários que não chegaram no horário, 
E assim por diante, mesmo porque, por mais incrível que pareça, nós humanos, temos maior interesse no NÃO do que no SIM, por exemplo, qual é o chefe que gostaria de saber quais os funcionários chegaram no horário para dar um aumentozinho no salário de 30%? Se você conhece algum, me passa o email.

 
Links: