Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 515949
            [titulo] => Processamento Batch CSharp
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-04-07 12:56:03
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 232232
            [status] => A
            [isExample] => 
            [NomeUsuario] => Joel Rodrigues
            [Apelido] => 
            [Foto] => 232232_20161017163010.jpg
            [Conteudo] => Olá Richardson. Se a ideia é substituir o VB6, você não poderia simplesmente criar os mesmos executáveis em C#, inclusive mantendo a estrutura dos parâmetros?
Maio sei se entendi bem a questão, mas se for algo nesse sentido, sei executável pode receber argumentos a partir da função Main da classe Program. ) )

Processamento Batch CSharp

Richardson Nogueira
|
MVP
    07 abr 2015

Olá,
Gostaria de saber se alguém conhece ou possa me auxiliar onde encontrar uma arquitetura para desenvolvimento de processos Batchs em C#.
Atualmente temos alguns processos feitos em VB6 (executáveis) que são chamados via arquivos BAT onde passamos parâmetros para estes processos (Data, Local de gravação de Logs, local de geração dos relatórios... etc). Os batchs são gerenciados pelo sistema CAWA (CA Workload Automation Desktop Client R11.3 SP2) que gerencia o horário de execução e controle de finalização e fluxo.
Com isso, pretendo reescrever alguns processos para torna-lo inteligente no sentido de enviar e-mail ao dar erro, pegar parâmetros de banco de dados, padronizar logs para gerar um monitor de acompanhamento. A idéia é utilizar ferramente nova e arquitetura nova e abandonar o velho e bom VB6.
Não achei nada a respeito no site e na internet. Apenas desenvolvimento de processos batchs em Java que não é nosso foco.
Caso possuam alguma indicação, sugestão... será bem vinda
Obrigado pelo apoio.
Richardson Nogueira

Post mais votado

Joel Rodrigues
   - 07 abr 2015

Olá Richardson. Se a ideia é substituir o VB6, você não poderia simplesmente criar os mesmos executáveis em C#, inclusive mantendo a estrutura dos parâmetros?
Maio sei se entendi bem a questão, mas se for algo nesse sentido, sei executável pode receber argumentos a partir da função Main da classe Program.

Jothaz
   - 07 abr 2015

O que o Joel postou faz sentido e talvez serja menos traumático na conversão.

Uma outra abordagem é criar um aplicação windows service, veja os exemplos:

Criando um Windows Service

Criando um serviço utilizando C#

Instruções passo a passo: criando um aplicativo de Serviço Windows no Designer de Componente

Richardson Nogueira
|
MVP
    07 abr 2015

oi Joel,

A idéia é reescrever os batchs nesta nova linguagem. Já os parâmetros tenho a que migrá-los para Banco de Dados, pois o ambiente produtivo é blindado e qualquer alteração em qualquer parâmetro, que gera a substituição do BAT que chama este executável, gera um desgaste tremendo com a equipe responsável pelo ambiente.

O que pretendo é conseguir criar uma arquitetura/estrutura simples para os mais de 100 batchs que temos. Com isso, centralizar os Logs (hoje cada um gera o seu Log - sem padrão algum e de difícil entendimento), caso o batch dê abort, ele auto reerguer (Caso dê novamente um abort, enviar mensagem ao responsável pelas informações).

Achei no site algo para Java, um conceito interessante e só não achei para C# este mesmo exemplo (se é que posso dizer assim).

Uma dúvida, A Função Main da classe Program retorna algum valor? Pois, atualmente no VB6, tenho a função ExitProcess(X), onde X é o código que ó programa gera para ser lido no programa que gerencia os Batchs. No caso utilizamos 0 (zero) para programa concluído com sucesso e qualquer outro número são os erros catalogados (de nossa propriedade).

Richardson Nogueira
|
MVP
    07 abr 2015

oi Jothaz,

Obrigado pelos exemplos.

Como nossos batchs são processos pesados (Geração de arquivos texto, PDFs, planilhas, envio de e-mails...) e possuem horários para sua execução e dependência de outros processos (em alguns casos) não podemos deixar como um serviço, mas o serviço poderá nos auxiliar em outras tarefas.

Analisarei a possibilidade de utilizar o serviço do Windows para algum tipo de controle.

Joel Rodrigues
   - 07 abr 2015

Semelhante ao que você já faz no VB6, pode usar o ExitCode da aplicação também. Veja a documentação oficial: Propriedade Environment.Exit[tagcod.
Abraço.