kapiaba Posted August 7, 2014 Report Share Posted August 7, 2014 Gostei da Idéia do Rochinha, apesar de antiga, dá para melhorar para os tempos atuais: http://www.pctoledo.com.br/forum/viewtopic.php?f=2&t=2501&p=8950&hilit=Tsmtp#p8950 abs, Ronaldbuch 1 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 7, 2014 Author Report Share Posted August 7, 2014 Super interessante, para enviar o erro do programa usando a classe: TSMTP.PRG function SendEmailRel( cSender, cBody, cHost, cReplyTo, cSubject, cMsg, lReceipt, lAuth, cUser, cPass, lPop3, cPOP3Host ) LOCAL oInit DEFAULT cHost := 'smtp.sao.terra.com.br' ,; cPOP3Host := 'pop.sao.terra.com.br' ,; cSender := 'seulogin@terra.com.br' ,; cReplyTo := 'seulogin@terra.com.br' ,; lReceipt := .t. ,; lAuth := .t. ,; lPop3 := .t. ,; cSubject := '*** CONTROLE DE ERROS ***',; cMsg := cBody ,; cUser := 'seuUserName' ,; cPass := 'suaSenha' oInit := TSmtp():New( cHost ) oMail := TSmtp():New( cHost, , lAuth, cUser, cPass ) // [jlalin], IBTC oMail:cReplyTo := cReplyTo oMail:nGMT := 8 // 8 = Pacific Standard Time (GMT -08:00) - Adjust this to your own Time Zone! oMail:nDelay := 1 *oMail:lTxtAsAttach := .F. // uncomment to force txt, log and htm files as inline as opposed to attachement oMail:oSocket:lDebug := .T. // uncomment to create log file oMail:oSocket:cLogFile := "smtp.log" oMail:bConnecting := {|| oWnd:SetMsg( "Conectando a " + cHost + " (" + oMail:cIPServer + ") a aguardando resposta..." ) } oMail:bConnected := {|| oWnd:SetMsg( "Conectado e enviando email e anexos..." ) } oMail:SendMail( ; 'seuUserName@terra.com.br', ; // from/de { 'seuUserName@terra.com.br' }, ; // to/para (arreglo) - I use cSender here also because it's an "autotest". Actually you would type a different address here cMsg,; // Body/Mensaje cSubject,; // Subject/Asunto { "error.log" }, ; // Array of filenames to attach/Arreglo de nombres de archivos a agregar { }, ; // aCC { cSender }, ; // aBCC lReceipt, ; // Return Receipt/acuse de recibo cBody ) // msg in HTML format/mensaje en HTML oInit:end() Msgstop( "EMAIL do erro enviado com sucesso!" ) return nil microvolution and evertonlb 2 Quote Link to comment Share on other sites More sharing options...
emotta Posted August 7, 2014 Report Share Posted August 7, 2014 é possivel postar uma imagem do resultado final? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 7, 2014 Author Report Share Posted August 7, 2014 Biaxe o ERRSYSW.RC na página do PCTOLEDO, e abra no WORKSHOP.EXE, que voce terá uma idéia do que o Rochinha quis fazer, é antigo, mas dá para melhorar bastante. abs, Quote Link to comment Share on other sites More sharing options...
emotta Posted August 7, 2014 Report Share Posted August 7, 2014 Mas voce já baixou e gostou do resultado certo? Só pra evitar trabalho, e se possivel, da um print do resultado... Biaxe o ERRSYSW.RC na página do PCTOLEDO, e abra no WORKSHOP.EXE, que voce terá uma idéia do que o Rochinha quis fazer, é antigo, mas dá para melhorar bastante. abs, Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 7, 2014 Author Report Share Posted August 7, 2014 Não testei ainda, e veja lá no pctoledo que o Rochinha fez comentários. abs. Quote Link to comment Share on other sites More sharing options...
emotta Posted August 7, 2014 Report Share Posted August 7, 2014 no sistema da EMotta mudamos para essa: Não testei ainda, e veja lá no pctoledo que o Rochinha fez comentários. abs. Theotokos and microvolution 2 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 7, 2014 Author Report Share Posted August 7, 2014 no sistema da EMotta mudamos para essa: Falta os Botões: <Enviar Email> e <Não Enviar> E envie direto, sem passar pelo Outlook express ou Windows Live Mail. abs Abs Quote Link to comment Share on other sites More sharing options...
evertonlb Posted August 8, 2014 Report Share Posted August 8, 2014 Cara.. pra mudar a tela de informações de erro preciso fazer o que? Alterar a ErrosSys."oque"? Att. Everton Quote Link to comment Share on other sites More sharing options...
rochinha Posted August 8, 2014 Report Share Posted August 8, 2014 Amiguinhos, A modificação proposta foi elaborada para diferenciar a tela de mensagem de erro do Fivewin para a tela de mensagem de erro do Windows, com botões visualizar o log de erros, enviar por email, etc. O usuário tem a opção de enviar o relatório, não enviar, tentar novamente(dependendo do erro pois alguns erros não são mortais), padrão(dependendo do erro o sistema imputa um valor padrão para continuar) No caso do envio, quando o usuário seleciona um motor de envio(pode ser CDOSYS, SendMail, Blat, etc), o relatorio é enviado. Usei por um tempo o SENDEMAIL.EXE que usava MAPI para introduzir emails direto nas caixas do Outlook Express. Abandonei porque com Outlook e Windows Mail, toda vez precisava responder se permitia que aplicação externa manipular a caixa de entrada. Abandonei SENDMail por causa das mudanças de portas 587. Continuei usando CDOSYS e Blat.exe, mas implementei mesmo foi Blat.dll Com o recebimento do relatório, antes do cliente ligar eu já sabia como resolver o problema, ou estava mais a par e podia acalmá-lo. O interessante é que quando o desenvolvimento se antecipa ao cliente, o cliente tem em mente que o desenvolvimento esta sempre trabalhando, sempre à postos. Isto transmite segurança. O arquivo de .LOG tem alguns complementos que me informam qual o cliente teve problema. Dados do erro causado pela aplicacao 5Volution Legacy ----------------------------------------- Caminho : B:\5volution\GESTAO\nfwh29.exe Tamanho : 6,771,936 bytes Max files : 0 Data e Hora : 07/08/2014, 23:28:42 Estacao : DESENVOLVIMENTO Dados do cliente: ----------------------------------------- Nome/Razao : 5VOLUTION.COM Telefone : (011)3531-2056 Email : contato@5volution.com.br Revisao : 080714-5664 Descricao do erro produzido: ----------------------------------------- (DOS Error 3) DBFCDX/1004 Create error: CONTROLE.dbf Acao provavel de resolucao: ----------------------------------------- Criar arquivo CONTROLE.dbf ou destravar. Chamadas ao Stack ----------------------------------------- Chamada em: => DBCREATE(0) Chamada em: => PSQAUDITORIA(3846) Chamada em: => MAINMAIN(398) DESENVOLVIMENTO Informacao do sistema. ----------------------------------------- Versao do Windows = Windows Seven Service Pack 1 build 7601 Numero da versao = 6.1.7601 Service Pack 1 Plataform = 2 Major = 6 Minor = 1 Build = 7601 Dependendo do erro, uma ação de resposta é mostrada ao usuário e até ele pode resolver sem acionar suporte. O contador de compilações segue uma sequencia e portanto dá pra saber a distancia de atualizações de um determinado cliente. Eu uso o contador de compilações para vincular as manutenções feitas no código para lembrar em qual compilação foi introduzida, retirada ou editada uma característica. Desativei o recurso de capturar tela de erro, porque a informação já está dentro do arquivo de .LOG. A imagem salva ocupava muito espaço e mesmo usando recursos de converte-la para JPEG se tornou desinteressante. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted August 8, 2014 Report Share Posted August 8, 2014 Rochinha, Parabéns pela rotina de erro. Notei que você fez alguns ajustes interessantes nela, se possível, poste a sua rotina de erro atualizada aqui. Obrigado, aguardo. Quote Link to comment Share on other sites More sharing options...
henning Posted August 8, 2014 Report Share Posted August 8, 2014 Eu mando o arquivo error.log via ftp para um servidor meu.... kapiaba 1 Quote Link to comment Share on other sites More sharing options...
emotta Posted August 8, 2014 Report Share Posted August 8, 2014 mas eu nao tenho interesse no envio de email.... Falta os Botões: <Enviar Email> e <Não Enviar> E envie direto, sem passar pelo Outlook express ou Windows Live Mail. abs Abs kapiaba 1 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 8, 2014 Author Report Share Posted August 8, 2014 Eu mando o arquivo error.log via ftp para um servidor meu.... Henning, é isto que eu quero fazer, mas não consigo, pode dar o caminho das pedras, porfa? Obg. abs. Quote Link to comment Share on other sites More sharing options...
aferra Posted August 8, 2014 Report Share Posted August 8, 2014 opa, legal, é isso mesmo que estamos tentando e nada. rsxrsrsrsrsrs se puder compartilhar agradecido desde já Quote Link to comment Share on other sites More sharing options...
henning Posted August 8, 2014 Report Share Posted August 8, 2014 ************************************************************************* function enviarLogDeErro() ************************************************************************* * Envia o log de erro para o servidor. * Data de início.: 04/01/2012 ************************************************************************** If lEnviouErrorLog == .t. Return Nil EndIf If MsgYesNo("Deseja enviar o arquivo de erro para o suporte técnico ?"+HB_OSNEWLine()+; "Para enviar essas informações é necessário estar conectado a internet,"+; "ao receber o arquivo vamos analisar os dados e se for necessário vamos fazer as devidas correções. Qualquer dúvida entre em contato com o suporte técnico.","Ocorreu um Erro no Sistema") oInternet := TInternet():New() oFTP := TFTP():New( "www.seusite.com.br", oInternet,"logindoftp","senhadoftp" ) cArquivo := "error.log" cNomeArquivo := 'HCPRW_'+Dtos(Date())+StrTran(Time(),':','')+'.txt' hSource := FOpen( cArquivo) cBuffer := Space( 6400 ) nBufSize := 6400 oFile = TFtpFile():New( cNomeArquivo, oFTP ) oFile:OpenWrite() FSeek( hSource, 0, 0 ) nTotal := 0 while ( nBytes := FRead( hSource, @cBuffer, nBufSize ) ) > 0 oFile:Write( SubStr( cBuffer, 1, nBytes ) ) nTotal += nBufSize end oFile:End() oFtp:End() lEnviouErrorLog := .t. MsgInfo("Informações sobre o erro enviados com sucesso, vamos verificar o que pode estar ocorrendo, se for necessário vamos lançar uma nova versão o mais breve possível, caso tenha alguma dúvida entre em contato com o suporte técnico.","Informação") EndIf Return Nil Chamo essa função no OnPaint da chamada do janela de erro do errsysw.prg ACTIVATE DIALOG oDlg CENTERED ; ON PAINT (DrawBitmap( hDC, hLogo, 6, 6 ) , EnviarLogDeErro()) Uso xHarbour com FWH, não sei se funciona com Harbour Quote Link to comment Share on other sites More sharing options...
henning Posted August 8, 2014 Report Share Posted August 8, 2014 Mas o que vou fazer mesmo é criar um Webservice em php para receber os dados e salvar em uma tabela MySql do meu servidor, dessa forma é mais seguro... Vou fazer isso nos próximos dias e quando tiver algo posto aqui para todos.. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 8, 2014 Author Report Share Posted August 8, 2014 ************************************************************************* function enviarLogDeErro() ************************************************************************* * Envia o log de erro para o servidor. * Data de início.: 04/01/2012 ************************************************************************** If lEnviouErrorLog == .t. Return Nil EndIf If MsgYesNo("Deseja enviar o arquivo de erro para o suporte técnico ?"+HB_OSNEWLine()+; "Para enviar essas informações é necessário estar conectado a internet,"+; "ao receber o arquivo vamos analisar os dados e se for necessário vamos fazer as devidas correções. Qualquer dúvida entre em contato com o suporte técnico.","Ocorreu um Erro no Sistema") oInternet := TInternet():New() oFTP := TFTP():New( "www.seusite.com.br", oInternet,"logindoftp","senhadoftp" ) cArquivo := "error.log" cNomeArquivo := 'HCPRW_'+Dtos(Date())+StrTran(Time(),':','')+'.txt' hSource := FOpen( cArquivo) cBuffer := Space( 6400 ) nBufSize := 6400 oFile = TFtpFile():New( cNomeArquivo, oFTP ) oFile:OpenWrite() FSeek( hSource, 0, 0 ) nTotal := 0 while ( nBytes := FRead( hSource, @cBuffer, nBufSize ) ) > 0 oFile:Write( SubStr( cBuffer, 1, nBytes ) ) nTotal += nBufSize end oFile:End() oFtp:End() lEnviouErrorLog := .t. MsgInfo("Informações sobre o erro enviados com sucesso, vamos verificar o que pode estar ocorrendo, se for necessário vamos lançar uma nova versão o mais breve possível, caso tenha alguma dúvida entre em contato com o suporte técnico.","Informação") EndIf Return Nil Chamo essa função no OnPaint da chamada do janela de erro do errsysw.prg ACTIVATE DIALOG oDlg CENTERED ; ON PAINT (DrawBitmap( hDC, hLogo, 6, 6 ) , EnviarLogDeErro()) Uso xHarbour com FWH, não sei se funciona com Harbour Very good, já temos idéia de onde partir. Valeu Henning, muito obrigado. Gostei também da idéia do Eduardo. Quote Link to comment Share on other sites More sharing options...
henning Posted August 8, 2014 Report Share Posted August 8, 2014 Fiz um esquema com o webservice está bem simples mas funciona bem... Tabela SQL: CREATE DATABASE `logs` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE `logs`; -- -------------------------------------------------------- -- -- Estrutura da tabela `logs` -- CREATE TABLE IF NOT EXISTS `logs` ( `id` int(11) NOT NULL AUTO_INCREMENT, `log` text NOT NULL, `data` datetime NOT NULL, `sistema` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; Código php <?php $dsn = 'mysql:host=localhost;port=3306;dbname=logs;charset=UTF8'; $usuario = 'usuario'; $senha = 'senha'; try { $pdo = new PDO($dsn, $usuario, $senha, $opcoes); } catch (Exception $e) { echo 'false'; return; } try { $log = filter_input(INPUT_POST, 'log'); $sistema = filter_input(INPUT_POST, 'sistema'); $sql = "INSERT INTO logs ". "(log, data, sistema) ". "VALUES ". "(:log, NOW(), :sistema)"; $stmt = $pdo->prepare($sql); $stmt->bindParam(":log", $log, PDO::PARAM_STR); $stmt->bindParam(":sistema", $sistema, PDO::PARAM_STR); $stmt->execute(); echo "true"; } catch (Exception $e) { echo 'false'; } return; Código da função xHArbour que envia para o webservice ******************************************************************* function enviarLogDeErro(cLog) ******************************************************************* * Envia o log de erro para o servidor * Data de início: 08/08/2014 ******************************************************************* LOCAL oUrl, oInternet LOCAL cData, cRet LOCAL cParam1 := cLog, cParam2 := "hcprw" oUrl := TURL():New( "http://www.seusite.com.br") oUrl:cPath := "/logs" oInternet := TIPClientHTTP():New(oUrl) oInternet:cUserAgent := "Mozilla/4.0 (compatible; MSIE 5.01; WindowsNT 5.0)" cData := "" oUrl:cFile := "log.php" WITH OBJECT oInternet IF :Open() IF :Post("log=" + cParam1 + "&sistema=" + cParam2) DO WHILE !Empty((cRet:=:Read())) cData += cRet ENDDO ENDIF ENDIF :Close() END WITH If cData == "true" MsgInfo("Log de erro enviado.") EndIf RETURN Nil Quote Link to comment Share on other sites More sharing options...
qiinfo Posted August 12, 2014 Report Share Posted August 12, 2014 Olá henning, Tentei executar teu código aqui e me está retornando erro na linha: $pdo = new PDO($dsn, $usuario, $senha, $opcoes); O que seria "$opcoes" ? Obriagdo, Rossine. Quote Link to comment Share on other sites More sharing options...
henning Posted August 12, 2014 Report Share Posted August 12, 2014 Opa, pode tirar essa variável... não é necessária... Ronaldbuch 1 Quote Link to comment Share on other sites More sharing options...
microvolution Posted May 25, 2015 Report Share Posted May 25, 2015 Prezados Emotta, Timão, a quem cumprimento a todos desse fórum! Gostei muito dessa tela (.jpg) do vosso sistema feito no nosso antigo clipper e agora em fivewin. Bom, infelizmente programo desde os meus 14 anos, inicialmente em basic (8bits), e depois dbase e finalmente fiquei desde 1990 até agora final de 2014 em clipper e dormindo no tempo. Tenho apenas um aplicativo comercial (não fiscal) com 3 clientes, sendo um apenas pagante mensalmente. Cheguei por várias e de tantas portas que nunca se abriram, diante do tanto de gente muito mais avançada que eu em desistir ou até mesmo pensar que um dia fui um "programador" de computador. Mas, sempre que acessava a internet, ou chegava nas empresas (onde compro qq coisa) e via os softwares de frente de caixa, frente de loja, cartão de ponto, etc... chorava dentro de mim, dizendo comigo mesmo "eu também podia ter algum software reconhecido no mercado brasileiro, podia ser só no meu estado, cidade ou até mesmo bairro", MAS só tenho um cliente fiel... tentei até mesmo uma lavagem cerebral, mudei de ramo, ocupei minha mente com outras coisas, mas, toda vez era o mesmo tormento. Há uns 6 anos descobri esse tal de "harbour" mas aquelas telas pretas de antigo DOS que já me dava nojo/vômito, não consegui migrar e fiquei cada vez mais apertado. Até que enfim, alguém sentiu minhas dores, como sendo suas e finalmente depois de tantas tentativas de migração, consegui através da HMG 3.0.35 migrar para harbour, ou seja, de 16 bits, para 32 bits... e finalmente comecei a me sentir menos pior. Enfim, algumas coisas ainda são novidade, pois só estou no negócio de harbour há menos de 5 meses, pois migrei em 01/2015. As dúvidas são muitas: 1 - Como o modo gráfico é muito complexo, e sei um pouco de Object Pascal (esqueci de mencionar rsrsrs, desculpa) e a IDE/RAD dele (Delphi) é uma maravilha então, surgem outros problemas: 1.1 - Meu clipper/harbour eu uso DBFNTX e o DELPHI só trabalha bem com DBF/CDX. Então, já estou começando a migrar também de DBFNTX para DBFCDX nos meus códigos fontes; 2 - Meu único aplicativo que não é FISCAL preciso aprender a maneira correta para cadastrar meu CPF/CNPJ na Receita Estadual de MG e saber o que precisa para que meu software passe no teste ou mude para que se enquadre nos requisitos do estado; 2.1 - E, aí acredito que o meu software será mais fácil de se vender; 2.2 - Para que também seja mais fácil (nesse tanto de concorrência) preciso mudar o visual de modo console para modo gráfico, com isso, é que os novos módulos os farei em DELPHI XE3 ou superior por ser mais fácil a compreensão e num ambiente gráfico que já estou um pouco acostumado, pois no harbour modo console, a gente muda mais ou menos uns 20% do código original, agora para modo gráfico as alterações podem ultrapassar os 60% ou 70%; 3 - Se os nossos DBFCDX forem ainda confiáveis, não vejo o porquê alterar para SQL ou algo similar; Bom agora é que cheguei até esse tão conceituado fórum aqui, mais uma vez: 4 - Estou na fase de mudar a tela de mensagens de erro para uma mais amigável. No fórum PCTOLEDO encontrei o mesmo título desse daqui e acabei vindo pra cá e ficar admirado com a beleza e simplicidade da tela de erro padrão da Emotta Sistemas. Então, gostaria da ajuda de V.Sas. em fazer uma tela de erro para o meu software bem mais amigável que a existente no harbour em modo console e também melhor ainda que a do modo gráfico. Se V.Sas. puderem me passar um código para harbour fico eternamente agradecido. No mais, parabéns a todos! Grato, MICROVOLUTION / W de Paula. Quote Link to comment Share on other sites More sharing options...
evertonlb Posted May 27, 2015 Report Share Posted May 27, 2015 Bem vindo W de Paula. Me diga uma coisa, tu vai fazer teu software em FiveWin ou Delphi? Se for em FiveWin tem uma pancada de códigos espalhados por este fórum, ai é só copiar e começar a usar.. Com relação aos 60, 70%.. cara não sei se chega a isso tudo, pois basicamente o que muda é a interface. Tenho um monte de funções que estavam no Clipper e que estou usando sem mexer nada, outras mexi numa ou outra mensagem. Mas as telas, ai não aproveitei nada mesmo! Mas se acaso for desenvolver em Delphi... ai EU já não sei mais nada!! Att. Everton Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 7, 2016 Author Report Share Posted January 7, 2016 Galera, como eu mostro a versão do Windows, e se é de 32 bits ou 64 bits no ERRSYSW.PRG? Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted February 19, 2017 Report Share Posted February 19, 2017 Gostei da Idéia do Rochinha, apesar de antiga, dá para melhorar para os tempos atuais: http://www.pctoledo.com.br/forum/viewtopic.php?f=2&t=2501&p=8950&hilit=Tsmtp#p8950 abs, Olá Kapiaba. Tô tentando compilar em FW 13.07 dar uma erro na linha 1128 no metodo METHOD Memory(n) CLASS TSystemInfo: errorsys.prg(1111) Error E0030 Syntax error: "syntax error at '1'" Sabe me dizer o que é Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.