project QadFinancials > class BSharedSetMerge > method Merge

Description

Merges the contents of a master shared set with a redundant shared set. After the merge all references to the contents of the redundant shared set are replaced with a reference to the corresponding element in the master shared set and the redundant shared set elements are deleted. Finally the references to the redundant shared set are replaced with a reference to the master shared set and the redundant shared set is deleted.


Parameters


oiNumberOfMergedElementsoutputinteger
olEndOfFileoutputlogical
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program6/bsharedsetmerge.p)

/* =================================================================================================== */
/* Method      : Merge                                                                                 */
/* Desc        : This method performs real merge of elements from redundant and master shared set      */
/*               Because of possibility to follow up progress of merge, method is executed repeatedly  */
/*               and is invoked from user interface. At least this method performs execution of merge  */
/*               of one redundnat element. Then based on elapsed time next iterations is launched or   */
/*               not. Progress of merge operation is kept in instance dependent temporary file         */
/*               tSharedSetMergeData                                                                   */
/* --------------------------------------------------------------------------------------------------- */
/* Params:  (O)  NumberOfMergedElements  This paramter contains number of merged elements              */
/*          (O)  EndOfFile               Flag indicating whether all redundant elements are processed  */
/*                                       or not                                                        */
/* =================================================================================================== */

assign oiReturnStatus = -98
       viLocalReturn  = 0.

MAIN_BLOCK:
do:
    /* =================================================================================================== */
    /* Default output values                                                                               */
    /* =================================================================================================== */
    assign oiNumberOfMergedElements = 0
           olEndOfFile              = false
           viStartTime              = time.
    empty temp-table tReplicaDaemonQueueSSM.
    
    /* =================================================================================================== */
    /* Go through not-merged elements                                                                      */
    /* =================================================================================================== */
    do while true:
        /* =============================================================================================== */
        /* Get next record to be processed                                                                 */
        /* =============================================================================================== */
        find first tSharedSetMergeData where
                   tSharedSetMergeData.tlIsProcessed = false no-error.
        if not available tSharedSetMergeData
        then do:
            assign olEndOfFile = true.
            leave.
        end.
    
        /* =============================================================================================== */
        /* Provide additional actions/updates before real merge is executed                                */
        /* =============================================================================================== */
        <M-12 run MergeBeforeMerge
           (input  vcSharedSetMergeSharedSetType (icSharedSetTypeCode), 
            input  tSharedSetMergeData.tiMasterObjectId (iiMasterObjectId), 
            input  tSharedSetMergeData.tiRedundantObjectId (iiRedundantObjectId), 
            output viFcReturnSuper (oiReturnStatus)) in BSharedSetMerge>
        if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturn = 0 then assign viLocalReturn = viFcReturnSuper.
        if viLocalReturn   < 0 then leave MAIN_BLOCK.
    
        /* =============================================================================================== */
        /* Merge profiles pointing to redundant element                                                    */
        /* =============================================================================================== */
        <M-8 run MergeProfiles
           (input  tSharedSetMergeData.tiMasterObjectId (iiMasterObjectId), 
            input  tSharedSetMergeData.tiRedundantObjectId (iiRedundantObjectId), 
            output viFcReturnSuper (oiReturnStatus)) in BSharedSetMerge>
        if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturn = 0 then assign viLocalReturn = viFcReturnSuper.
        if viLocalReturn   < 0 then leave MAIN_BLOCK.
        
        /* =============================================================================================== */
        /* Replace element refrences                                                                       */
        /* =============================================================================================== */
        run value("ref_int/rss_":U + lc(vcSharedSetMergeSharedSetType) + ".p":U)
           (input {&TARGETPROCEDURE},
           input vcUserLogin,
           input viSessionId,
           input tSharedSetMergeData.tiRedundantObjectId,
           input tSharedSetMergeData.tiMasterObjectId,
           output viFcReturnSuper).
        if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturn = 0 then assign viLocalReturn = viFcReturnSuper.
        if viLocalReturn   < 0 then leave MAIN_BLOCK.
        
        /* =============================================================================================== */
        /* Delete redundant element                                                                        */
        /* =============================================================================================== */
        <M-7 run MergeDeleteElement
           (input  vcSharedSetMergeSharedSetType (icSharedSetTypeCode), 
            input  tSharedSetMergeData.tiRedundantObjectId (iiObjectId), 
            output viFcReturnSuper (oiReturnStatus)) in BSharedSetMerge>
        if viFcReturnSuper < 0 or viFcReturnSuper > 0 and viLocalReturn = 0 then assign viLocalReturn = viFcReturnSuper.
        if viLocalReturn   < 0 then leave MAIN_BLOCK.
        
        /* =============================================================================================== */
        /* Marded this element as process and increase number of processed elements                        */
        /* =============================================================================================== */
        assign tSharedSetMergeData.tlIsProcessed = true
               oiNumberOfMergedElements          = oiNumberOfMergedElements + 1.
    
        /* =============================================================================================== */
        /* Calculate time in seconds elapsed from last redundant element merge (in sec)                    */
        /* =============================================================================================== */
        assign viNowTime     = time
               viElapsedTime = (if viNowTime >= viStartTime
                                then viNowTime - viStartTime
                                else viNowTime + 24 * 60 * 60 - viStartTime).
    
        if viElapsedTime > 60
        then leave.
    end.  
    
end. /* MAIN_BLOCK */

/* =================================================================================================== */
/* Return                                                                                              */
/* =================================================================================================== */
assign oiReturnStatus = viLocalReturn.