XAPI Inbound Response Parsing API Usage Sample Code

This code sample shows the API usage for generating an inbound response from the JD Edwards EnterpriseOne XAPI executor to the JD Edwards EnterpriseOne originator:

JDEBFRTN (ID) JDEBFWINAPI SendOrderPromiseRequest (LPBHVRCOM lpBhvrCom, 
LPVOID lpVoid, LPDSD4205010 lpDS)
{
/****************************************************************
 * Variable declarations
****************************************************************/
  char    cPromisableLine          = ' ';
  int     nHeaderBackOrderAllowed  = ' ';
  HUSER   hUser;
  ID      JDEDBResult              = JDEDB_PASSED;
  BOOL    bExit                    = FALSE;   
  BOOL    bB4001040Called          = FALSE;
  BOOL    bXAPIInUse               = FALSE;
  BOOL    bAtLeastOneDetail        = FALSE;
  
  #ifdef jdeXAPI_CALLS_ENABLED
  XAPI_CALL_ID ulXAPICallID        = 0;
  XAPI_CALL_RETURN eXAPICallReturn = eEventCallSuccess;
  #endif
/****************************************************************
 * Declare structures
****************************************************************/
  DSD4001040   dsD4001040     = {0};
  DSD4205020   dsD4205020     = {0};
  DSD4205040   dsD4205040     = {0}; /* Header Info */
  DSD4205050   dsD4205050     = {0}; /* Detail Info */
  DSD4205010A   dsD4205010A   = {0}; /* Query Header */
  DSD4205010B   dsD4205010B   = {0} /* Query Detail */
  DSD0100042   dsD0100042     = {0};
  LPDSD4205040H  lpDSD4205040H    = (LPDSD4205040H) NULL;
  LPDSD4205050D  lpDSD4205050D    = (LPDSD4205050D) NULL;
  
/****************************************************************
 * Declare pointers
****************************************************************/
/****************************************************************
 * Check for NULL pointers
****************************************************************/
if ((lpBhvrCom == (LPBHVRCOM) NULL) ||
 (lpVoid == (LPVOID)  NULL) ||
 (lpDS == (LPDSD4205010) NULL))
{
jdeErrorSet (lpBhvrCom, lpVoid, (ID) 0, "4363", (LPVOID) NULL);
return ER_ERROR;
}

/* Retrieving hUser */
JDEDBResult = JDB_InitBhvr (lpBhvrCom, &hUser, (char *)NULL, 
JDEDB_COMMIT_AUTO ) ;

if ( JDEDBResult == JDEDB_FAILED )
{
jdeSetGBRError ( lpBhvrCom, lpVoid, (ID) 0, "4363" ) ;
return ER_ERROR ;
}
/****************************************************************
 * Set pointers
****************************************************************/
/****************************************************************
 * Main Processing
****************************************************************/
 /*-----------------------------------------------------*/
 /* Setting Up ErrorCode
      */
 lpDS->cErrorCode = '0';
 /*-----------------------------------------------------*/
 /* Determining if XAPI is ready to be used             */
               
 bXAPIInUse = FALSE;          
    
 #ifdef jdeXAPI_CALLS_ENABLED
 if(jdeXAPI_IsCallTypeEnabled("XAPIOPOUT") &&
     jdeXAPI_IsCallTypeEnabled("XAPIOPIN") )
 {          
     bXAPIInUse = TRUE;
 }
 #endif

 /*------------------------------------------------------*/
 /* Data validation and default values.                  */
 /* When Display Before Accept Mode is on, validate Key  */
 /* Information. Otherwise retrieve it from Header Record*/

 if((lpDS->cDisplayBeforeAcceptMode == '1')   &&
      ((MathZeroTest(&lpDS->mnOrderNumber) == 0) ||
       (IsStringBlank(lpDS->szOrderType))   ||
       (IsStringBlank(lpDS->szOrderCompany))))
 {  
      bExit = TRUE;
 }
 else
 {
     MathCopy(&dsD4205040.mnOrderNumber,&lpDS->mnOrderNumber);
     strncpy(dsD4205040.szOrderType,
       lpDS->szOrderType,
        sizeof(dsD4205040.szOrderType));
     strncpy(dsD4205040.szComputerID,
       lpDS->szOrderCompany,
        sizeof(dsD4205040.szOrderCompany));
     dsD4205040.cUseCacheOrWF = lpDS->cUseCacheOrWF;
     strncpy(dsD4205040.szComputerID,
       lpDS->szComputerID,
        sizeof(dsD4205040.szComputerID));
     MathCopy(&dsD4205040.mnJobNumber,&lpDS->mnJobNumber);
     jdeCallObject( "GetSalesOrderHeaderRecord",
          NULL,
          lpBhvrCom, lpVoid,
          (LPVOID)&dsD4205040,
          (CALLMAP *) NULL,
          (int) 0,
          (char *) NULL,
          (char *) NULL,
          (int) 0 ) ;

     lpDSD4205040H = (LPDSD4205040H)jdeRemoveDataPtr(hUser,
(ulong)dsD4205040.idHeaderRecord);

     if (lpDSD4205040H == NULL)
     {
          bExit = TRUE;
     }
 }

 /*-----------------------------------------------------*/
 /* Set error if exiting at this point                  */  
 if (bExit == TRUE)
 {
     lpDS->cErrorCode = '1';
     /* Sales Order Header Not Found */
     strncpy(lpDS->szErrorMessageID,
        "072T",
          sizeof(lpDS->szErrorMessageID));
     if (lpDS->cSuppressError != '1')
     {
        jdeErrorSet (lpBhvrCom, lpVoid, (ID) 0, "072T", (LPVOID) NULL);
     }
 }

 /*-----------------------------------------------------*/
 /* Default Promising Flag is always 1                  */
 lpDS->cDefaultPromisingFlags = 1;
 if (bExit == FALSE)
 {
  /*-----------------------------------------------------*/
  /* Call XAPIInit   */
  #ifdef jdeXAPI_CALLS_ENABLED
  if(bXAPIInUse == TRUE)
  {
     ulXAPICallID = jdeXAPI_Init( lpBhvrCom,
                   SendOrderPromiseRequest,
                "XAPIOPOUT",
                NULL,
                &eXAPICallReturn);
     if (eXAPICallReturn != eEventCallSuccess)
     {
          bExit = TRUE;
     }
  }
  #endif
  if (bExit == FALSE)
  {

     /*------------------------------------------------*/
     /* Loading Header Information                     */
     I4205010_PopulateQueryHeader(lpDS,&dsD4205010A
       lpDSD4205040H,&dsD0100042,hUser,lpVoid,lpBhvrCom);
     nHeaderBackOrderAllowed = dsD4205010A.nAllowBackorders;

     /*-------------------------------------------------*/
     /* Adding Header Information                       */
     #ifdef jdeXAPI_CALLS_ENABLED
     if(bXAPIInUse == TRUE)
     {
        eXAPICallReturn = jdeXAPI_Add( lpBhvrCom,
                   ulXAPICallID,
                   "SendOrderPromiseRequest",
                   "D4205010A",
                   &dsD4205010A,
                   sizeof(DSD4205010A));
        if (eXAPICallReturn != eEventCallSuccess)
        {
           bExit = TRUE;
        }
     }
     #endif
  }
 }
 if (bExit == FALSE)
 {

  /*-----------------------------------------------------*/
  /* Loading Detail Information                          */ 
  MathCopy(&dsD4205050.mnOrderNumber,&lpDS->mnOrderNumber);
  strncpy(dsD4205050.szOrderType,lpDS->szOrderType,
              sizeof(dsD4205050.szOrderType));
  strncpy(dsD4205050.szOrderCompany,lpDS->szOrderCompany,
              sizeof(dsD4205050.szOrderCompany));
  dsD4205050.cUseCacheOrWF = lpDS->cUseCacheOrWF;
  strncpy(dsD4205050.szComputerID,lpDS->szComputerID,
              sizeof(dsD4205050.szComputerID));
  MathCopy(&dsD4205050.mnJobNumber,&lpDS->mnJobNumber);
  if (lpDSD4205040H->cActionCode != 'A')
  {
     dsD4205050.cCheckTableAfterCache = '1';
  }
  else
  {
     dsD4205050.cCheckTableAfterCache = '0';
  }
  jdeCallObject( "GetSalesOrderDetailRecordOP",
     NULL,
     lpBhvrCom, lpVoid,
     (LPVOID)&dsD4205050,
     (CALLMAP *) NULL,
     (int) 0, (char *) NULL,
     (char *) NULL, (int) 0 ) ;

  if (dsD4205050.cRecordFound != '1')
  {
     bExit = TRUE;
     lpDS->cErrorCode = '1';

     /* Sales Order Detail Not Found */
     strncpy(lpDS->szErrorMessageID,"4162",
              sizeof(lpDS->szErrorMessageID));
     if (lpDS->cSuppressError != '1')
     {
        jdeErrorSet (lpBhvrCom, lpVoid, (ID) 0, "4162", (LPVOID) NULL);
     }
  }
  while ((dsD4205050.cRecordFound == '1') && (bExit == FALSE))
  {
     lpDSD4205050D = (LPDSD4205050D)jdeRemoveDataPtr( hUser, 
(ulong)dsD4205050.idDetailRecord);
     /* Reset flags */
     cPromisableLine = '0';     
     bB4001040Called = FALSE;

     /*-------------------------------------------------*/
     /* Evaluate the Record from F4211 (cDataSource = 2)*/   
     /*  to find out if we should promise the line      */
     /*  else find out from Order Promising Detail.     */

     if(dsD4205050.cDataSource == '1')
     {
        if (lpDSD4205050D->cOPPromiseLineYN == 'Y')
        {
           cPromisableLine = '1';
        }
     }
     else if(dsD4205050.cDataSource == '2')
     {     
        MathCopy ( &dsD4001040.mnShortItemNumber,
             &lpDSD4205050D->mnShortItemNumber);
        strncpy ( dsD4001040.szBranchPlant,
           lpDSD4205050D->szBusinessUnit,
              sizeof(dsD4001040.szBranchPlant));
                
        jdeCallObject  ( "GetItemMasterDescUOM",
                 NULL,
                 lpBhvrCom, lpVoid,
                  (LPVOID)&dsD4001040,
                  (CALLMAP *) NULL,
                  (int) 0, (char *) NULL,
                  (char *) NULL, (int) 0 ) ;
       
        bB4001040Called = TRUE;
       
        cPromisableLine = I4205010_IsLinePromisable(lpBhvrCom,lpVoid,
                   hUser,lpDS,lpDSD4205050D, dsD4001040.cStockingType);
     }
     if (cPromisableLine == '1')
     {

       /* Set this flag if at least one promisable */
       /*   detail record exists.                  */
       bAtLeastOneDetail = TRUE;

       if (bB4001040Called == FALSE)
       {
         MathCopy (&dsD4001040.mnShortItemNumber,
              &lpDSD4205050D->mnShortItemNumber);
         strncpy ( dsD4001040.szBranchPlant,
              lpDSD4205050D->szBusinessUnit,
              sizeof(dsD4001040.szBranchPlant));
                
       jdeCallObject  ( "GetItemMasterDescUOM",
                NULL,
                lpBhvrCom, lpVoid,
                (LPVOID)&dsD4001040,
                (CALLMAP *) NULL,
                (int) 0, (char *) NULL,
                (char *) NULL, (int) 0 ) ;
       }

       I4205010_PopulateQueryDetail( lpDS,&dsD4205010B,
                   lpDSD4205050D,
                &dsD4001040,
                &dsD4205010A,
                   &dsD0100042,
                cPromisableLine,
                   hUser,
                   lpVoid,
                lpBhvrCom);

       #ifdef jdeXAPI_CALLS_ENABLED
       if(bXAPIInUse == TRUE)
       {
         eXAPICallReturn = jdeXAPI_Add( lpBhvrCom,
                   ulXAPICallID,
                   "SendOrderPromiseRequest",
                   "D4205010B",
                   &dsD4205010B,
                   sizeof(DSD4205010B));
         if (eXAPICallReturn != eEventCallSuccess)
         {
              bExit = TRUE;
         } 
       }
       #endif
     }
   
     /*-------------------------------------------------*/
     /* Fetching the next Detail Record         */
     MathCopy(&dsD4205050.mnOrderNumber,&lpDS->mnOrderNumber);
     strncpy(dsD4205050.szOrderType,lpDS->szOrderType,
               sizeof(dsD4205050.szOrderType));
     strncpy(dsD4205050.szOrderCompany,lpDS->szOrderCompany,
              sizeof(dsD4205050.szOrderCompany));
     dsD4205050.cUseCacheOrWF = lpDS->cUseCacheOrWF;
     strncpy(dsD4205050.szComputerID,lpDS->szComputerID,
              sizeof(dsD4205050.szComputerID));
     MathCopy(&dsD4205050.mnJobNumber,&lpDS->mnJobNumber);
     if (lpDSD4205040H->cActionCode != 'A')
     {
        dsD4205050.cCheckTableAfterCache = '1';
        }
        else
        {
            dsD4205050.cCheckTableAfterCache = '0';
        }
        jdeCallObject( "GetSalesOrderDetailRecordOP",
                NULL,
                lpBhvrCom, lpVoid,
                (LPVOID)&dsD4205050,
                (CALLMAP *) NULL,
                (int) 0, (char *) NULL,
                (char *) NULL, (int) 0 ) ;
     }
     if (!bAtLeastOneDetail)
     {
        bExit = TRUE;
        lpDS->cErrorCode = '1';
        /* Sales Order Detail Not Found */
        strncpy(lpDS->szErrorMessageID,"4162",
                sizeof(lpDS->szErrorMessageID));
        if (lpDS->cSuppressError != '1')
        {
           jdeErrorSet (lpBhvrCom, lpVoid, (ID) 0, "4162", (LPVOID) NULL);
        }
     }
     if (bExit == FALSE)
     {
        #ifdef jdeXAPI_CALLS_ENABLED
        if(bXAPIInUse == TRUE)
        {
           eXAPICallReturn = jdeXAPI_Finalize( lpBhvrCom,
                   ulXAPICallID,
                   "SendOrderPromiseRequest",
                   "OrderPromiseCallback)";
           if (eXAPICallReturn != eEventCallSuccess)
           {
              bExit = TRUE;
           }
        }
        #endif
     }

     /*-------------------------------------------------*/
     /* Call B4205020 in Add Mode                       */
     if((bExit == FALSE) &&
         (lpDS->cDisplayBeforeAcceptMode != '1') &&
         (lpDS->cUseCacheOrWF == '2'))
     {
         MathCopy(&dsD4205020.mnOrderNumber,&lpDS->mnOrderNumber);
         strncpy(dsD4205020.szOrderType,lpDS->szOrderType,
              sizeof(dsD4205020.szOrderType));
         strncpy(dsD4205020.szOrderCompany,lpDS->szOrderCompany,
              sizeof(dsD4205020.szOrderCompany));
        strncpy(dsD4205020.szComputerID,lpDS->szComputerID,
              sizeof(dsD4205020.szComputerID));
        MathCopy(&dsD4205020.mnJobNumber,&lpDS->mnJobNumber);
    
        jdeCallObject( MaintainOPWorkFile,
            NULL,
            lpBhvrCom, lpVoid,
            (LPVOID)&dsD4205020,
            (CALLMAP *) NULL,
            (int) 0, (char *) NULL,
            (char *) NULL, (int) 0 ) ;
     }
  }

/***************************************************************
 * Function Clean Up
****************************************************************/
  #ifdef jdeXAPI_CALLS_ENABLED
  if (eXAPICallReturn != eEventCallSuccess)
  {
   /*-----------------------------------------------------*/
   /* CleanUp */
   if(bXAPIInUse == TRUE)
   {   
    jdeXAPI_Free( lpBhvrCom,
        ulXAPICallID,
        "SendOrderPromiseRequest");
   }

   lpDS->cErrorCode = '1';
   /* System Error - no reasonable error messages exist. */
   strncpy(lpDS->szErrorMessageID,"018Y",
                sizeof(lpDS->szErrorMessageID));
   if (lpDS->cSuppressError != '1')
   {
       jdeErrorSet (lpBhvrCom, lpVoid, (ID) 0, "018Y", (LPVOID) NULL);
   }
  }
  #endif
  if(lpDSD4205040H != (LPDSD4205040H)NULL)
  {
     jdeFree((void *)lpDSD4205040H);
  }
  if(lpDSD4205050D != (LPDSD4205050D)NULL)
  {
     jdeFree((void *)lpDSD4205050D);
  }
 return (ER_SUCCESS);
}