Thanks Brian.
Here's the Code
/*****************************************************************************
* Source File: b56propo
*
* Description: Parse XML for Proposal Source File
*
* History:
* Date Programmer SAR# - Description
* ---------- ---------- -------------------------------------------
* Author 5/30/2018 Unkno Unknown - Created
*
* Copyright (c) J.D. Edwards World Source Company, 1996
*
* This unpublished material is proprietary to J.D. Edwards World Source Company.
* All rights reserved. The methods and techniques described herein are
* considered trade secrets and/or confidential. Reproduction or
* distribution, in whole or in part, is forbidden except by express
* written permission of J.D. Edwards World Source Company.
****************************************************************************/
/**************************************************************************
* Notes:
*
**************************************************************************/
#include <b56propo.h>
/**************************************************************************
* Business Function: CopyProposalXMLFile
*
* Description: Copy Propsal XML file to Table
*
* Parameters:
* LPBHVRCOM lpBhvrCom Business Function Communications
* LPVOID lpVoid Void Parameter - DO NOT USE!
* LPDSD56PR lpDS Parameter Data Structure Pointer
*
*************************************************************************/
JDEBFRTN(ID) JDEBFWINAPI CopyProposalXMLFile(LPBHVRCOM lpBhvrCom, LPVOID lpVoid, LPDSD56PROPOSA lpDS)
{
#ifdef SOA_ENABLED
/************************************************************************
* Variable declarations
************************************************************************/
/************************************************************************
* Variable declarations
************************************************************************/
FILE *fpInFile = (FILE*)NULL;
JCHAR szErrorMsg[201] = _J("\0");
XRCS_hParser hParser = NULL;
XRCS_hDocument hDoc = NULL;
XRCS_hElement hRootElement = NULL;
XRCS_Status eXRCSStatus = XRCS_SUCCESS;
XRCS_hElement *hCMElements = (XRCS_hElement)NULL;
XRCS_hElement *hAssignElements = (XRCS_hElement)NULL;
XRCS_hElement *hAssignRowElements = (XRCS_hElement)NULL;
ID idReturnValue = ER_SUCCESS;
unsigned int nNumOfCMNodes = 0;
unsigned int nCMNodeCounter = 0;
unsigned int nNumOfAssignNodes = 0;
unsigned int nAssignNodeCounter = 0;
unsigned int nNumOfAssignRowNodes = 0;
unsigned int nAssignRowNodeCounter = 0;
JCHAR *szElementText = (JCHAR*)NULL;
JCHAR *szElementName = (JCHAR*)NULL;
ID idJDBReturn = JDEDB_PASSED;
JCHAR *newXMLString = (JCHAR*)NULL;
unsigned int n_Ele = 0;
HUSER hUser = (HUSER)NULL;
/************************************************************************
* Declare structures
************************************************************************/
/************************************************************************
* Declare pointers
************************************************************************/
/************************************************************************
* Check for NULL pointers
************************************************************************/
if ((lpBhvrCom == (LPBHVRCOM)NULL) ||
(lpVoid == (LPVOID)NULL) ||
(lpDS == (LPDSD56PROPOSA)NULL))
{
jdeErrorSet(lpBhvrCom, lpVoid, (ID)0, _J("4363"), (LPVOID)NULL);
return ER_ERROR;
}
idJDBReturn = JDB_InitBhvr(lpBhvrCom, &hUser, (JCHAR *)NULL, JDEDB_COMMIT_AUTO);
if (idJDBReturn != JDEDB_PASSED)
{
JDB_FreeBhvr(hUser);
return ER_ERROR;
}
/************************************************************************
* Set pointers
************************************************************************/
/************************************************************************
* Main Processing
************************************************************************/
/* Open the File in Read only mode */
fpInFile = jdeFopen(lpDS->szFlatFilePath, _J("r"));
if (fpInFile != (FILE*)NULL)
{
eXRCSStatus = XRCS_initEngine();
if (eXRCSStatus == XRCS_SUCCESS)
{
eXRCSStatus = XRCS_getParser(&hParser);
if (hParser)
{
eXRCSStatus = XRCS_parseXMLFile(hParser, lpDS->szFlatFilePath, &hDoc);
if (hDoc)
{
/* Success Parsing, Begin Import */
XRCS_getDocumentElement(hDoc, &hRootElement);
eXRCSStatus = XRCS_serializeDocumentToXMLStringNoEncoding(hDoc, &newXMLString);
if (hRootElement)
{
XRCS_getElementChildren(hRootElement, &hCMElements, &nNumOfCMNodes);
XRCS_getElementsByTagName(hRootElement, _J("Option"), &hCMElements, &n_Ele);
XRCS_getElementName(hCMElements[0], &szElementName);
eXRCSStatus = XRCS_getElementText(hCMElements[0], &szElementText);
/*Loop though xml*/
while (nCMNodeCounter < nNumOfCMNodes)
{
XRCS_getElementName(hCMElements[nCMNodeCounter], &szElementName);
if (jdeStrcmp(szElementName, _J("Job")) == 0)
{
XRCS_getElementChildren(hCMElements[nCMNodeCounter], &hAssignElements, &nNumOfAssignNodes);
nAssignNodeCounter = 0;
while (nAssignNodeCounter < nNumOfAssignNodes)
{
XRCS_getElementName(hAssignElements[nAssignNodeCounter], &szElementName);
/* process AssignmentRow elements */
if (jdeStrcmp(szElementName, _J("Proposal")) == 0)
{
XRCS_getElementChildren(hAssignElements[nAssignNodeCounter], &hAssignRowElements, &nNumOfAssignRowNodes);
nAssignRowNodeCounter = 0;
while (nAssignRowNodeCounter < nNumOfAssignRowNodes)
{
XRCS_getElementName(hAssignRowElements[nAssignRowNodeCounter], &szElementName);
if (jdeStrcmp(szElementName, _J("Action")) == 0)
{ /* AssignmentIdGUID elements will be processed below, get the element text */
XRCS_getElementText(hAssignRowElements[nAssignRowNodeCounter], &szElementText);
}
nAssignRowNodeCounter++;
}
XRCS_freeElementArray(hAssignRowElements, nNumOfAssignRowNodes);
}
nAssignNodeCounter++;
}
XRCS_freeElementArray(hAssignElements, nNumOfAssignNodes);
XRCS_freeString(szElementName);
szElementName = (JCHAR *)NULL;
if (szElementText != (JCHAR *)NULL)
{
XRCS_freeString(szElementText);
szElementText = (JCHAR *)NULL;
}
}
nCMNodeCounter++;
}
XRCS_freeElementArray(hCMElements, nNumOfCMNodes);
XRCS_freeElement(hRootElement);
}
else
{
jdeSprintf(szErrorMsg, _J("XML, XRCS_getDocumentElementXML Failed for [%ls]"), lpDS->szFlatFilePath);
jdeWriteLog(_J("b56propo"), 0, szErrorMsg);
}
XRCS_freeDocument(hDoc);
}
else
{
jdeSprintf(szErrorMsg, _J("XML File Parser, XRCS_parseXMLFile Failed for [%ls]"), lpDS->szFlatFilePath);
jdeWriteLog(_J("b56propo"), 0, szErrorMsg);
}
XRCS_freeParser(hParser);
}
else
{
jdeSprintf(szErrorMsg, _J("XML File Parser, XRCS_getParser, Failed"));
jdeWriteLog(_J("b56propo"), 0, szErrorMsg);
}
XRCS_terminateEngine();
}
jdeFclose(fpInFile);
}
#else
jdeTraceSz(NULL, _J("b56propo - called but system does not have SOA_ENABLED defined."));
#endif
}