project BLF > class BReportRequestBase > method ValidateComponent

Description

Write here all tests on database update (new / modify / delete) that cannot be coded with a validation mask.
The type of update can be found in tc_status (N/C/D).
If you find incorrect data, you must write an entry in tFcMessages (using SetMessage) and set the return status of this method to either +1 or -1.
Return status +1 = data will still be accepted.
Return status -1 = data will not be accepted.
This method is run from SetPublicTables, before transferring the received data into the class temp-tables.


Parameters


oiReturnStatusoutputinteger


Internal usage


unused


program code (program/breportrequestbase.p)

<ANCESTOR-CODE>

assign vcNoEmailUsers = "".

for each t_sRptRequest where
         t_sRptRequest.tc_Status <> "D" on error undo, throw:
    if t_sRptRequest.tc_Status = "C"
    then do:
        find t_iRptRequest where
             t_iRptRequest.tc_Rowid = t_sRptRequest.tc_Rowid
             no-error.

        if not available t_iRptRequest
        then do:
            <M-50 run SetMessage
               (input  trim(#T-52'Internal error: no initial record found for modified RptRequest record.':255(865413501)T-52#) (icMessage), 
                input  '' (icArguments), 
                input  '' (icFieldName), 
                input  '' (icFieldValue), 
                input  'E' (icType), 
                input  3 (iiSeverity), 
                input  t_sRptRequest.tc_Rowid (icRowid), 
                input  'BLF-198872':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BReportRequestBase>

            assign oiReturnStatus = -3.
            next.
        end.
    end.

    if t_sRptRequest.RptRequestMailSubject  = ""                                  and
      (t_sRptRequest.RptRequestMailBCC     <> ""                                  or
       t_sRptRequest.RptRequestMailCC      <> ""                                  or
       t_sRptRequest.RptRequestMailTo      <> ""                                  or
       can-find(first t_sRptRequestMail where
                      t_sRptRequestMail.tc_ParentRowid = t_sRptRequest.tc_Rowid and
                      t_sRptRequestMail.tc_Status     <> "D"))                    and
      (t_sRptRequest.tc_Status              = "N"                                 or
       t_sRptRequest.tc_Status              = "C"                                 and
      (t_sRptRequest.RptRequestMailSubject <> t_iRptRequest.RptRequestMailSubject or
       t_sRptRequest.RptRequestMailBCC     <> t_iRptRequest.RptRequestMailBCC     or
       t_sRptRequest.RptRequestMailCC      <> t_iRptRequest.RptRequestMailCC      or
       t_sRptRequest.RptRequestMailTo      <> t_iRptRequest.RptRequestMailTo))
    then do:
        <M-1 run SetMessage
          (input  #T-1'You must enter the mail subject.':100(6480)T-1# (icMessage), 
           input  '' (icArguments), 
           input  'tRptRequest.RptRequestMailSubject' (icFieldName), 
           input  t_sRptRequest.RptRequestMailSubject (icFieldValue), 
           input  'E' (icType), 
           input  3 (iiSeverity), 
           input  t_sRptRequest.tc_Rowid (icRowid), 
           input  'BLF-148':U (icFcMsgNumber), 
           input  '' (icFcExplanation), 
           input  '' (icFcIdentification), 
           input  '' (icFcContext), 
           output viFcReturnSuper (oiReturnStatus)) in BReportRequestBase>

        assign oiReturnStatus = -1.
    end.

    for each t_sRptRequestMail where
             t_sRptRequestMail.tc_ParentRowid = t_sRptRequest.tc_Rowid and
            (t_sRptRequestMail.tc_Status      = "N"                    or
             t_sRptRequestMail.tc_Status      = "C") on error undo, throw:
        if t_sRptRequestMail.tc_Status = "C"
        then do:
            find t_iRptRequestMail where
                 t_iRptRequestMail.tc_Rowid = t_sRptRequestMail.tc_Rowid
                 no-error.

            if not available t_iRptRequestMail
            then do:
                <M-53 run SetMessage
                   (input  trim(#T-28'Internal error: no initial record found for modified RptRequestMail record.':255(108077002)T-28#) (icMessage), 
                    input  '' (icArguments), 
                    input  '' (icFieldName), 
                    input  '' (icFieldValue), 
                    input  'E' (icType), 
                    input  3 (iiSeverity), 
                    input  t_sRptRequestMail.tc_Rowid (icRowid), 
                    input  'BLF-484780':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  '' (icFcIdentification), 
                    input  '' (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BReportRequestBase>

                assign oiReturnStatus = -3.
                next.
            end.
        end.

        if t_sRptRequestMail.Role_ID  <> 0   and
           t_sRptRequestMail.Role_ID  <> ?   and
          (t_sRptRequestMail.tc_Status = "N" or
           t_sRptRequestMail.tc_Status = "C" and
           t_sRptRequestMail.Role_ID  <> t_iRptRequestMail.Role_ID)
        then do:
            <Q-72 run UserByRoleId (all) (Read) (Cache)
               (input t_sRptRequestMail.Role_ID, (RoleId)
                input true, (UsrIsActive)
                input viCompanyId, (CompanyId)
                output dataset tqUserByRoleId) in BUser >

            for each tqUserByRoleId where
                     tqUserByRoleId.tcUsrMailAddress = "" or
                     tqUserByRoleId.tcUsrMailAddress = ? on error undo, throw:
                if vcNoEmailUsers <> ""
                then assign vcNoEmailUsers = vcNoEmailUsers + ", ".

                assign vcNoEmailUsers = vcNoEmailUsers + tqUserByRoleId.tcUsrName.
            end.
        end.
    end.
end.

if vcNoEmailUsers <> ""
then do:
    <M-2 run SetMessage
       (input  trim(#T-22'The following users will not receive an e-mail because their user profile does not contain an e-mail address:':255(166289427)T-22#) (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'W' (icType), 
        input  4 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-607816':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportRequestBase>

    <M-13 run SetMessage
       (input  vcNoEmailUsers (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'W' (icType), 
        input  4 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-201161':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportRequestBase>

    if oiReturnStatus = 0
    then assign oiReturnStatus = 1.
end.