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
oiNumberOfMergedElements | output | integer | |
olEndOfFile | output | logical | |
oiReturnStatus | output | integer | Return 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.