Develop > Document Engine > Troubleshooting overview

Troubleshooting overview

To successfully troubleshoot the Document Engine you will need to gather the following information:

  • What dbdict and Object is being used
  • What State is the record in
  • What is the Process being called
  • Steps followed to reproduce (STR) the problem

Research application path through the Document Engine

In troubleshooting the Document Engine, as with troubleshooting any Service Manager application, enter RTM:3 and debugdbquery:999 in the Service Manager sm.ini file and then start a new client connection. Unless this user process is the very first to invoke the Document Engine processes to debug, it may not show the selection of the State or Process records in the sm.log file when doing this trace, but it will give helpful hints as to which Process was being invoked.

Find dbdict or Object used

To determine which dbdicts or Object is being used, search the log file.

Log sample:

1320 07/18/2006 11:00:36 RADTRACE 20 [ 1] se.get.object get.object select CPU( 0 1411 )

1320 07/18/2006 11:00:36 (0x0129AC08) DBACCESS - Cache Find against file Object found 1 record, query: file.name="pcsoftware"

1320 07/18/2006 11:00:36 RADTRACE 20 [ 1] se.get.object set.access process CPU( 0 1411 )

Find State for the records

The next question to look at is which State the record is in. To find that information, search for the following in the trace sm.log:

Log sample:

1320 07/18/2006 11:00:48 RADTRACE 10 [ 1] se.get.state select.state select CPU( 0 1491 )

1320 07/18/2006 11:00:48 (0x01292FB0) DBACCESS - Cache Find against file States found 1 record, query: state="pcs.list"

1320 07/18/2006 11:00:48 RADTRACE 10 [ 1] se.get.state exit.normal process CPU( 0 1491 )

Find the name of the Process

The name of the Process can be found as well, by searching in the sm.log containing the trace shown in the following example.

Log sample:

1320 07/18/2006 11:00:50 RADTRACE 20 [ 1] se.call.process select.process select CPU( 0 1542 )

1320 07/18/2006 11:00:50 (0x00B56810) DBACCESS - Cache Find against file Process found 1 record, query: process="upgrade.pcs"

1320 07/18/2006 11:00:50 RADTRACE 20 [ 1] se.call.process run.pre.exp process CPU( 0 1542 )

Research application errors

Processes call a number of RAD applications and execute a number of expressions, with a possibility of invoking more Processes afterwards. If any of the applications or expressions caused an error exit due to wrong syntax or wrong logic, this information can be found in the sm.log file.

Log sample:

Process panel run.pre.exp in RAD se.call.process encountered error in line 1 (se.call.process,run.pre.exp)
Cannot evaluate expression (se.call.process,run.pre.exp)
Cannot evaluate expression (se.call.process,run.pre.exp)
Bad arg(2) oper = (se.call.process,run.pre.exp)
Cannot evaluate expression (se.call.process,run.pre.exp)
Cannot evaluate expression (se.call.process,run.pre.exp)
Bad arg(2) oper = (se.call.process,run.pre.exp)
Cannot evaluate expression (se.call.process,run.pre.exp)
Bad arg(2) oper nullsub (se.call.process,run.pre.exp)
Cannot evaluate expression (se.call.process,run.pre.exp)
Bad arg(2) oper  in  (se.call.process,run.pre.exp)
Cannot evaluate expression (se.call.process,run.pre.exp)
Unrecoverable error in application:  se.search.objects on panel call.list.engine
Unrecoverable error in application:  se.list.engine on panel call.process.1
Unrecoverable error in application:  se.call.process on panel run.pre.exp

In this example (not out-of-box), the error occurred in se.call.process, run.pre.exp, or in other words, while evaluating the initial expressions of the Process. To find out which Process was causing the issue, go through the steps outlined above and note the process from the line:

DBACCESS - Cache Find against file Process found 1 record, query: process="upgrade.pcs"

Go to the Process record by the name of upgrade.pcs and check for any statements on the initial expressions tab. In this specific case, the expression will include the word nullsub. For example, the expression in question for this test may be

$L.icount=nullsub($L.icount, anynumberIwant)

The variable, anynumberIwant, is not a valid field, literal or variable, so it will have to be changed to prevent this issue.

Print values of variables or results of expressions

In the Document Engine, the path through a work flow is often determined by the value assign to a field or variable. To determine the value assigned to a field or variable that influences the work flow, use the JavaScript print() function or use the log rtecall($L.void=rtecall(“log”, $L.rc, “message”) in the RAD expressions. The message can be a concatenated string such as

$L.message="The value of $L.test is " + $L.test

where $L.test is a variable that was assigned a character value.