project BLF > class Database Component > method GetXmlRepresentationDSAddTable
Parameters
icTableName | input | character | |
ictcRowid | input | character | |
ictcParentRowid | input | character | |
ilHeaderOnly | input | logical | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
BLF
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.