RUN pLoadDataFromXml.
/******************************Load the data from xml*********************/
PROCEDURE pLoadDataFromXml:
/* *************************** Definitions *************************** */
DEFINE VARIABLE xhDoc AS HANDLE NO-UNDO.
DEFINE VARIABLE xhReport AS HANDLE NO-UNDO.
DEFINE VARIABLE xhColumn AS HANDLE NO-UNDO.
DEFINE VARIABLE xhField AS HANDLE NO-UNDO.
DEFINE VARIABLE xhData AS HANDLE NO-UNDO.
DEFINE VARIABLE xhRecord AS HANDLE NO-UNDO.
DEFINE VARIABLE xhValues AS HANDLE NO-UNDO.
DEFINE VARIABLE iDatacounter AS INTEGER NO-UNDO .
DEFINE VARIABLE iRecordcounter AS INTEGER NO-UNDO .
DEFINE VARIABLE iReportCounter AS INTEGER NO-UNDO.
DEFINE VARIABLE iColumnCounter AS INTEGER NO-UNDO.
DEFINE VARIABLE iSeq AS INTEGER NO-UNDO INIT 1000.
DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFieldValue AS CHARACTER NO-UNDO.
DEFINE VARIABLE cRecodValue AS CHARACTER NO-UNDO.
DEFINE VARIABLE cDataType AS CHARACTER NO-UNDO.
DEFINE VARIABLE cColumnName AS CHARACTER NO-UNDO.
DEFINE VARIABLE tthDisplay AS HANDLE NO-UNDO.
DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
DEFINE VARIABLE hDisplayValue AS HANDLE NO-UNDO.
DEFINE VARIABLE xhTextValue AS HANDLE NO-UNDO.
DEFINE VARIABLE cTextValue AS CHARACTER NO-UNDO.
DEFINE VARIABLE hBufferField AS HANDLE NO-UNDO EXTENT 18.
DEFINE VARIABLE lReportCheck AS LOGICAL NO-UNDO.
DEFINE VARIABLE lColumnCheck AS LOGICAL NO-UNDO.
/*****************Create the Nodes *******************/
CREATE X-DOCUMENT xhDoc.
CREATE X-NODEREF xhReport.
CREATE X-NODEREF xhColumn.
CREATE X-NODEREF xhField.
CREATE X-NODEREF xhData.
CREATE X-NODEREF xhRecord.
CREATE X-NODEREF xhValues.
CREATE X-NODEREF xhTextValue.
/***************DATA FROM XML ***********/
xhDoc:LOAD("file","c:\customer.xml",FALSE).
xhDoc:GET-DOCUMENT-ELEMENT(xhReport).
/*Get the Report Node child */
lReportCheck = xhReport:GET-CHILD(xhColumn,1).
/*Create the Temp Table*/
CREATE TEMP-TABLE tthDisplay.
REPEAT iColumnCounter = 1 TO xhColumn:NUM-CHILDREN:
/*Get the Column Values */
lColumnCheck = xhColumn:GET-CHILD(xhField,iColumnCounter).
/* IF xhField:NUM-CHILDREN < 1 THEN LEAVE. */
/* Read the values of column node */
cFieldNames = (xhField:ATTRIBUTE-NAMES).
cDataType= xhField:GET-ATTRIBUTE(ENTRY(1, cFieldNames)).
cColumnName=xhField:GET-ATTRIBUTE(ENTRY(4, cFieldNames)).
/* MESSAGE cColumnName VIEW-AS ALERT-BOX.*/
/* Add the dynamic table columns */
tthDisplay:ADD-NEW-FIELD(cColumnName,cDataType).
END.
/*Create the sequence for row*/
/* tthDisplay:ADD-NEW-FIELD("Sequence", "INTEGER",0,"9999",1000).*/
/* */
/* tthDisplay:ADD-NEW-INDEX("SeqIndex", YES). */
/* tthDisplay:ADD-INDEX-FIELD("SeqIndex", "Sequence"). */
/* Prepare the temp table */
tthDisplay:TEMP-TABLE-PREPARE("DynamicTable").
/*CREATE BUFFER hBuffer FOR TABLE tthDisplay
EFAULT-BUFFER-HANDLE.*/
/*Get the default buffer for table*/
hBuffer =tthDisplay
EFAULT-BUFFER-HANDLE.
DISPLAY hBuffer:NAME FORMAT "x(20)".
/***Get the Data Column ***/
lReportCheck = xhReport:GET-CHILD(xhData,2).
REPEAT iDatacounter= 1 TO xhData:NUM-CHILDREN:
/*create the buffer */
hBuffer:BUFFER-CREATE().
xhData:GET-CHILD(xhRecord,iDatacounter).
/* Get the Record Columns */
REPEAT iRecordcounter = 1 TO xhRecord:NUM-CHILDREN:
xhRecord:GET-CHILD(xhValues,iRecordcounter).
IF xhValues:NUM-CHILDREN < 1 THEN NEXT.
/*Read the column name*/
cRecodValue =STRING(xhValues:NAME).
hDisplayValue=hBuffer:BUFFER-FIELD(xhValues:NAME) .
xhValues:GET-CHILD(xhTextValue,1).
/*Assign the value to that column */
cTextValue =xhTextValue:NODE-VALUE.
hDisplayValue:BUFFER-VALUE = cTextValue .
END. /*Repeat xhRecord */
/* hBuffer:BUFFER-FIELD("Sequence"):BUFFER-VALUE = iSeq.*/
/* iSeq = iSeq + 1. */
END. /* Repeat xhData */
/*****create the query *****/
CREATE QUERY hQuery.
/* set buffer to query */
hQuery:SET-BUFFERS(hBuffer).
/***Query prepare statement***/
hQuery:QUERY-PREPARE("FOR EACH " + hBuffer:NAME).
hQuery:QUERY-OPEN().
/***Read the values from query***/
hQuery:GET-FIRST(NO-LOCK).
REPEAT WHILE NOT hQuery:QUERY-OFF-END:
REPEAT iReportCounter = 1 TO hBuffer:NUM-FIELDS:
/***Set the column name from buffer**/
hBufferField[iReportCounter]=hBuffer:BUFFER-FIELD(iReportCounter).
DISPLAY hBufferField[iReportCounter]:NAME STRING(hBufferField[iReportCounter]:BUFFER-VALUE).
END.
hQuery:GET-NEXT(NO-LOCK).
END. /***end of hquery ***/
hBuffer:BUFFER-RELEASE().
hQuery:QUERY-CLOSE().
/**** Delete objects****/
DELETE OBJECT xhDoc.
DELETE OBJECT xhColumn.
DELETE OBJECT xhData.
DELETE OBJECT xhField.
DELETE OBJECT xhRecord.
DELETE OBJECT xhReport.
DELETE OBJECT xhValues.
DELETE OBJECT hQuery.
END PROCEDURE.
Finaly i did my question
Thanks every one