project BLF > class TSODImport > method ImportSODDataBRole
Description
ImportSODDataBRole: submethod of ImportSODDate
Parameters
icFileNameSODRoles | input | character | Name of the file that will be used to read out the content to be uploaded |
icFileNameSODResources | input | character | Name of the file that will be used to read out the content to be uploaded |
icDelimiter | input | character | Delimiter that will be used to read the different properties on a single line in the input files |
olImportError | output | logical | Indicates if an error occured during the import of the file-content |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
BLF
program code (program1/tsodimport.p)
/* =============================================================== */
/* Read the Roles and RoleResources from file into the temp-tables */
/* =============================================================== */
if icFileNameSODRoles <> ?
then do :
/* ====== ROLES ====== */
<M-74 run WriteMessagesToLog
(input 'Extract of file content started. File: ':U + icFileNameSODRoles (icMessage),
input ? (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign viLineCounter = 0
olImportError = false.
input stream sImpStream from value(icFileNameSODRoles).
repeat /* error undo, throw */ :
import stream sImpStream unformatted vcLine.
assign viLineCounter = viLineCounter + 1.
if viLineCounter = 1
then do:
if num-entries(vcLine,icDelimiter) = 1
then do :
<M-9 run WriteMessagesToLog
(input 'Error: this file is not a comma-separated file. File: ':U + icFileNameSODRoles (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign olImportError = true.
Return.
end. /* if num-entries(vcLine,icDelimiter) = 1 */
if num-entries(vcLine,icDelimiter) <> 4
then do :
<M-61 run WriteMessagesToLog
(input 'Error: expected 4 columns, actual number of columns: ':U + string(num-entries(vcLine,icDelimiter)) + '. File: ':U + icFileNameSODRoles (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign olImportError = true.
Return.
end. /* if num-entries(vcLine,icDelimiter) <> */
next.
end. /* if viLineCounter = 1 */
vcCSVEntries[1] = entry(1,vcLine,icDelimiter).
if num-entries(vcLine,icDelimiter) < 2
then vcCSVEntries[2] = "".
else vcCSVEntries[2] = entry(2,vcLine,icDelimiter).
if num-entries(vcLine,icDelimiter) < 3
then vcCSVEntries[3] = "true":U.
else vcCSVEntries[3] = entry(3,vcLine,icDelimiter).
if num-entries(vcLine,icDelimiter) < 4
then vcCSVEntries[4] = "false":U.
else vcCSVEntries[4] = entry(4,vcLine,icDelimiter).
if vcCSVEntries[3] <> "true":U and
vcCSVEntries[3] <> "false":U and
vcCSVEntries[3] <> "yes":U and
vcCSVEntries[3] <> "no":U
then do :
<M-60 run WriteMessagesToLog
(input 'Error: incorrect active flag (':U + vcCSVEntries[3] + ') on line ':U + string(viLineCounter) + ': it should be TRUE or FALSE. File: ':U + icFileNameSODRoles (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign olImportError = true.
next.
end. /* if vcCSVEntries[3] <> "true":U and */
if vcCSVEntries[4] <> "true":U and
vcCSVEntries[4] <> "false":U and
vcCSVEntries[4] <> "yes":U and
vcCSVEntries[4] <> "no":U
then do :
<M-46 run WriteMessagesToLog
(input 'Error: incorrect exclude-from-SOD flag (':U + vcCSVEntries[4] + ') on line ':U + string(viLineCounter) + '. File: ':U + icFileNameSODRoles (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign olImportError = true.
next.
end. /* if vcCSVEntries[4] <> "true":U and */
create tImportSODRole.
assign tImportSODRole.Role_ID = viLineCounter
tImportSODRole.RoleName = vcCSVEntries[1]
tImportSODRole.RoleDescription = vcCSVEntries[2]
tImportSODRole.RoleIsActive = (vcCSVEntries[3] = "true":U or vcCSVEntries[3] = "yes")
tImportSODRole.RoleSODException = (vcCSVEntries[4] = "true":U or vcCSVEntries[4] = "yes")
tImportSODRole.tc_Rowid = string(viLineCounter).
end. /* repeat : */
input stream sImpStream close.
<M-3 run WriteMessagesToLog
(input 'Extract of file content ended. File: ':U + icFileNameSODRoles (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
/* ====== ROLE-RESOURCES ====== */
<M-87 run WriteMessagesToLog
(input 'Extract of file content started. File: ':U + icFileNameSODResources (icMessage),
input ? (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign viLineCounter = 0.
input stream sImpStream from value(icFileNameSODResources).
ROLERESOURCEBLOCK: repeat on error undo, throw:
import stream sImpStream unformatted vcLine.
assign viLineCounter = viLineCounter + 1.
if viLineCounter = 1
then do:
if num-entries(vcLine,icDelimiter) = 1
then do :
<M-42 run WriteMessagesToLog
(input 'Error: this file is not a comma-separated file. File: ':U + icFileNameSODResources (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign olImportError = true.
Return.
end. /* if num-entries(vcLine,icDelimiter) = 1 */
if num-entries(vcLine,icDelimiter) < 5
then do :
<M-71 run WriteMessagesToLog
(input 'Error: expected 5 columns, actual number of columns: ':U + string(num-entries(vcLine,icDelimiter)) + '. File: ':U + icFileNameSODResources (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign olImportError = true.
Return.
end. /* if num-entries(vcLine,icDelimiter) < 5 */
next.
end. /* if viLineCounter = 1 */
/* The number of columns on these lines differs but from column 6 onwards we can find Roles */
do viColumnCounter = 6 to num-entries(vcLine,icDelimiter):
if entry(viColumnCounter,vcLine,icDelimiter) <> "":U and
entry(viColumnCounter,vcLine,icDelimiter) <> ?
then do:
find first tImportSODRole where
tImportSODRole.rolename = entry(viColumnCounter,vcLine,icDelimiter)
no-error.
if not available tImportSODRole
then do :
<M-63 run WriteMessagesToLog
(input 'Error: unknown role(':U + entry(viColumnCounter,vcLine,icDelimiter) + ') on line ' + string(viLineCounter) + '. File: ':U + icFileNameSODResources (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign olImportError = true.
next ROLERESOURCEBLOCK.
end. /* if not available tImportSODRole */
assign viRoleResourceCounter = viRoleResourceCounter + 1.
create tImportSODRoleResource.
assign tImportSODRoleResource.RoleResource_ID = viRoleResourceCounter
tImportSODRoleResource.tc_Rowid = string(viRoleResourceCounter)
tImportSODRoleResource.Role_ID = tImportSODRole.Role_ID
tImportSODRoleResource.tc_ParentRowid = tImportSODRole.tc_Rowid
tImportSODRoleResource.tcResourceURI = entry(4,vcLine,icDelimiter).
end. /* if entry(viColumnCounter,vcLine,icDelimiter) <> "":U and */
end. /* do viColumnCounter = 6 to num-entries(vcLine,icDelimiter) */
end. /* ROLERESOURCEBLOCK repeat */
input stream sImpStream close.
<M-50 run WriteMessagesToLog
(input 'Extract of file content ended. File: ':U + icFileNameSODResources (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
end. /* if icFileNameSODRoles <> ? <> ? */
/* =============================================================== */
/* Call method in BRole to save the Roles and RoleResources */
/* =============================================================== */
if olImportError = true
then Return.
if can-find (first tImportSODRole)
then do on error undo, throw:
/* Start and open BRole */
<M-16 run WriteMessagesToLog
(input 'Calling BRole started':U (icMessage),
input ? (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
<I-98 {tFcStartAndOpenInstance
&CLASS = "BRole"
&SESSIONID = "viSessionTSODID"}>
/* First ensure that we pass our data to the t_s-tables of BRole - there is no normal method to do this so we really have to do a manual run */
/* Note we cannot pass dImportSODForRole 'by-reference' when calling gipr_STables as the indexes on the temp-table ares not exactly the same */
<M-22 run WriteMessagesToLog
(input 'Transfer data to BRole started':U (icMessage),
input ? (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
run gipr_STables in vhBRoleFromSODImportInst (input dataset dImportSODForRole).
<M-68 run WriteMessagesToLog
(input 'Transfer data to BRole ended':U (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input true (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
/* Call MaintainByDataset - it will use the t_s-tables in the instance as input for its processing */
<M-21 run WriteMessagesToLog
(input 'Call BRole:MaintainByDataset started':U (icMessage),
input ? (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
<M-47 run MaintainByDataset
(input 'SAVE':U (icAction),
output vpDummy (opPrimaryKey),
output vpDummy (opRowid),
output viDummy (oiDraftInstance),
output viExternalReturnStatus (oiReturnStatus)) in BRole>
<M-56 run WriteMessagesToLog
(input 'Result of running BRole:MaintainByDataset(): ':U + string(viExternalReturnStatus) (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input True (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
<M-69 run WriteMessagesToLog
(input 'Call BRole:MaintainByDataset ended':U + ' - Returnstatus: ' + string(viExternalReturnStatus) (icMessage),
input ? (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
/* Closing BRole */
empty temp-table tImportSODRole.
empty temp-table tImportSODRoleResource.
<I-86 {tFcCloseAndStopInstance
&CLASS = "BRole"}>
<M-6 run WriteMessagesToLog
(input 'Calling BRole ended':U (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input true (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
if viExternalReturnStatus < 0
then return.
end. /* if can-find (first tImportSODRole) */