TraceHandler Interface (PRIM_APP.ITraceHandler)

Trace Handler Interface for user defined tracing

Ancestors - None

Details

The iTraceHandler interface is a low overhead tracing mechanism that can be built in to applications to provide feedback for developer without the need to provide replacement runtime objects.
 
Tracing statements can be written in the RDMLX using the TraceMessageText and TraceMessageData methods and left in place. Unless a Trace Handler is implemented at runtime, they are effectively ignored.

Example

The sample below is a simple web tracehandler.
 
When this reusable part is created in the runtime and Trace=True added as a parameter on the querystring, tracing output is sent to the browser console.
Function Options(*DIRECT)
Begin_Com Role(*EXTENDS #PRIM_OBJT *implements #Prim_App.iTraceHandler)
 
   * Include a Define_Com for this reusable part in your web page
   * It will install itself as the TraceHandler if "trace=true" is included as a parameter on the URL
   * You can then embed #sys_appln.TraceMessageText( aaa bbb ccc ddd ) whereever you want to send trace data to the console.
   * Each parameter equates to a single trace statement
 
   Evtroutine Handling(#Com_Owner.CreateInstance)
 
      For Each(#Parameter) In(#sys_web.UrlParameters)
 
         Continue If(#Parameter.Name.UpperCase <> Trace)
         Continue If(#Parameter.Value.uppercase <> True)
 
         #Sys_appln.TraceHandler <= #Com_owner /* Set this to be the trace handler for the application */
 
         Leave
 
      Endfor
 
   Endroutine
 
   Mthroutine Name(TraceMessage) Help('Request to trace data received') Options(*redefine)
 
      #Com_owner.WriteToConsole( #ComponentName #Description #LineNumber #MessageText )
 
   Endroutine
 
   Mthroutine Name(WriteToConsole) Help('Write an entry to the browser console') 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(#Message)
 
   Define_Com Class(#prim_Dat) Name(#Now)
 
      #Message := #Now.now.AsLocalizedDateTime.AsString.Righttrim( "0" ) + " " + #ComponentName + " " + #Description + " " + #LineNumber.asstring + " " + #Message
 
      #sys_web.Console.Log( #Message )
 
   Endroutine
 
   Mthroutine Name(TracingState) Options(*redefine)
 
      #MessageTracingActive := True
 
   Endroutine
 
End_Com
 

Methods

NameDescription
InitializeExecuted when user tracing starts
TerminateExecuted when user tracing ends
TraceMessageExecuted whenever a trace message is issued
ComponentName, Description, LineNumber, MessageText
TracingStateIs Tracing active?
MessageTracingActive

See also

All Component Classes

Technical Reference

Febuary 18 V14SP2