persistent vhLib.Macro 1 Default %Persistent 0 %String %String %String %Date %Integer %Time "E" = error "I" = info "W" = warn "D" = debug %String 1 %String 1 %String %String %String %String 1 Set {*}=$E({Detail},1,10000) 1 %String %String Stack level in case of errors %String 1 1 MainIndex,Datum,SubID 1 Server Namespace Datum Niveau Actie Groep 1 objectgenerator 1 oLogger:vhLib.Logger,Datum,Tijd,Niveau:%String,Groep:%String,Actie:%String,Detail:%String,ProgLabel:%String,SendMail:%String=0 %String Datum,Tijd,Niveau:%String,Groep:%String="",Actie:%String,Detail:%String,ProgLabel:%String Set oLog=##class(VHSys.Logging).AddErrorToLog(Groep,Actie,Error,Detail) 1 Groep:%String,Actie:%String,Error,Detail:%String,blnSendMail:%Boolean=1 Logging islist+2^%occRun")&&($$$GETERRORCODE(Error)=$$$GeneralError) lbTo=$LB("ICT_Meldingen@vanhoecke.be") ; Does not provide any extra information Set sc=$$SendMiniMail^vhLib(From,lbTo,Subj,Body,,,,,) Quit aelErrorMailBody() #define BodyTitle "Error in "_..%ClassName(1)_" : " #define ErrorToLine(%v) $S($L($P(%v,">",2)):$TEXT(@$P(%v,">",2,32767)), 1:"") Set Body="" Set Body=Body_$$$BodyTitle_$$$CRLF Set Body=Body_"Error message: "_$$ParseStatus^vhLib.System($G(Error,$G(%objlasterror)))_$$$CRLF Set Body=Body_""_$$$CRLF Set Body=Body_$$$CRLF_"Groep: "_$G(Groep) Set Body=Body_$$$CRLF_"Actie: "_$G(Actie) Set Body=Body_$$$CRLF_"Detail: "_$G(Detail) Set Body=Body_$$$CRLF_"Error: "_$$ParseStatus^vhLib.System(Error) Set Body=Body_$$$CRLF Set Body=Body_$$$CRLF_"$ZError: "_$ZError Set:($L($ZError)) Body=Body_$$$CRLF_"Line : "_$$$ErrorToLine($ZError) ; $$aelErrorToLine Set:($L($G(%objlasterror))) Body=Body_$$$CRLF_"Object Last Error: "_$$ParseStatus^vhLib.System(%objlasterror) Set Body=Body_$$$CRLF_"$ECode: "_$ECode Set Body=Body_$$$CRLF_"Stack: " For EST=1:1:$ESTACK Set Body=Body_$$$CRLF_" "_$STACK($STACK-EST,"PLACE") Set Body=Body_$$$CRLF Set Body=Body_$$$CRLF_"--- End of message ---"_$$$CRLF Set Body=Body_$$$CRLF_..GetJobInfo(1,"") Quit Body ]]> 1 blnMultiLine:%String,Indent:%String %String Niv:"_..Niveau_" Groep:"_..Groep_$S($L(..Actie):" Actie:"_..Actie,1:"")_$S($L(..Detail):" Detail:"_..Detail,1:"")_$S($L(..ProgLabel):" ProgLabel:"_..ProgLabel,1:"")) ]]> 1 Dagen TotDatum Do . Kill $$$StorageGlobal(Datum) */ ]]> Analoog aan CleanOld, behalve de extra controle dat de global node geen subnodes meer bevat (blnCheckEmpty=1) startH en StopH zijn inclusief, ze worden dus ook verwijderd uit de global. 1 StartH:%Integer,StopH:%Integer,blnCheckEmpty:%Boolean=1 StopH) Kill:($$$NoSubNodes($$$StorageGlobal(Datum))) $$$StorageGlobal(Datum) Else Do . For Set Datum=$O($$$StorageGlobal(Datum)) Quit:(Datum="") Quit:(Datum>StopH) Kill $$$StorageGlobal(Datum) Quit */ ]]> 1 %Library.CacheStorage ^vhLib.LoggingD LoggingDefaultData ^vhLib.LoggingD ^vhLib.LoggingI ^vhLib.LoggingS %%CLASSNAME Actie Detail Groep Namespace Niveau ProgLabel Server Tijd JobID RemoteIP LessDetail %Library.CacheStorage ^["LOG"]vhLib.LoggingD LoggingDefaultData ^["LOG"]vhLib.LoggingD ^["LOG"]vhLib.LoggingI ^["LOG"]vhLib.LoggingS %%CLASSNAME Actie Detail Groep Namespace Niveau ProgLabel Server Tijd JobID