Page 1 of 1

Dynamic tree using recursion based array...help...

Posted: Tue Feb 15, 2011 3:16 am
by amnunez
Dear All,

I want to share my problem based on the topic above... the details are below:

Code: Select all | Expand


Given the table:
   
   IID          NAME                       ParentID       Level
     1          Test01                         0               2
     2          Test003a1                      1             3
     3          Test003a2                      1             3
     4          Test02                         0               2
     5          Test003b1                      4             3
     6          Test003b2                      4             3
     7          Test004                        6               4
 


Code: Select all | Expand


    FUNCTION uTreeInitDb()
    TREE aTree[i]

            TREEITEM aItem[i] PROMPT "Root"
                     aItem[i]:Cargo  := { "Root", Space(20), Space(20), Space(20)}
                     aItem[i]:nLevel := 1

                  nLvl := Len(aRec) + 1
                  o3 := aItem[i]
                  uFillChild(aItem[i])
    ENDTREE
     .........



   
//----------------------------------------------------------------------------//

FUNCTION uFillChild(oParent)
 LOCAL oErr, nAdsErr
 LOCAL nLevel, oTree, oItem

 TRY

  nCtr := nCtr + 1

  msginfo(cvaltochar(nLvlTmp) + ' -- '+ cvaltochar(aRec[nCtr-1][4]) )

  IF nLvlTmp <> aRec[nCtr-1][4]

     TREE oTree

  ELSE

     oTree := o3

  ENDIF

       IF nLvl <> nCtr

          IF nLvlTmp == aRec[nCtr-1][4]

             TREEITEM oItem PROMPT aRec[nCtr - 1][ 2 ]
                      oItem:Cargo  := {aRec[nCtr-1][1], aRec[nCtr-1][2], aRec[nCtr-1][3], aRec[nCtr-1][4]}
                      oItem:nlevel := aRec[nCtr-1][4]
                      msginfo('oooops')
                      oItem:bAction := { |o| o:SetTree( uFillChild( o ) ) , o:bACtion := nil } //o:SetTree( uFillChild( o ) )    //  The error stops here


          ELSE
               nLevel := oParent:nLevel + 1

               TREEITEM oItem PROMPT aRec[nCtr - 1][ 2 ]
                        oItem:Cargo  := {aRec[nCtr-1][1], aRec[nCtr-1][2], aRec[nCtr-1][3], aRec[nCtr-1][4]}
                        oItem:nlevel := nLevel
                        nLvlTmp := aRec[nCtr-1][4]
                        oItem:bAction := { |o| o:SetTree( uFillChild( o ) ), o:bACtion := nil }

          ENDIF
       ELSE

          TREEITEM oItem PROMPT aRec[nCtr - 1][ 2 ]
                   oItem:Cargo  := {aRec[nCtr-1][1], aRec[nCtr-1][2], aRec[nCtr-1][3], aRec[nCtr-1][4]}
                   oItem:nlevel := aRec[nCtr-1][4]
                   oItem:bAction  := { |o| MsgInfo( o:cPrompt ) }

       ENDIF

   IF nLvlTmp <> aRec[nCtr-1][4]
      ENDTREE
   ENDIF



 CATCH oErr

       IF ValType( oErr ) == "O"

          nAdsError := AdsGetLastError()

          MsgStop( '::AdsError    ' + '['+cValToChar(nAdsError)+'] ' + CRLF +;
                   '::SubSystem   ' + cValToChar( oErr:SubSystem   ) + CRLF +;
                   '::SubCode     ' + cValToChar( oErr:SubCode     ) + CRLF +;
                   '::Operation   ' + cValToChar( oErr:Operation   ) + CRLF +;
                   '::Description ' + cValToChar( oErr:Description ) + CRLF +;
                   '::Argument    ' + valToPrg( oErr:Args ), 'uFillChild()' )
       END

 END

RETURN oTree

     



I hope someone can help me to solve my problem... thanks in advance....

regards,
apollo