segunda-feira, 6 de maio de 2013

Tutorial utilizando Google Script - Calendário

O Google Apps Script é uma linguagem utilizada em desenvolvimento de aplicações onde podemos integrar os serviços do Google Apps.
Essa ferramenta do Google permite integrar vários serviços do google, ou seja com ele é possível criar pequenos projetos ou pequenos programas, utilizando as APIs Google.
Vou mostrar aqui exemplo simples de utilização do Google Script, exibindo uma lista de eventos cadastrados no google Calendário , ou Agenda.
Vou extrair dados do Calendário, salvar em uma planilha existente no Google Drive e também enviar uma copia dos dados extraídos para meu e-mail, tudo isso em poucas linhas de código.
Primeiramente, entre no seu Google Drive, crie uma Planilha chamada “calendario” e renomeie a pagina ( Sheet ) para 'ListaCalendario'.
Em seguida, crie as seguintes colunas ‘Descricao do evento’, data inicial e data final dos eventos, conforme a imagem abaixo.
Depois de criar as colunas, clique no canto direito, em Compartilhar e copie o link de compartilhamento gerado, onde iremos utilizar para acessar a planilha.
Feito isso, agora vamos criar nosso Google Script, e extrair os dados do calendário.
Novamente entre no Google Drive - Criar , e seleciona a opção Script, e crie um projeto em branco, conforme a imagem abaixo:
copie o conteudo abaixo no script criado.

Lembrando que ao executar o código abaixo, o google script exige que seja autorizado a execução do mesmo.

function doGet() {
 
  // aqui vai o endereço da planilha compartilhada na web.
  var sh = SpreadsheetApp.openByUrl(" ");
     
  // recupera os valores das células da primeira linha da planilha
  var calName = sh.getRange("A1").getValue();
  var date_deb = sh.getRange("B1").getValue();
  var date_fin = sh.getRange("C1").getValue();
 
  // acessa a API do Google Calendar utilizando o nome do calendário
  // informe aqui o nome da sua agenda.
  var cal = CalendarApp.openByName("");
 
  // procura os eventos do calendário utilizando as datas recuperadas da planilha
  var events = cal.getEvents(new Date(date_deb), new Date(date_fin));
 
  //Limpa os dados da primeira pagina, e grava com os dados atualizados.
  sh.getSheetByName('ListaCalendario').clear();
 
  //após limpar a pagina, incluir a primeira linha novamente.
  sh.appendRow([calName, date_deb, date_fin] );
  var todosEventosEmail = null;
 
  // percorre o array de eventos
  for (var i = 0 ; i < events.length ; ++i) {
   
    // para cada evento, é inserido uma linha na tabela excel
    var event = events[i];
   
    var row = sh.getLastRow()+1;
    // escreve o título na coluna A
    sh.getRange("A"+row).setValue(event.getTitle());
    // a data de início na coluna B
    sh.getRange("B"+row).setValue(event.getStartTime());
    // a data do final do evento na Coluna C
    sh.getRange("C"+row).setValue(event.getEndTime());
    todosEventosEmail = todosEventosEmail+ event.getTitle()+",";
   
  }
 
  // informe o email desejado.
  MailApp.sendEmail(" ", "Agenda",todosEventosEmail);
   
}

a imagem abaixo mostra as atividades na agenda, no dia 06/05/2013

abaixo a planilha gerada a partir do google script.



bom , a idéia é mostrar como podemos explorar as ferramentas e APIs Google disponíveis.

Ate a próxima.

sexta-feira, 12 de abril de 2013

solução do problema na atualização windows 7 KB2823324

Ola pessoal,

No dia 10/04/2013, após atualizar o windows 7, meu windows não iniciou mais...... 
a principio, achei que poderia ser algum problema de hardware, ou memória, HD, sei la... achei estranho. bom, logo fiquei sabendo que a microsoft lançou uma atualização de segurança do windows 7 (KB2823324), e que não era só eu que tinha tido o problema.

bom, ate então não estava conseguindo reverter a situação, ou recuperar a falha na inicialização, até que encontrei no site da microsoft um passo a passo onde explica como proceder na recuperação,  resultado : deu certo, e não precisei formatar.. uffa  rs 

segue abaixo o vídeo com a explicação de Vinícius Apolinario


o link com mais detalhes : http://www.microsoft.com/brasil/resolucao/ 


segunda-feira, 31 de dezembro de 2012

Feliz Ano Novo - 2013 ano da sorte

Quero registrar aqui, meus sinceros votos de um ótimo ano de 2013 para todos, que 2013 seja realmente o ano da sorte para todos nós, com muita saúde, sucesso profissional e que todos os objetivos traçados sejam alcançados.

Feliz 2013 !!

segunda-feira, 19 de novembro de 2012

Exemplo Simples em C# para Locadora

Segue um simples exemplo para o inicio de um sistema de locadora.
Abaixo a classe Filme, com os campos Id e Nome, e campos somente para ilustrar a entidade.
Entidade de cliente.
 Em seguida , temos a entidade Locacao, com a entidade Cliente como chave estrangeira ( FK )e por fim , e entidade responsável para gravar os filmes de uma locação. no qual possui como chave estrangeira o Filme, e a Locação.
Esse é um exemplo simples de um sistema para locadora, a idéia foi somente criar o modelo mesmo e  demonstrar na prática a criação das classes.
segue o video com a implementação do exemplo
 

ate o próximo post.

quinta-feira, 15 de novembro de 2012

Criando uma classe para gerar dados formatado para o SPED

O projeto SPED da receita federal, é um projeto grandioso que se encontra em constante crescimento e aperfeiçoamento. Com isso é importante que seja pensado e desenvolvido uma estrutura estável e de fácil manutenção, não comprometendo o funcionamento e geração das informações.

Bom criei a classe abaixo, com o objetivo de gerar os registros do sped de uma forma que fique fácil as alterações e fácil entendimento também.
A idéia é que todas as classes herdadas de EFDBase gerem os dados formatados e prontos para a geração do arquivo.
por exemplo, gerando registro 0990:

string Resultado = new Reg0990() { Id="0990|"+efd.getTotalBloco0()}
Resultado : |0990|10|

Na classe EFDBase tambem será responsável por percorrer a classe e pegar todas as propriedades e montar o resultado automaticamente, através do método PercorrePropriedadesGeraLinha();

Eu sobrescrevi o método ToString(), e chamei o método PercorrePropriedadesGeraLinha(), para gerar a linha formatada, assim consigo retornar o objeto no formato separado por “|”



Na classe abaixo, criei o primeiro registro do SPED.
para utilizar e retornar o registro0000 formatado, é só fazer o seguinte:

new Reg0000() { Data = "20121115" };

no exemplo coloquei somente 1 campo, porem, na utilização é só informar campo a campo, que ao instânciar o objeto, o retorno será o próprio registro formatado , ou seja, separado por pipe : |0000|20121115|


Bom essa é só uma breve introdução, para a implementação do projeto SPED.

sábado, 20 de outubro de 2012

ExtJs 4, Visual Studio 2010, C#, Modelo Pronto

ExtJs 4 ? Conhece ? se não , aqui está uma oportunidade para conhecer esse excelente framework Java script.

Bom, EXTJS é um framework Java Script com recursos para o desenvolvimento de aplicações web com diversos componentes para que possamos criar uma aplicação web com recursos RIA – Rich Internet Application, ou seja, com o Ext, é possível criar aplicações com menus, formulários, datagrids, trees, etc.

Trago pra vocês um exemplo básico com a uma estrutura básica necessária para se iniciar a desenvolver em C# e EXTJS.

O exemplo pode ser acessado em http://renatodavis.com/
Os fontes podem ser baixados em https://github.com/renatodavis/ErpSystem

Espero com gostem,
Ate o próximo post.


quinta-feira, 18 de outubro de 2012

Criando um cadastro padrão ( genérico ) em Delphi

Vamos criar um formulário padrão com o objetivo de utiliza-lo genericamente como base para outros cadastros no sistema.
Primeiro criamos um novo formulário e adicionamos os componentes conforme  abaixo :

TSQLQuery => SqlCadastro
TDataSetProvider => dspCadastro
TClientDataSet => cdsCadastro
TDataSource => dsCadastro
TSQLQuery => SqlMax ( utilizada para buscar o próximo código a ser cadastrado, caso precise).

Incluímos também os botões, Novo, Excluir,Gravar, Cancelar e Fechar, e um painel com um Label para ser utilizado como uma área de mensagens de erros.


Vamos para a programação:

No evento OnKeyDown do Formulário vamos fazer a seguinte programação:
Procedure TFormPadrao.FormKeyDown(Sender: TObject; Var Key: Word;   Shift: TShiftState);
begin
   case Key of
      VK_F2: if btnGravar.Enabled then btnGravar.Click;
      VK_F3: if btnExcluir.Enabled then btnExcluir.Click;
      VK_F5: if btnNovo.Enabled then btnNovo.Click;
      VK_F6: if btnFechar.Enabled then btnFechar.Click;
      VK_F9: if btnCancelar.Enabled then btnCancelar.Click;
      VK_RETURN :SelectNext(ActiveControl,true,true);
      VK_ESCAPE :close;
   end;
End;

O código acima faz com que cada tecla(atalho) especificada seja atribuído ao evento do seu respectivo componente.
Exemplo (VK_ESCAPE) : ao teclar a tecla ESC o sistema irá executar o comando “close”, fechando o formulário.

Ok, agora vamos para a programação dos botões:

      btnNovo :
procedure TFormPadrao.btnNovoClick(Sender: TObject);
begin
  cdsCadastro.Append;
end;

btnExcluir :

procedure TFormPadrao.btnExcluirClick(Sender: TObject);
begin
   if not messagedlg('Deseja excluir o registro atual?',mtConfirmation,[mbYes,mbNo],0)= mrNo then Exit;
   cdsCadastro.Delete;
   { caso a delecao nao aconteca o metodo "ApplyUpdates" irá retornar um valor
   maior que zero, dai o evento "ReconcileError" será ativado e irá ser
   mostrada uma msg para o usuário }
   if cdsCadastro.ApplyUpdates(0) > 0 then
   begin
      cdsCadastro.CancelUpdates;
      Foco(2);
   End;
end;

          btnCancelar :

procedure TFormPadrao.btnCancelarClick(Sender: TObject);
begin
    cdsCadastro.Cancel;
   cdsCadastro.CancelUpdates;
end;

           btnSalvar:

procedure TFormPadrao.btnGravarClick(Sender: TObject);
begin
{ posiciona o cursor no próximo controle ativo. Isto é feito para garantir que, o foco sai do campo ativo, caso o usuário use teclas de atalho para gravar o registro (F2) }
   SelectNext(ActiveControl, True, True);
{ somente irá passar para a rotina de gravacao se estiver      inserindo/alterando algo }
   if not (cdsCadastro.State in [dsEdit, dsInsert]) then Abort;
//se todos os campos obrigatorios estiverem preenchidos, irá gravar os buffer no BD
   if not ValidaPreenchidos(cdsCadastro) then Abort;
   //grava
   cdsCadastro.Post;

   { caso ocorra algum erro na gravacao do registro, o estado continuará
   sendo o de edicao... e uma msg será mostrada ao usuário }
   if cdsCadastro.ApplyUpdates(0) > 0 then
   begin
      //mantem o registro em modo de edição
      cdsCadastro.Edit;
      Abort;
   end;
end;
          btnFechar:
procedure TFormPadrao.btnFecharClick(Sender: TObject);
begin
   close;
end;

Bom com os códigos acima, nosso cadastro padrão servirá como base para a criação de outros cadastros.