project BLF > class Database Component > method GetXmlRepresentationDSAddTable


Parameters


icTableNameinputcharacter
ictcRowidinputcharacter
ictcParentRowidinputcharacter
ilHeaderOnlyinputlogical
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method database.GetXmlRepresentationDataset
method database.GetXmlRepresentationDSAddTable


program code (program1/database.p)

find first bDynRel1 where bDynRel1.tcFcTo = icTableName no-error.
if not available bDynRel1
then return.

find first bXMLTables1 where bXMLTables1.tcTableName = icTableName no-error.
if not available bXMLTables1
then do:
    create bXMLTables1.
    assign bXMLTables1.tcTableName = icTableName
           bXmlTables1.tlStatic    = no.
    create temp-table bXMLTables1.thTableHandle in widget-pool "non-persistent".
    bXMLTables1.thTableHandle:create-like(bDynRel1.thFcBuffer).
    bXMLTables1.thTableHandle:temp-table-prepare("t" + icTableName).
    bXMLTables1.thBuffer = bXMLTables1.thTableHandle:default-buffer-handle.
end.

create query vhQuery in widget-pool "non-persistent".
vhQuery:forward-only = yes.
vhQuery:set-buffers(bDynRel1.thFcBuffer).
if ictcParentRowid = ""
then vhQuery:query-prepare ("for each t_o" + icTableName + " where t_o" + icTableName + ".tc_Rowid = '" + ictcRowid + "'").
else vhQuery:query-prepare ("for each t_o" + icTableName + " where t_o" + icTableName + ".tc_ParentRowid = '" + ictcParentRowid + "'").
vhQuery:query-open().

do while true:

    vhQuery:get-next().
    if vhQuery:query-off-end
    then leave.

    bXMLTables1.thBuffer:buffer-create().
    bXMLTables1.thBuffer:buffer-copy(bDynRel1.thFcBuffer).
    bXMLTables1.thBuffer:buffer-release().
    
    /* Special delivery for tTransString. This table can have more than one parent. */
    if can-find (first tTransString where tTransString.tc_ParentRowid = bDynRel1.thFcBuffer::tc_Rowid)
    then do:
        vhTRSBuffer = buffer tTransString:handle.
        
        find first bXMLTables2 where bXMLTables2.tcTableName = "TransString" no-error.
        if not available bXMLTables2
        then do:
            create bXMLTables2.
            assign bXMLTables2.tcTableName = "TransString"
                   bXmlTables2.tlStatic    = no.
            create temp-table bXMLTables2.thTableHandle in widget-pool "non-persistent".
            bXMLTables2.thTableHandle:create-like(vhTRSBuffer).
            bXMLTables2.thTableHandle:temp-table-prepare("tTransString").
            bXMLTables2.thBuffer = bXMLTables2.thTableHandle:default-buffer-handle.
        end.

        for each tTransString where tTransString.tc_ParentRowid = bDynRel1.thFcBuffer::tc_Rowid on error undo, throw:

            bXMLTables2.thBuffer:buffer-create().
            bXMLTables2.thBuffer:buffer-copy(vhTRSBuffer).
            bXMLTables2.thBuffer:buffer-release().
        end.
    end.

    if not ilHeaderOnly
    then for each bDynRel2 where
                 (bDynRel2.tcFcFrom = icTableName and
                  bDynRel2.tcParent = "") or
                  bDynRel2.tcParent begins (icTableName + ",") on error undo, throw:
        <M-60 run GetXmlRepresentationDSAddTable
           (input  bDynRel2.tcFcTo (icTableName), 
            input  '' (ictcRowid), 
            input  bDynRel1.thFcBuffer::tc_Rowid (ictcParentRowid), 
            input  ilHeaderOnly (ilHeaderOnly), 
            output viFcReturnSuper (oiReturnStatus)) in database>
        if viFcReturnSuper <> 0
        then oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0
        then return.
    end.
end.

finally:
    if vhQuery <> ?
    then do:
        vhQuery:query-close().
        delete object vhQuery.
        vhQuery = ?.
    end.
end finally.