project BLF > class TApplication > method Synchronize


Parameters


icTypeinputcharacterSupported types:
LIMITED -> Will perform limited synchronization
FULL -> Will perform full synchronization
ocMessageoutputcharacter
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method TApplication.ExecuteAction


program code (program6/tapplication.p)

/* ================================================================================ */
/* Log the Synchronisation in vcLogFile                                             */
/* ================================================================================ */
<M-44 run GetLogFileLocation  (output vcLogFile (ocLogFile)) in TApplication>

output to value (vcLogFile) append.
put '':U  skip.
put unformatted string (now) '> ':U
    'TApplication.Synchronize: started (type = ':U icType ').' skip.
output close.
   
/* Check the Synchronize.config file. This file indicates to start ctlog tracing or not. */
assign vcSynchronizeConfig  = search("Synchronize.config":U).

if vcSynchronizeConfig <> ?
then do:
    input from value(vcSynchronizeConfig).

    repeat:
        import unformatted vcSynchronizeConfigLine no-error.
        if vcSynchronizeConfigLine begins "BLDebugLevel=":U
        then viDebugLevel = integer(substring(vcSynchronizeConfigLine, length("BLDebugLevel=":U, "CHARACTER":U) + 1, -1, "CHARACTER":U)) no-error.
    end.

    input close.
end.
else do:
    /* Create the config file at the same location as the server.xml */
    assign vcSynchronizeConfig = search("server.xml":U).

    if vcSynchronizeConfig <> ?
    then do:
        assign vcSynchronizeConfig = replace(vcSynchronizeConfig, "server.xml":U, "Synchronize.config":U).
        output to value(vcSynchronizeConfig).

        put "BLDebugLevel=0":U    skip.

        output close.
    end.
end.

Assign vcSyncLogin = 'mfg':U
       vcSyncPwd = '':U.

<Q-10 assign vlFcQueryRecordsAvailable = UserPrim (NoCache)
   (input 0, (UsrId)

    input 0, (UsrLogin)) in BUser >
If vlFcQueryRecordsAvailable <> False
Then Do:
    <Q-11 run SystBySystAdminUser (all) (Read) (NoCache)
       (output dataset tqSystBySystAdminUser) in BSystem >
    Find First tqSystBySystAdminUser No-error.
    If Available tqSystBySystAdminUser
    Then Do: 
        Assign vcSyncLogin = tqSystBySystAdminUser.tcUsrLogin.
        assign vhFcComponent = ?.
        <M-12 run MainBlock
           () in TCrypt>
        assign vhCrypthandle = vhFcComponent.
        
        <M-13 run DecryptString
           (input  tqSystBySystAdminUser.tcSystAdminUserPwd (icInputString), 
            output vcSyncPwd (ocOutputString), 
            output viFcReturnSuper (oiReturnStatus)) in TCrypt>   
                 
        run gipr_DeleteProcedure in vhCrypthandle.
        delete procedure vhCrypthandle.
    End.
End.

/* ================================================================================ */
/* Logging                                                                          */
/* ================================================================================ */
output to value (vcLogFile) append.
put unformatted string (now) '> ':U
    'TApplication.Synchronize: Starting session and establishing a login for ':U vcSyncLogin  skip.
output close.

/* Start and Open Session, login as mfg */
<I-1 {tFcStartAndOpenInstance
            &CLASS           = "Session"
            &SESSIONID       = "0"}>

if viDebugLevel > 0
then do:
    <M-15 run SetDebugLevel  (input  viDebugLevel (iiDebugLevel)) in Session>
end.

<M-3 run Login
   (input  vcSyncLogin (icLogin), 
    input  vcSyncPwd (icPassword), 
    input  '' (icExtra), 
    output vlValid (olValid), 
    output viFcReturnSuper (oiReturnStatus)) in Session>

/* ================================================================================ */
/* Logging                                                                          */
/* ================================================================================ */
output to value (vcLogFile) append.
put unformatted string (now) '> ':U
    'TApplication.Synchronize: Login executed (viFcReturnSuper=' viFcReturnSuper ', vlValid=' vlValid ').' skip.
output close.

if viFcReturnSuper < 0 or
   not vlValid
then do:
    assign oiReturnStatus = viFcReturnSuper
           ocMessage      =  trim( #T-14'Session.Login failed:':255(8914)T-14#) + 
                                     ' vcSyncLogin=' + vcSyncLogin + 
                                     ', ReturnStatus=' + string (viFcReturnSuper) +
                                     ', vlValid=' + string (vlValid).

    <I-16 {tFcCloseAndStopInstance
         &CLASS           = "Session"}>
    return.
end.

/* ================================================================================ */
/* Logging                                                                          */
/* ================================================================================ */
output to value (vcLogFile) append.
put unformatted string (now) '> ':U
    'TApplication.Synchronize: Starting BSystem and running ApiGetSynchronisationTopics and ApiSynchronise.' skip.
output close.

/* Start and Open BSystem */
<I-5 {tFcStartAndOpenInstance
            &CLASS           = "BSystem"
            &SESSIONID       = "viSessionTAppID"}>

/* Get the Synchronization topics */
<M-6 run ApiGetSynchronisationTopics
   (output tTopicTApp (tTopic), 
    output viFcReturnSuper (oiReturnStatus)) in BSystem>

/* For Single Topic Synchronization modify the topic temp-table record for the requested 
   topic and deselect all other topics from being synchronized */
if icType begins {&SYNCHRONIZETYPE-TOPIC}
then do:
   assign viTopicNumber = integer(substring(icType,index(icType,"TOPIC":U) + 5,-1,"CHARACTER":U)) no-error.
    if error-status:error
    then do:
        assign ocMessage = substitute(#T-17'Invalid synchronization topic number (&1).':50(9204)T-17#,substring(icType,index(icType,"TOPIC":U) + 5,-1,"CHARACTER":U))
               oiReturnStatus = -3.
    end.
    else do :
       for each tTopicTApp:
          if tTopicTApp.tiTopicNumber = viTopicNumber
          then  assign tTopicTApp.tcSynchronizeType = icType
                       tTopicTApp.tlSelected = true.
          else assign tTopicTApp.tlSelected = false.
       end.
    end.
end.

/* Run the synchronize method */
if viFcReturnSuper >= 0
then do:
    <M-7 run ApiSynchronise
       (input  icType (icSynchronizeType), 
        input-output tTopicTApp (tTopic), 
        output viFcReturnSuper (oiReturnStatus)) in BSystem>
        
    if viFcReturnSuper <> 0 
    then oiReturnStatus = viFcReturnSuper.
end.

/* Close BSystem and Session */
<I-8 {tFcCloseAndStopInstance
            &CLASS           = "BSystem"}>

<I-9 {tFcCloseAndStopInstance
            &CLASS           = "Session"}>
   
/* ================================================================================ */
/* Logging                                                                          */
/* ================================================================================ */
output to value (vcLogFile) append.
put unformatted string (now) '> ':U
    'TApplication.Synchronize: ended (Returnstatus= ':U oiReturnStatus ').' skip.
output close.