UBE: How to Troubleshoot Error Messages in Work Center When There Are No Valid Logs to Analyze Using F01131M

Purpose of Document

This document provides suggestions on troubleshooting based on an error message in the Work Center when the issue is intermittent or hard to replicate at will.

Overview

In running standard UBE reports where multi-level error messaging has been implemented, the error messages will be written based on the mechanism written at <Document 658785.1> E1: RDA: Simple Batch Error Message Example

The actual message will be written into the table F01131M - JDEM Multi Level Message. The information contained in this table includes the following:

Note: you may get this information through P98652 - Business Function Search as below:
Function NameSource ModuleDescriptionTemplate
Name
F0911FSBeginDoc B0900049 F0911 Begin Document D0900049A

To debug Set UBE Error get the event rule and look for the error code based on F01131M.TMPI information

If error is coming from the Business Function, use the following steps to troubleshoot:

  1. Open xxx.c file
     
  2. Ctrl + G (or Menu>Edit>Go To) then enter the line number that appears at F01131M.LNBR


     
  3. Look for the condition for the error

    *** Break In Code of B0900049 - F0911FSBeginDoc ***

    if ((MathZeroTest(&lpDS->mnDocNumber)) &&
                                   (lpDS->cDocAction == _J('A')))
    {
    /************************************************************************
    * Validate Document Number
    ************************************************************************/
    jdeStrncpy(dsD0900049F.szDocumentType, (const JCHAR *)(lpDS->szDocumentType), DIM(dsD0900049F.szDocumentType));
    MathCopy(&dsD0900049F.mnDocumentNumber, &lpDS->mnDocNumber);
    jdeStrncpy(dsD0900049F.szKeyCompany, (const JCHAR *)(lpDS->szCompanyKey), DIM(dsD0900049F.szKeyCompany));
    memcpy((void *)(&dsD0900049F.jdGLDate), (const void *)(&lpDS->jdGLDate),
    sizeof (dsD0900049F.jdGLDate));
    jdeStrncpy(dsD0900049F.szLedgerType, (const JCHAR *)(lpDS->szLedgerType),
    DIM(dsD0900049F.szLedgerType));
    dsD0900049F.cModelFlag = lpDS->cModelFlag;
    jdeCallObject(_J("F0911FSValidateDocNumber"), NULL, lpBhvrCom,
    lpVoid, (void *)&dsD0900049F, (CALLMAP *)NULL, (int)0, (JCHAR *)NULL,
    (JCHAR *)NULL, (int)0);
       if (dsD0900049F.cRecordExistsFlag == _J('1'))
       {
           jdeSetGBRError(lpBhvrCom, lpVoid, (ID)IDERRmnDocNumber_11, _J("0002"));
           lpDS->cErrorFlag = _J('2');
       }
    } /* end if document number isn't zero and action is 'A' */

    *** Break In Code ***
     
    Notes:


    For this example, the called report R0911Z1 exit from routine as xxxBeginDoc ends in error. Keep in mind the Master Business Function flow as below:

    1. xxxBeginDoc: Validate header/initialize variables and store header cache (if any)
    2. xxxEditLine: Validate Detail and create cache for detail
    3. xxxEditDoc: Compare header cache with detail cache (e.g., summary of detail has to be header)
    4. xxxEndDoc: Commit cache to DB and clear cache used

    *** Break In Code of B0900049 - F0911FSValidateDocNumber ***
    jdeStrncpy(dsF0911Key15.glkco, (const JCHAR *)(lpDS->szKeyCompany),DIM(dsF0911Key15.glkco));
    jdeStrncpy(dsF0911Key15.gldct, (const JCHAR *)(lpDS->szDocumentType),DIM(dsF0911Key15.gldct));
    MathCopy(&dsF0911Key15.gldoc, &lpDS->mnDocumentNumber);
    memcpy((void *)(&dsF0911Key15.gldgj), (const void *)(&lpDS->jdGLDate), sizeof (dsF0911Key15.gldgj));
    MathCopy(&dsF0911Key15.gljeln, &lpDS->mnJELineNumber);
    jdeStrncpy(dsF0911Key15.glextl, (const JCHAR *)(lpDS->szLineExtension),DIM(dsF0911Key15.glextl));
    jdeStrncpy(dsF0911Key15.gllt, (const JCHAR *)(lpDS->szLedgerType),DIM(dsF0911Key15.gllt));
    nNumKeysF0911 = 7;
    lpDS->cRecordExistsFlag = _J('0'); /* Note: cRecordExistFlag is initialized */
    /************************************************************************
    * Do a fetch keyed for account ledger record
    ************************************************************************/
    idJDBReturn = JDB_FetchKeyed(hRequestF0911, ID_F0911_DOC_TYPE__NUMBER___B,
    (void *)&dsF0911Key15, nNumKeysF0911,
    (void *)&dsColF0911, FALSE);

    if(idJDBReturn == JDEDB_PASSED) /* If a record is found then set cRecordExistsFlag to '1' */
    {
        lpDS->cRecordExistsFlag = _J('1'); /* cRecordExistFlag is set 1 */
    }
    *** Break In Code ***

    Notes:

  4. If needed compare the function with the jdedebug.log

    Example of jdedebug:

    ERROR INFO JDEERR - ID= 0, Error= 0002 - \\DeploymentServerName\E1Release\PathCode\PackageName\Source\b0900049.c, Line=675

    Notes:

Example

Supposed that some error messages are written in Work Center after submitting UBE R09110Z - Journal Entry Batch Processor as below

Error '0002' Error: Record Invalid
Error '088R' Blank Invalid for Explanation

For this example,

Error '0002' because F0911Z1.DOC (Document Number) is not zero whereas Action Code is 'A-Add'
Error '088R' because (Explanation) is Blank

 

Disclaimer: This document provides suggestions on one possible troubleshooting technique and is not meant to imply this is the best or only troubleshooting method. To apply this method, some level of knowledge in Report Design Aid, C Programming and capturing log information will be required.