project BLF > class BSODViolationRule1 > method DeleteByRoleResource

Description

delete violations


Parameters


iiRoleIDinputinteger
iiResourceIDinputinteger
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method BResource.AdditionalUpdates
method BRole.AdditionalUpdates


program code (program1/bsodviolationrule1.p)

if iiResourceID = 0
or iiResourceID = ?
then do:
    vcFreeform = "for each SODViolation1"
               +   " where SODViolation1.Role_ID = " + string(iiRoleID).
    <M-1 run DataLoad
       (input  '' (icRowids), 
        input  '' (icPkeys), 
        input  '' (icObjectIds), 
        input  vcFreeform (icFreeform), 
        input  yes (ilKeepPrevious), 
        output viFcReturnSuper (oiReturnStatus)) in BSODViolationRule1>
    if viFcReturnSuper <> 0
    then oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0
    then return.
end.
else do:
    /* Needs a query as load criteria are not on the class main table */
    <Q-3 run Violations1ByRoleResource (all) (Read) (NoCache)
       (input iiRoleID, (RoleID)
        input iiResourceID, (ResourceID)
        output dataset tqViolations1ByRoleResource) in BSODViolationRule1 >
    if not can-find (first tqViolations1ByRoleResource)
    then do:
        oiReturnStatus = -4.
        return.
    end.
    
    for each tqViolations1ByRoleResource break by tqViolations1ByRoleResource.tiSODViolation1_ID on error undo, throw:
        if first-of(tqViolations1ByRoleResource.tiSODViolation1_ID)
        then
        if not can-find (first tSODViolation1 where tSODViolation1.SODViolation1_ID = tqViolations1ByRoleResource.tiSODViolation1_ID)
        then do:
            if viPrimCount = 0
            then vcPrimKey = string(tqViolations1ByRoleResource.tiSODViolation1_ID).
            else vcPrimKey = vcPrimKey + chr(4)
                           + string(tqViolations1ByRoleResource.tiSODViolation1_ID).
            viPrimCount = viPrimCount + 1.
            if viPrimCount = 100
            then do:
                <M-5 run DataLoad
                   (input  '' (icRowids), 
                    input  vcPrimKey (icPkeys), 
                    input  '' (icObjectIds), 
                    input  '' (icFreeform), 
                    input  yes (ilKeepPrevious), 
                    output viFcReturnSuper (oiReturnStatus)) in BSODViolationRule1>
                if viFcReturnSuper <> 0
                then oiReturnStatus = viFcReturnSuper.
                if viFcReturnSuper < 0
                then return.
                assign viPrimCount = 0
                       vcPrimKey   = "".
            end.
        end.
    end.

    if viPrimCount > 0
    then do:
        <M-4 run DataLoad
           (input  '' (icRowids), 
            input  vcPrimKey (icPkeys), 
            input  '' (icObjectIds), 
            input  '' (icFreeform), 
            input  yes (ilKeepPrevious), 
            output viFcReturnSuper (oiReturnStatus)) in BSODViolationRule1>
        if viFcReturnSuper <> 0
        then oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0
        then return.
    end.
end.

<M-2 run DeleteAndLog
   (input  iiRoleID (iiRoleID), 
    input  iiResourceID (iiResourceID), 
    input  0 (iiSODCategory1ID), 
    input  0 (iiSODCategory2ID), 
    output viFcReturnSuper (oiReturnStatus)) in BSODViolationRule1>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.