Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

7.2 Example Trace Handler

This is an example of a self-contained Trace Handler object. It checks for the existence of a text file called TracingOn.txt and if found will install itself at run time and a trace file will be created. Any trace statements coded in to into the application will be output to this trace file.

Copy and paste the source in to into a new RDMLX reusable part. Save and compile.

...

languagexml

...

     Function Options(*DIRECT) 
Begin_

...

Com Role(*

...

EXTENDS #PRIM_OBJT *implements #prim_app.iTraceHandler)

...

 
Define Field(#FilHandle)

...

 Type(*dec)

...

 Length(3)

...

 Decimals(0) 
Define_

...

Com Class(#prim_alph)

...

 Name(#Tab) 

...


Evtroutine Handling(#Com_Owner.CreateInstance)

...

 
#Tab :=

...

 (09).asChar 
#Com_owner.InstallTracing
Endroutine

...


Mthroutine Name(InstallTracing)

...

 Help('

...

Plug in the trace handler to the Application')

...

 Access(*private) 

...

    * This example uses a text file as the trigger to implement user tracing. 
* Alternately you might consider using a registry entry
If (#Com_owner.FileExists(

...

 (*Sys_dir  "TracingOn.txt")

...

 )) 

...

  * Set this object as the system help handler 
#Sys_appln.

...

TraceHandler <= #Com_owner 
Endif
Endroutine

...

 
Mthroutine Name(Initialize)

...

 Options(*redefine)

...

 Access(*private) 
#Com_owner.OpenTraceFile
Endroutine

...


Mthroutine Name(Terminate)

...

 Options(*redefine)

...

 Access(*private) 
#Com_owner.CloseTraceFile
Endroutine

...

 
Mthroutine Name(TraceMessage)

...

 Help('

...

Executed whenever #sys_appln.

...

TraceMessageData or #sys_appln.

...

TraceMessageText is used')

...

 Options(*redefine)

...

 Access(*private)
#Com_owner.WriteToFile(

...

 #ComponentName #Description #LineNumber #MessageText ) 
Endroutine

...

 
Mthroutine Name(OpenTraceFile)

...

 Help('

...

Create a new trace outputfile')

...

 Access(*private)

...

 
Use Builtin(Stm_File_Open)

...

 With_Args(#Com_owner.

...

GetNextFile Append N Y) To_Get(

...

#FilHandle #io$sts) 
Endroutine

...


Mthroutine Name(WriteToFile)

...

 Help('

...

Write an entry in the trace output file')

...

 Access(*private) 
Define_

...

Map For(*Input)

...

 Class(#prim_alph)

...

 Name(#ComponentName) 
Define_

...

Map For(*Input)

...

 Class(#prim_alph)

...

 Name(#Description) 
Define_

...

Map For(*Input)

...

 Class(#prim_nmbr)

...

 Name(#LineNumber) 
Define_

...

Map For(*Input)

...

 Class(#prim_alph)

...

 Name(#MessageText) 
Define_

...

Com Class(#prim_Dat)

...

 Name(#Now)

...

 
#MessageText :=

...

 Now.now.AsLocalizedDateTime.AsString  #Tab  #ComponentName  #Tab  #LineNumber.asstring  #Tab  #MessageText

...

 
Use Builtin(Stm_File_Write)

...

 With_Args(

...

#FilHandle #MessageText) To_Get(#io$sts) 
Endroutine

...

 
Mthroutine Name(CloseTraceFile)

...

 Access(*private)

...

 
Use Builtin(Stm_File_Close)

...

 With_Args(#FilHandle)

...

 To_Get(#io$sts) 
Endroutine

...


Mthroutine Name(TracingState)

...

 Options(*redefine) 

...

#MessageTracingActive :=

...

 True 
Endroutine

...

 
Mthroutine Name(GetNextFile)

...

 Access(*Private) 
Define_

...

Map For(*Result)

...

 Class(#Prim_alph)

...

 Name(#Result) 
Define_

...

Com Class(#prim_nmbr)

...

 Name(#Extension) 
Begin_

...

Loop Using(#Extension)

...

 
#Result :=

...

 *Sys_dir  "UserTrace"  "."  #Extension.asstring.rightAdjust(

...

 3 "0"

...

 ) 
Leave If(*Not #Com_owner.FileExists(

...

 #Result )) 
End_Loop
Endroutine

...

 
Mthroutine Name(FileExists)

...

 Access(*private) 
Define_

...

Map For(*input)

...

 Class(#prim_alph)

...

 Name(#Path) 
Define_

...

Map For(*result)

...

 Class(#prim_boln)

...

 Name(#Result) 

...


Use Builtin(OV_FILE_SERVICE)

...

 With_Args(Check_

...

File #Path) To_Get(#io$sts)

...

 
#Result :=

...

 (

...

#io$sts =

...

 OK) 
Endroutine
End_Com