project BLF > class BObjectSecurity > method DataSaveObjectSecurity

Description

Create or update all security rules of a single application object.


Parameters


icBusinessComponentNameinputcharacter
icObjectReferenceinputcharacter
tSelectedActivitiesinputtemp-table
tSelectedUsersinputtemp-table
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method database.WriteObjectSecurity


program code (program1/bobjectsecurity.p)

if oiReturnStatus = 0
then oiReturnStatus = -98.

/* ================================================================= */
/* Check if input matches currently loaded data.                     */
/* ================================================================= */
if icBusinessComponentName <> vcBCLoaded
or icObjectReference <> vcObjectLoaded
then do:
    <M-1 run SetMessage (input  'Invalid input':U (icMessage), 
                     input  '' (icArguments), 
                     input  '' (icFieldName), 
                     input  '' (icFieldValue), 
                     input  'S':U (icType), 
                     input  3 (iiSeverity), 
                     input  '' (icRowid), 
                     input  'BLF-128':U (icFcMsgNumber), 
                     input  'Data to save does not match data loaded.':U (icFcExplanation), 
                     input  icBusinessComponentName + ' = ':U + icObjectReference (icFcIdentification), 
                     input  '' (icFcContext), 
                     output viFcReturnSuper (oiReturnStatus)) in BObjectSecurity>
    assign oiReturnStatus = -3.
    return.
end.

/* ================================================================= */
/* Get all activities (to be able to retrieve correct ID's)          */
/* ================================================================= */
<Q-7 run BusCompByActivityUser (all) (Read) (NoCache)
          (input icBusinessComponentName, (BusComponentCode)
           input '':U, (BusActivityCode)
           input '':U, (UsrName)
           input '':U, (UsrLogin)
           input 0, (UsrID)
           output dataset tqBusCompByActivityUser) in BBusinessComponent >

/* ================================================================= */
/* Delete removed entries.                                           */
/* ================================================================= */
for each tObjectSecurity where
         tObjectSecurity.ObjectSecurityObjectRef = icObjectReference:

    find first tqBusCompByActivityUser where
               tqBusCompByActivityUser.tiUsrRole_ID = tObjectSecurity.UsrRole_ID and
               tqBusCompByActivityUser.tiRoleResource_ID = tObjectSecurity.RoleResource_ID
               no-error.
    if available tqBusCompByActivityUser
    then do:
        if not can-find (first tSelectedUsers where
                               tSelectedUsers.tiUsrId          = tqBusCompByActivityUser.tiUsr_ID and
                               tSelectedUsers.tiBusActivity_ID = tqBusCompByActivityUser.tiBusActivity_ID)

        then assign tObjectSecurity.tc_Status = "D":U.
    end.
    else assign tObjectSecurity.tc_Status = "D":U.
end.

/* ================================================================= */
/* Add new entries.                                                  */
/* ================================================================= */
for each tSelectedUsers,
    each tqBusCompByActivityUser where
         tqBusCompByActivityUser.tiUsr_ID = tSelectedUsers.tiUsrId and
         tqBusCompByActivityUser.tiBusActivity_ID = tSelectedUsers.tiBusActivity_ID:

    if not can-find (first tObjectSecurity where
                           tObjectSecurity.ObjectSecurityObjectRef = icObjectReference and
                           tObjectSecurity.UsrRole_ID = tqBusCompByActivityUser.tiUsrRole_ID and
                           tObjectSecurity.RoleResource_ID = tqBusCompByActivityUser.tiRoleResource_ID)
    then do:
        <M-6 run AddDetailLine (input  'ObjectSecurity':U (icTable), 
                        input  '' (icParentRowid), 
                        output viFcReturnSuper (oiReturnStatus)) in BObjectSecurity>
        if viFcReturnSuper <> 0
        then oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0
        then return.

        assign tObjectSecurity.ObjectSecurityObjectRef = icObjectReference
               tObjectSecurity.RoleResource_ID         = tqBusCompByActivityUser.tiRoleResource_ID
               tObjectSecurity.UsrRole_ID              = tqBusCompByActivityUser.tiUsrRole_ID.
    end.
end.

empty temp-table tqBusCompByActivityUser.

if can-find (first tObjectSecurity where tObjectSecurity.tc_Status <> "")
then do:
    <M-2 run ValidateBC (output viFcReturnSuper (oiReturnStatus)) in BObjectSecurity>
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.
    
    <M-3 run AdditionalUpdates (output viFcReturnSuper (oiReturnStatus)) in BObjectSecurity>
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.
    
    <M-4 run DataSave (output viFcReturnSuper (oiReturnStatus)) in BObjectSecurity>
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.
end.

if oiReturnStatus = -98
then oiReturnStatus = 0.