project BLF > class BObjectSecurity > method DataSaveObjectSecurity
Description
Create or update all security rules of a single application object.
Parameters
| icBusinessComponentName | input | character | |
| icObjectReference | input | character | |
| tSelectedActivities | input | temp-table | |
| tSelectedUsers | input | temp-table | |
| oiReturnStatus | output | integer | Return status of the method. |
Internal usage
BLF
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.