LogSMS.prw 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #include 'protheus.ch'
  2. #include 'totvs.ch'
  3. #include 'rwmake.ch'
  4. #include 'tbiconn.ch'
  5. #include 'fileio.ch'
  6. /*/{Protheus.doc} LogSMS
  7. (long_description)
  8. @author Pedro.Souza
  9. @since 15/09/2020
  10. @version ${version}
  11. @example
  12. (examples)
  13. @see Classe para gerar arquivo de log
  14. /*/
  15. class LogSMS
  16. Data cFileName As String
  17. Data cHora As String
  18. Data cGrava As String
  19. Method new(cPrefixo) constructor
  20. Method getFileName()
  21. Method setFileName(cFileName)
  22. Method eraseLog()
  23. Method saveMsg(cMsg)
  24. Method readLog()
  25. Method setSaveTime(lSave)
  26. Method setSaveLog(lSave)
  27. Method copyLocal(cPasta)
  28. endclass
  29. /*/{Protheus.doc} new
  30. Metodo construtor
  31. @author Pedro.Souza
  32. @since 15/09/2020
  33. @version ${version}
  34. @param cPrefixo, caracter, opcional prefixo do nome do arquivo (padrão err_)
  35. @example
  36. (examples)
  37. @see (links_or_references)
  38. /*/
  39. Method New(cPrefixo) class LogSMS
  40. Default cPrefixo := "log_"
  41. ::cFileName := "\temp\"+cPrefixo+dtos(date())+"_"+strtran(time(),":","")+"_"+cValToChar(ThreadId())+".txt"
  42. ::cHora := "S"
  43. ::cGrava := "S"
  44. return self
  45. /*/{Protheus.doc} getFileName
  46. Metodo que retorna o nome do arquivo de log
  47. @author Pedro.Souza
  48. @since 15/09/2020
  49. @version ${version}
  50. @example
  51. (examples)
  52. @see (links_or_references)
  53. /*/
  54. Method getFileName() class LogSMS
  55. return ::cFileName
  56. /*/{Protheus.doc} setFileName
  57. Metodo que salva o nome do arquivo de log
  58. @author Pedro.Souza
  59. @since 15/09/2020
  60. @version ${version}
  61. @param cFileName, caracter, nome do arquivo
  62. @example
  63. (examples)
  64. @see (links_or_references)
  65. /*/
  66. Method setFileName(cFileName) class LogSMS
  67. Default cFileName:= ::cFileName
  68. ::cFileName := cFileName
  69. return ::cFileName
  70. /*/{Protheus.doc} eraseLog
  71. Metodo que apaga o arquivo de log
  72. @author Pedro.Souza
  73. @since 15/09/2020
  74. @version 1.0
  75. @example
  76. /*/
  77. Method eraseLog() class LogSMS
  78. if file(::cFileName)
  79. ferase(::cFileName)
  80. Endif
  81. Return self
  82. /*/{Protheus.doc} saveMsg
  83. Metodo que salva a mensagem no arquivo de log
  84. @author Pedro.Souza
  85. @since 15/09/2020
  86. @param cMsg, caracter, mensagem para salvar no arquivo de log
  87. @version 1.0
  88. @example
  89. /*/
  90. Method saveMsg(cMsg) class LogSMS
  91. Local nLaco := 1
  92. Local nHdl := -1
  93. Local cPref := ""
  94. Default cMsg:= ""
  95. if (::cGrava == "S")
  96. // Tenta criar / abrir o arquivo para o log
  97. while nLaco <= 5 .and. nHdl < 0
  98. If !File(::cFileName)
  99. nHdl := FCreate(::cFileName)
  100. Else
  101. nHdl := FOpen(::cFileName, FO_READWRITE)
  102. Endif
  103. nLaco++
  104. enddo
  105. if nHdl >= 0
  106. FSeek(nHdl,0,FS_END)
  107. if (::cHora == "S")
  108. cPref := time()+", "+cValToChar(ThreadId())+", "
  109. endif
  110. FWrite(nHdl,cPref+cMsg+CRLF)
  111. FClose(nHdl)
  112. Endif
  113. Endif
  114. return self
  115. /*/{Protheus.doc} readLog
  116. Metodo que retorna um array das mensagens do log
  117. @author Pedro.Souza
  118. @since 17/09/2020
  119. @param cMsg, caracter, mensagem para salvar no arquivo de log
  120. @version 1.0
  121. @example
  122. /*/
  123. Method readLog() class LogSMS
  124. Local aLinhas := {}
  125. Local nHandle
  126. Local cLine
  127. BEGIN SEQUENCE
  128. if file(::cFileName)
  129. nHandle := FT_FUse(::cFileName)
  130. if nHandle = -1
  131. conout("Problema ao ler o arquivo de log. "+::cFileName+". Erro:"+cValToChar(ferror())+CRLF)
  132. break
  133. endif
  134. // posiciona na primeira linha
  135. ft_fgotop()
  136. While !FT_FEOF()
  137. cLine := FT_FReadLn()
  138. aadd(aLinhas, cLine)
  139. FT_FSKIP()
  140. End
  141. // Fecha o Arquivo
  142. FT_FUSE()
  143. endif // if file(::cFileName)
  144. RECOVER
  145. // cRet := "Erro"
  146. END SEQUENCE
  147. return aLinhas
  148. Method setSaveTime(lSave) class LogSMS
  149. default lSave := .f.
  150. ::cHora := iif(lSave, "S", "N")
  151. return self
  152. Method setSaveLog(lSave) class LogSMS
  153. default lSave := .t.
  154. ::cGrava := iif(lSave, "S", "N")
  155. return self
  156. Method copyLocal(cPasta) class LogSMS
  157. if (file(self:getFileName()))
  158. cpys2t(self:getFileName(), cPasta, .t.)
  159. Endif
  160. return self