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:
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?
5º Cadastrei a ação dentro do Preactor conforme a ação Olá Mundo, acompanhe o passo a passo:
Vá para o Menu Script de Eventos => Script de Eventos
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.
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
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:
Postar um comentário