quinta-feira, 2 de outubro de 2014

workShop 02 - Treinamento Preactor API

Conforme o primeiro workshop a solução do problema será exposta em tópicos, num formato de passo-a-passo, ok?


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.

Nenhum comentário: