Jump to content
Fivewin Brasil

A tela da ErrorSys assusta? então use esta.


kapiaba

Recommended Posts

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


Link to comment
Share on other sites

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,

Link to comment
Share on other sites

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.

tela.gif

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.

Link to comment
Share on other sites

*************************************************************************
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
Link to comment
Share on other sites

*************************************************************************
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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 9 months later...

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 7 months later...
  • 1 year later...
 

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 é

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...