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); }