quarta-feira, 1 de outubro de 2014

WorkShop 01 - Preactor API

Resolução workshop 01:

Irei mostrar a resolução do workshop em tópicos, seguindo uma sequencia lógica de trabalho, ok?

1º - Dentro de meu projeto Olá Mundo, eu criei uma classe contendo exatamente as mesmas propriedades do arquivo CSV:
 public class Apontamento
    {
        private string _ordem;
        private string _recurso;
        private string _status;
        private DateTime _dataDeInicio;
        private DateTime _dataDeFim;

        public string Ordem
        {
            get { return _ordem; }
            set { _ordem = value; }
        }

        public string Recurso
        {
            get { return _recurso; }
            set { _recurso = value; }
        }

        public string Status
        {
            get { return _status; }
            set { _status = value; }
        }

        public DateTime DataDeInicio
        {
            get { return _dataDeInicio; }
            set { _dataDeInicio = value; }
        }

        public DateTime DataDeFim
        {
            get { return _dataDeFim; }
            set { _dataDeFim = value; }
        }

        public override bool Equals(object obj)
        {
            if (obj is DBNull) return false;
            if (obj == null) return false;
            var m = (Apontamento) obj;
            return m.Ordem == _ordem;
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
    }
2º Criei uma função para ler os dados do arquivo CSV e passar os valores para uma lista de Apontamentos:
 private IList getApontamentosByFileCSV(string pathFile)
        {
            try
            {
                IList apos = new List();

                if (!File.Exists(pathFile))
                {
                    MessageBox.Show("O arquivo de Apontamento não foi encontrado.");
                    return new List();
                }
                StreamReader rd = new StreamReader(pathFile, Encoding.Default);
                try
                {
                    var count = 0;
                    while (!rd.EndOfStream)
                    {
                        count++;
                        var linha = rd.ReadLine();
                        if (count == 1) continue;
                        if (string.IsNullOrEmpty(linha)) continue;

                        var colunas = linha.Split(';');
                        Apontamento iten = new Apontamento();
                        iten.Ordem = colunas[0];
                        iten.Recurso = colunas[1];
                        iten.Status = colunas[2];
                        iten.DataDeInicio = parseDate(colunas[3]);
                        iten.DataDeFim = parseDate(colunas[4]);

                        apos.Add(iten);
                    }
                }
                catch (Exception)
                {
                    throw;
                }
                finally
                {
                  rd.Close();  
                }


                return apos;
            }
            catch (Exception ex)
            {
                throw new Exception("Falha ao recuperar os dados do arquivo CSV:" + Environment.NewLine + ex.Message);
            }
        }
3º Criei um método que faz a comunicação com o Preactor, recebe a lista de apontamentos baseado no arquivo CSV e grava na tabela do Preactor:
OBS: a diferença entre este novo método e o OláMundo (Run) é um novo parâmetro que foi adicionado a função, "ref string arquivo". Eu achei essa forma mais simples configurar o nome e local onde o arquivo csv se encontra, mas você poderia também ter deixa o caminho e nome do arquivo fixos em seu projeto, ok?


 public int ImportApontamento(ref PreactorObj preactorComObject, ref object pespComObject, ref string arquivo)
        {
            IPreactor preactor = PreactorFactory.CreatePreactorObject(preactorComObject);
            try
            {
                //RECUPERAR OS DADOS DO ARQUIVO CSV
                IList itens = getApontamentosByFileCSV(arquivo);
                if (itens.Count == 0) return 0;

                //LIMPAR TABELA DE APONTAMENTOS
                preactor.Clear("Apontamento");

                preactor.DisplayStatus("Apontamentos","Importando arquivos de apontamentos.");
                var count = itens.Count;
                var i = 0;
                preactor.UpdateStatus(i, count);
                //INSERIR O GRUPO DE REGISTROS
                foreach (var iten in itens)
                {
                    i++;
                    preactor.UpdateStatus(i, count);
                    //CRIAR UM NOVO REGISTRO NA TABELA DE APONTAMENTOS
                    int record = preactor.CreateRecord("Apontamento");

                    //ESCREVER NA TABELA APONTAMENTOS
                    preactor.WriteField("Apontamento", "Ordem", record, iten.Ordem);
                    if (!string.IsNullOrEmpty(iten.Recurso))
                        preactor.WriteField("Apontamento", "Recurso", record, iten.Recurso);
                    if (!string.IsNullOrEmpty(iten.Status))
                        preactor.WriteField("Apontamento", "Status", record, iten.Status);
                    if (iten.DataDeInicio != DateTime.MinValue)
                        preactor.WriteField("Apontamento", "Data de Início", record, iten.DataDeInicio);
                    if (iten.DataDeFim != DateTime.MinValue)
                        preactor.WriteField("Apontamento", "Data de Fim", record, iten.DataDeFim);
                }
                preactor.DestroyStatus();
                //VAMOS SALVAR OS DADOS NA TABELA DO PREACTOR
                preactor.Commit("Apontamento");
                MessageBox.Show("Seus dados foram importados com sucesso!");
            }
            catch (Exception ex)
            {
                preactor.DestroyStatus();
                MessageBox.Show("Falha ao importar os Apontamentos:" + Environment.NewLine + ex.Message);
            }

            return 0;

        }
4º Criei um botão no arquivo de configuração prmdf, já fizemos isso no olá mundo.


5º Cadastrei a ação dentro do Preactor conforme a ação Olá Mundo, acompanhe o passo a passo:

clique em Editar
Clique em "Novo Registro" em seguida "Adicionar->", digite o nome "arquivo" E clique Ok


Vá para o Menu Script de Eventos => Script de Eventos


Clique em "Parameters.."

Clique Sobre o nome "arquivo"


No campo "File Name", adicione o caminho e o nome do arquivo que iremos importar

6º Vamos Testar nossa ação, vá no Visual Studio e aparte a tecla de atalho "F5", e vamos debugar nosso código:



Com isso encerramos nosso primeiro WorkShop, não detalhei as ações pois elas são bem simples, igual uma receita de bolo, basta seguir o passo-a-passo que não tem erro.

Se houver algum dúvida sobre esse workshop me escreva besaleel@msn.com ou faça um comentário aqui no blog que responderei o mais breve possível.

Se preferir faça o download da solução completa do WorkShop 01.

Nenhum comentário: