project BLF > class BDomain > method SetDomainTypeAsSystem

Description

Select another domain as system domain (= default domain).


Parameters


iiDomainIDinputinteger
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method BSystem.AdditionalUpdates


program code (program1/bdomain.p)

assign oiReturnStatus      = -98
       viLocalReturnStatus = 0.

if iiDomainID = 0 or
   iiDomainID = ?
then do:
    <M-15 run SetMessage
       (input  trim(#T-1'Invalid domain ID ($1) passed. Unable to set it as system domain.':255(8851)T-1#) (icMessage), 
        input  '0':U (icArguments), 
        input  '':U (icFieldName), 
        input  '':U (icFieldValue), 
        input  'E':U (icType), 
        input  3 (iiSeverity), 
        input  '':U (icRowid), 
        input  'BLF-71':U (icFcMsgNumber), 
        input  '':U (icFcExplanation), 
        input  '':U (icFcIdentification), 
        input  '':U (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BDomain>

    assign oiReturnStatus = -1.
    return.
end.

<M-1 run ClearData
   (output viFcReturnSuper (oiReturnStatus)) in BDomain>

if viFcReturnSuper < 0
then do:
    assign oiReturnStatus = viFcReturnSuper.
    return.
end.

if viLocalReturnStatus = 0
then assign viLocalReturnStatus = viFcReturnSuper.

<M-2 run DataLoad
   (input  '':U (icRowids), 
    input  '':U (icPkeys), 
    input  string(iiDomainID) (icObjectIds), 
    input  '':U (icFreeform), 
    input  false (ilKeepPrevious), 
    output viFcReturnSuper (oiReturnStatus)) in BDomain>

if viFcReturnSuper < 0
then do:
    if viFcReturnSuper = -4
    then do:
        <M-16 run SetMessage
           (input  trim(#T-18'Invalid domain ID ($1) passed. Unable to set it as system domain.':255(8851)T-18#) (icMessage), 
            input  string(iiDomainID) (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  '':U (icRowid), 
            input  'BLF-72':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BDomain>
    end.

    assign oiReturnStatus = viFcReturnSuper.
    return.
end.

if viLocalReturnStatus = 0
then assign viLocalReturnStatus = viFcReturnSuper.

find tDomains
     no-error.

if not available tDomains
then do:
    <M-19 run SetMessage
       (input  trim(#T-19'Previously loaded domain (ID: $1) could not be found.':255(8852)T-19#) (icMessage), 
        input  string(iiDomainID) (icArguments), 
        input  '':U (icFieldName), 
        input  '':U (icFieldValue), 
        input  'E':U (icType), 
        input  3 (iiSeverity), 
        input  '':U (icRowid), 
        input  'BLF-73':U (icFcMsgNumber), 
        input  '':U (icFcExplanation), 
        input  '':U (icFcIdentification), 
        input  '':U (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BDomain>

    assign oiReturnStatus = -3.
    return.
end.

if tDomains.DomainType = {&DOMAINSDOMAINTYPE-SYSTEM}
then do:
    /* No work to do, this is already the system domain... */
    assign oiReturnStatus = viLocalReturnStatus.
    return.
end.

/* Ensure that a SYSTEM domain switch is allowed... */
<I-4 {bFcOpenInstance
            &CLASS           = "Session"}>

<M-5 run SetLogicalValue
   (input  'AllowSystemDomainChange':U (icName), 
    input  true (ilValue), 
    output viFcReturnSuper (oiReturnStatus)) in Session>

<I-6 {bFcCloseInstance
            &CLASS           = "Session"}>

UPDATEBLOCK: DO:    

    /* Get the current SYSTEM domain if there is one... because we have to blank it's domain type... */
    <Q-11 run DomainsByDomainType (all) (Read) (NoCache)
       (input ?, (DomainID)
        input {&DOMAINSDOMAINTYPE-SYSTEM}, (DomainType)
        output dataset tqDomainsByDomainType) in BDomain >

    find tqDomainsByDomainType
         no-error.

    /* Make the passed in domain the SYSTEM one */
    assign tDomains.DomainType = {&DOMAINSDOMAINTYPE-SYSTEM}
           tDomains.tc_Status = "C":U.

    if available tqDomainsByDomainType and
       tqDomainsByDomainType.tiDomain_ID <> iiDomainID
    then do:
        <M-7 run DataLoad
           (input  '':U (icRowids), 
            input  '':U (icPkeys), 
            input  string(tqDomainsByDomainType.tiDomain_ID) (icObjectIds), 
            input  '':U (icFreeform), 
            input  true (ilKeepPrevious), 
            output viFcReturnSuper (oiReturnStatus)) in BDomain>

        if viFcReturnSuper < 0
        then do:
            assign oiReturnStatus = viFcReturnSuper.
            leave UPDATEBLOCK.
        end.

        if viLocalReturnStatus = 0
        then assign viLocalReturnStatus = viFcReturnSuper.

        find tDomains where
             tDomains.Domain_ID = tqDomainsByDomainType.tiDomain_ID
             no-error.

        if available tDomains
        then assign tDomains.DomainType = "":U
                    tDomains.tc_Status  = "C":U.
    end.

    <M-12 run ValidateBC
       (output viFcReturnSuper (oiReturnStatus)) in BDomain>

    if viFcReturnSuper < 0
    then do:
        assign oiReturnStatus = viFcReturnSuper.
        leave UPDATEBLOCK.
    end.

    if viLocalReturnStatus = 0
    then assign viLocalReturnStatus = viFcReturnSuper.

    <M-13 run AdditionalUpdates
       (output viFcReturnSuper (oiReturnStatus)) in BDomain>

    if viFcReturnSuper < 0
    then do:
        assign oiReturnStatus = viFcReturnSuper.
        leave UPDATEBLOCK.
    end.

    if viLocalReturnStatus = 0
    then assign viLocalReturnStatus = viFcReturnSuper.

    <M-14 run DataSave
       (output viFcReturnSuper (oiReturnStatus)) in BDomain>

    if viFcReturnSuper < 0
    then do:
        assign oiReturnStatus = viFcReturnSuper.
        leave UPDATEBLOCK.
    end.

    if viLocalReturnStatus = 0
    then assign viLocalReturnStatus = viFcReturnSuper.
end.

/* Clear the setting to allow a SYSTEM domain switch... */
<I-8 {bFcOpenInstance
            &CLASS           = "Session"}>

<M-9 run SetLogicalValue
   (input  'AllowSystemDomainChange':U (icName), 
    input  false (ilValue), 
    output viFcReturnSuper (oiReturnStatus)) in Session>

<I-10 {bFcCloseInstance
            &CLASS           = "Session"}>
     
if oiReturnStatus = -98
then assign oiReturnStatus = viLocalReturnStatus.