project BLF > class BXmlDaemonQueue > method SetPublicTables

Description

Updates the contents of the class dataset.
When requested, the input data will be validated first, and the class dataset will only be updated when the input data is correct.
When no validation is requested, the input data is written to the class dataset unconditionally, but this data cannot be written to the database (method DataSave will return an error). The data can only be saved as a draft instance.


Parameters


il_Validateinputlogicalvalidate input data
BXmlDaemonQueueinputdatasetclass dataset
oiReturnStatusoutputintegererror status


program code (program/bxmldaemonqueue.p)

    for each t_sfcDaemonQueue:
        if t_sfcDaemonQueue.tc_Status = "D":U
        then do:
            run gipr_Delete_sfcDaemonQueueLog (input t_sfcDaemonQueue.tc_Rowid).
            run gipr_Delete_sXmlDaemonQueue (input t_sfcDaemonQueue.tc_Rowid).
        end.
        find first tFcRowidConvert where
                   tFcRowidConvert.tcFcOldRowid = t_sfcDaemonQueue.tc_Rowid and
                   tFcRowidConvert.tlFcOk       no-error.
        if available tFcRowidConvert
        then assign t_sfcDaemonQueue.tc_Rowid = tFcRowidConvert.tcFcNewRowid.
    end.

    for each t_ofcDaemonQueue where
        not can-find (t_sfcDaemonQueue where t_sfcDaemonQueue.tc_Rowid = t_ofcDaemonQueue.tc_Rowid):
        create t_sfcDaemonQueue.
        raw-transfer t_ofcDaemonQueue to t_sfcDaemonQueue.
    end.

    for each t_sfcDaemonQueueLog:
        find first tFcRowidConvert where
                   tFcRowidConvert.tcFcOldRowid = t_sfcDaemonQueueLog.tc_ParentRowid and
                   tFcRowidConvert.tlFcOk       no-error.
        if available tFcRowidConvert
        then assign t_sfcDaemonQueueLog.tc_ParentRowid = tFcRowidConvert.tcFcNewRowid.
        find first tFcRowidConvert where
                   tFcRowidConvert.tcFcOldRowid = t_sfcDaemonQueueLog.tc_Rowid and
                   tFcRowidConvert.tlFcOk       no-error.
        if available tFcRowidConvert
        then assign t_sfcDaemonQueueLog.tc_Rowid = tFcRowidConvert.tcFcNewRowid.
    end.

    for each t_ofcDaemonQueueLog where
        not can-find (t_sfcDaemonQueueLog where t_sfcDaemonQueueLog.tc_Rowid = t_ofcDaemonQueueLog.tc_Rowid) and
        not can-find (t_sfcDaemonQueue where t_sfcDaemonQueue.tc_Rowid = t_ofcDaemonQueueLog.tc_ParentRowid and t_sfcDaemonQueue.tc_Status = "D":U):
        create t_sfcDaemonQueueLog.
        raw-transfer t_ofcDaemonQueueLog to t_sfcDaemonQueueLog.
    end.

    for each t_sXmlDaemonQueue:
        if t_sXmlDaemonQueue.tc_Status = "D":U
        then do:
            run gipr_Delete_sXmlDaemonQueueObject (input t_sXmlDaemonQueue.tc_Rowid).
            run gipr_Delete_sXmlDaemonQueueSegment (input t_sXmlDaemonQueue.tc_Rowid).
        end.
        find first tFcRowidConvert where
                   tFcRowidConvert.tcFcOldRowid = t_sXmlDaemonQueue.tc_ParentRowid and
                   tFcRowidConvert.tlFcOk       no-error.
        if available tFcRowidConvert
        then assign t_sXmlDaemonQueue.tc_ParentRowid = tFcRowidConvert.tcFcNewRowid.
        find first tFcRowidConvert where
                   tFcRowidConvert.tcFcOldRowid = t_sXmlDaemonQueue.tc_Rowid and
                   tFcRowidConvert.tlFcOk       no-error.
        if available tFcRowidConvert
        then assign t_sXmlDaemonQueue.tc_Rowid = tFcRowidConvert.tcFcNewRowid.
    end.

    for each t_oXmlDaemonQueue where
        not can-find (t_sXmlDaemonQueue where t_sXmlDaemonQueue.tc_Rowid = t_oXmlDaemonQueue.tc_Rowid) and
        not can-find (t_sfcDaemonQueue where t_sfcDaemonQueue.tc_Rowid = t_oXmlDaemonQueue.tc_ParentRowid and t_sfcDaemonQueue.tc_Status = "D":U):
        create t_sXmlDaemonQueue.
        raw-transfer t_oXmlDaemonQueue to t_sXmlDaemonQueue.
    end.

    for each t_sXmlDaemonQueueObject:
        find first tFcRowidConvert where
                   tFcRowidConvert.tcFcOldRowid = t_sXmlDaemonQueueObject.tc_ParentRowid and
                   tFcRowidConvert.tlFcOk       no-error.
        if available tFcRowidConvert
        then assign t_sXmlDaemonQueueObject.tc_ParentRowid = tFcRowidConvert.tcFcNewRowid.
        find first tFcRowidConvert where
                   tFcRowidConvert.tcFcOldRowid = t_sXmlDaemonQueueObject.tc_Rowid and
                   tFcRowidConvert.tlFcOk       no-error.
        if available tFcRowidConvert
        then assign t_sXmlDaemonQueueObject.tc_Rowid = tFcRowidConvert.tcFcNewRowid.
    end.

    for each t_oXmlDaemonQueueObject where
        not can-find (t_sXmlDaemonQueueObject where t_sXmlDaemonQueueObject.tc_Rowid = t_oXmlDaemonQueueObject.tc_Rowid) and
        not can-find (t_sXmlDaemonQueue where t_sXmlDaemonQueue.tc_Rowid = t_oXmlDaemonQueueObject.tc_ParentRowid and t_sXmlDaemonQueue.tc_Status = "D":U):
        create t_sXmlDaemonQueueObject.
        raw-transfer t_oXmlDaemonQueueObject to t_sXmlDaemonQueueObject.
    end.

    for each t_sXmlDaemonQueueSegment:
        find first tFcRowidConvert where
                   tFcRowidConvert.tcFcOldRowid = t_sXmlDaemonQueueSegment.tc_ParentRowid and
                   tFcRowidConvert.tlFcOk       no-error.
        if available tFcRowidConvert
        then assign t_sXmlDaemonQueueSegment.tc_ParentRowid = tFcRowidConvert.tcFcNewRowid.
        find first tFcRowidConvert where
                   tFcRowidConvert.tcFcOldRowid = t_sXmlDaemonQueueSegment.tc_Rowid and
                   tFcRowidConvert.tlFcOk       no-error.
        if available tFcRowidConvert
        then assign t_sXmlDaemonQueueSegment.tc_Rowid = tFcRowidConvert.tcFcNewRowid.
    end.

    for each t_oXmlDaemonQueueSegment where
        not can-find (t_sXmlDaemonQueueSegment where t_sXmlDaemonQueueSegment.tc_Rowid = t_oXmlDaemonQueueSegment.tc_Rowid) and
        not can-find (t_sXmlDaemonQueue where t_sXmlDaemonQueue.tc_Rowid = t_oXmlDaemonQueueSegment.tc_ParentRowid and t_sXmlDaemonQueue.tc_Status = "D":U):
        create t_sXmlDaemonQueueSegment.
        raw-transfer t_oXmlDaemonQueueSegment to t_sXmlDaemonQueueSegment.
    end.

    if il_Validate
    then do:
        { includes/bfcrun.i
          &procedure  = "CheckValidationExceptionList"
          &parameters = "input true, output vl_validate" }
    end.

    if vl_Validate
    then do:
        { includes/bfcrun.i
          &procedure  = "gipr_CompleteSTables" }
        { includes/bfcrun.i
          &procedure  = "ValidateComponent"
          &parameters = "output oiReturnStatus" }
    end.

    if oiReturnStatus >= 0
    then do:
        { includes/bfcrun.i
          &procedure  = "gipr_SetTables"
          &parameters = "output viFcReturnSuper" }
        if viFcReturnSuper <> 0
        then assign oiReturnStatus = viFcReturnSuper.
    end.

    if  il_Validate
    and oiReturnStatus >= 0
    then do:
        { includes/bfcrun.i
          &procedure  = "AdditionalUpdates"
          &parameters = "output viFcReturnSuper" }
        if viFcReturnSuper <> 0
        then assign oiReturnStatus = viFcReturnSuper.
    end.

    if oiReturnStatus >= 0
    then assign vlFcDataValidated = il_Validate.