1º - Criar uma nova classe workshop02;
2º - Copiar e colar o método de ler o arquivo CSV, e altera-lo para atender o layout do novo arquivo CSV ( AtualizaOrdens.csv);
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];
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º - Criar o método de interface com o Preactor, e fazer a função que atualize os dados da tabela de "Apontamento";
public int AtualizaApontamento(ref PreactorObj preactorComObject, ref object pespComObject, ref string arquivo)
{
IPreactor preactor = PreactorFactory.CreatePreactorObject(preactorComObject);
try
{
preactor.DisplayStatus("Atualizar Apontamentos", "Lendo arquivo CSV...");
IList itens = getApontamentosByFileCSV(arquivo);
preactor.DestroyStatus();
if (itens.Count == 0)
{
MessageBox.Show("O arquivo está em branco.");
return 0;
}
preactor.DisplayStatus("Atualizar Apontamentos", "Aplicando Atualizações");
var total = itens.Count;
var count = 0;
preactor.UpdateStatus(count, total);
foreach (var iten in itens)
{
count++;
preactor.UpdateStatus(count, total);
//BUSCAR A ORDEM NA TABELA DE APONTAMENTOS
var record = preactor.FindMatchingRecord("Apontamento", "Ordem", 0, iten.Ordem);
if(record < 0)
continue;
//SÓ AS ORDENS QUE RECEBERAM UM STATUS CONHECIDO
switch (iten.Status)
{
case "Iniciada":
preactor.WriteField("Apontamento", "Recurso", record, iten.Recurso);
preactor.WriteField("Apontamento", "Status", record, iten.Status);
break;
case "Liberada":
preactor.WriteField("Apontamento", "Recurso", record, iten.Recurso);
preactor.WriteField("Apontamento", "Status", record, iten.Status);
break;
case "Cancelada":
preactor.DeleteRecord("Apontamento", record);
break;
case "Finalizada":
preactor.DeleteRecord("Apontamento", record);
break;
}
}
MessageBox.Show("Seus registros foram atualizados com sucesso!");
preactor.DestroyStatus();
}
catch (Exception ex)
{
preactor.DestroyStatus();
MessageBox.Show("Falha ao atualizar os registros de Apontamento: " + Environment.NewLine + ex.Message);
}
return 0;
}
4º - Criar um Botão para chamar a ação do workshop 02;
segue a codificação do Botão:
; ---------------------------------------------------------------------------
; Edit Apontamentos
; ---------------------------------------------------------------------------
;
EDIT_Apontamentos : PREDIT.EXE,
"/FMT:Apontamento" /NDS
"/ActiveX:Atualizar Dados da Tabela:PESP.EventHandler:RunScriptByName:AtualizaApontamento",
Edit Apontamento,
Preactor Database Editor,
Foreground,
ALWAYS:{RETURN};
;
5º - Criar a Ação Personalizada, dentro do Preactor;
6º - Testar nossa função;
Nesse workshop eu alterei o local de execução da função, não está dentro do quadro de Gantt conforme o workshop 01, isso para que você posso ver a flexibilidade do Preactor quanto a customizações.
A ação será chamada diretamente da tela e edição da tabela de "Apontamentos", em um menu de nome "Ferramentas".
Alguns comandos utilizados
preactor.DisplayStatus("Atualizar Apontamentos", "Aplicando Atualizações");
Exibe uma janela de Status sendo seu primeiro parâmetro o Título da Janela e o segundo o descritivo do Status;
preactor.UpdateStatus(count, total);
Atualiza o Status Bar que está contido na janela, sendo seu primeiro parâmetro andamento do status (inteiro), e o segundo numero que equivale a 100% do Status Bar, pode ser o número total de elementos de uma lista, ou Array, ou mesmo número de elementos de um tabela de banco de dados que estamos lendo;
preactor.DestroyStatus();
Fecha a janela de Status aberta pelo comando DisplaySTatus. Caso você abra um DisplayStatus e se esqueça de fechar, ao chamar sua ação ela irá manter a janela aberta causando um problema para o Preactor, deixado ele inoperante, e para restaurar o Preactor você precisará matar o processo (ctrl + alt + del) e restartar o Preactor.
Dica, por essa razão sempre que você utilizar o DisplayStatus se lembre de colocar dentro do Catch de sua função um DestroyStatus.
Arquivos do work02 para download.
Dúvidas besaleel@msn.com ou comente aqui.
Arquivos do work02 para download.
Dúvidas besaleel@msn.com ou comente aqui.






Nenhum comentário:
Postar um comentário