Error in document load

All,
I am loading an XML document and I am getting errors. The syntax is correct, but I get the error below when I try to run the code. I don't code for XML document loads too often, so i thought that I would pass this by the experts.

Progress 11.7

Error:
The GET-CHILD attribute on the X-NODEREF widget has invalid arguments. (4065) Invalid handle. Not initialized or points to a deleted object. (3135)

Code:
Code:
DEFINE INPUT PARAMETER pQDOc AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER pMessageLogger AS HANDLE NO-UNDO.

DEFINE VARIABLE hOptForm AS HANDLE NO-UNDO.

DEFINE VARIABLE hItem AS HANDLE NO-UNDO.
DEFINE VARIABLE hChild AS HANDLE NO-UNDO.

DEFINE VARIABLE hFormula AS HANDLE NO-UNDO.
DEFINE VARIABLE hFormSt AS HANDLE NO-UNDO.
DEFINE VARIABLE hArticle AS HANDLE NO-UNDO.
DEFINE VARIABLE hDesc1 AS HANDLE NO-UNDO.
DEFINE VARIABLE hDesc2 AS HANDLE NO-UNDO.
DEFINE VARIABLE hType AS HANDLE NO-UNDO.
DEFINE VARIABLE hGroup AS HANDLE NO-UNDO.
DEFINE VARIABLE hDraw AS HANDLE NO-UNDO.
DEFINE VARIABLE hProdLine AS HANDLE NO-UNDO.
DEFINE VARIABLE hCustPartCG AS HANDLE NO-UNDO.
DEFINE VARIABLE hCustPart AS HANDLE NO-UNDO.
DEFINE VARIABLE hCust AS HANDLE NO-UNDO.


DEFINE VARIABLE hPar AS HANDLE NO-UNDO.
DEFINE VARIABLE hComp AS HANDLE NO-UNDO.

DEFINE VARIABLE cName AS CHARACTER NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.

CREATE X-NODEREF hOptForm.
pQDOc:GET-DOCUMENT-ELEMENT(hOptForm).
DO i = 1 TO hOptForm:NUM-CHILDREN:
    hOptForm:GET-CHILD(hChild, i).
    cName = hChild:NAME.
    IF cName = "psFormula" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE

            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hFormula).
    END.
    IF cName = "psFormSt" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hFormSt).
    END.
    IF cName = "ptArticle" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hArticle).
    END.
    IF cName = "ptDesc1" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hDesc1).
    END.

    IF cName = "ptDesc2" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hDesc2).
    END.
    IF cName = "ptType" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hType).
    END.
    IF cName = "ptGroup" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hGroup).
    END.
    IF cName = "ptDraw" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hDraw).

    END.
    IF cName = "ptProdLine" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hProdLine).
    END.
    IF cName = "cpCustPartCG" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hCustPartCG).
    END.
    IF cName = "cpCustPart" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hCustPart).
    END.
    IF cName = "cpCust" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,

             INPUT-OUTPUT hCust).
    END.
    IF cName = "psPar" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hPar).
    END.
    IF cName = "psComp" THEN DO:
        RUN getDataNode IN THIS-PROCEDURE
            (INPUT pQDOc,
             INPUT hChild,
             INPUT-OUTPUT hComp).
    END.
END.
 
Last edited by a moderator:

Rob Fitzpatrick

ProgressTalk.com Sponsor
I don't know anything about x-noderefs, but...

The GET-CHILD attribute on the X-NODEREF widget has invalid arguments. (4065) Invalid handle. Not initialized or points to a deleted object. (3135)

Your one invocation of get-child is:
Code:
hOptForm:GET-CHILD(hChild, i).

Get-child takes an x-node-handle and an index. So the "invalid handle", which is "not initialized", is hChild.

And I don't see any initialization of hChild between its definition and the get-child method call.
 
Sorry, I copied the base code from a QAD QXtend session. I did make the bad assumption that the code was written correctly. I have done similar coding in the past, but I was having difficulty finding a good example.
I initialized the node hChild and the error is gone!

Thanks!
 
I got a new issue.
Now, I am trying to check the value of a node and it does not seem to work:

IF hPar:NODE-VALUE = "43241" THEN DO:
RUN logError IN pMessageLogger ("This sucks!").
RUN cleanup IN THIS-PROCEDURE.
RETURN ERROR.
END.

I added this code to the bottom and it should find hPar:NODE-VALUE to be equal to "43241" and export the message "This sucks!" into the error stream and it skips it.
I am so confused by this! Is there a better way to check the value?
 
Yeah, I started doing that. I am getting closer. It appears that the NODES do not contain the information that I was expected.
I'll be drinking early tonight!
 
Top