project BLF > class TSODImport > method ImportSODDataBSystem
Description
ImportSODDataBSystem: submethod of ImportSODDate
Parameters
icFileNameSODCategories | 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 |
icFileNameSODMatrix | 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 Categories from file into the temp-table */
/* =============================================================== */
<M-21 run WriteMessagesToLog
(input 'Extract of file content started. File: ':U + icFileNameSODCategories (icMessage),
input ? (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign viLineCounter = 0.
input stream sImpStream from value(icFileNameSODCategories).
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-3 run WriteMessagesToLog
(input 'Error: this file is not a comma-separated file. File: ':U + icFileNameSODCategories (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 */
next.
end. /* if viLineCounter = 1 */
create tImportSODX1Category.
assign tImportSODX1Category.tcSODCategoryCode = entry(1,vcLine,icDelimiter)
tImportSODX1Category.tcSODCategoryDescription = entry(2,vcLine,icDelimiter).
end. /* repeat: */
input stream sImpStream close.
<M-60 run WriteMessagesToLog
(input 'Extract of file content ended. File: ':U + icFileNameSODCategories (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
/* =============================================================== */
/* Read the Resources from file into the temp-table */
/* =============================================================== */
<M-73 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).
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-31 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-20 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 */
if num-entries(vcLine,icDelimiter) < 4
then next.
assign vcCSVEntries[1] = entry(4,vcLine,icDelimiter).
if num-entries(vcLine,icDelimiter) < 5
then vcCSVEntries[2] = "".
else vcCSVEntries[2] = entry(5,vcLine,icDelimiter).
find first tImportSODX2Resource where
tImportSODX2Resource.tcResourceURI = vcCSVEntries[1]
no-error.
if available tImportSODX2Resource
then do:
if tImportSODX2Resource.tcCategoryCode <> vcCSVEntries[2]
then do:
<M-74 run WriteMessagesToLog
(input 'Error: this file holds a category-conflict for resource ':U + vcCSVEntries[1] + ' (':U + tImportSODX2Resource.tcCategoryCode + ' differs from ':U + vcCSVEntries[2] + ') on line ':U + string(viLineCounter) + ' File: ' + icFileNameSODResources (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign olImportError = true.
return.
end. /* if tImportSODX2Resource.tcCategoryCode <> vcCSVEntries[2] */
end. /* if available tImportSODResource */
else do :
create tImportSODX2Resource no-error. /* no-error option is needed just to reset error-status:error and error-status:get-message(1) */
assign tImportSODX2Resource.tcResourceURI = vcCSVEntries[1]
tImportSODX2Resource.tcCategoryCode = vcCSVEntries[2].
end. /* Not if available tImportSODResource */
end. /* repeat: */
input stream sImpStream close.
<M-34 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>
/* =============================================================== */
/* Read the SOD-Matrix from file into the temp-table */
/* =============================================================== */
<M-30 run WriteMessagesToLog
(input 'Extract of file content started. File: ':U + icFileNameSODMatrix (icMessage),
input ? (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign viLineCounter = 0.
input stream sImpStream from value(icFileNameSODMatrix).
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-97 run WriteMessagesToLog
(input 'Error: this file is not a comma-separated file. File: ':U + icFileNameSODMatrix (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-82 run WriteMessagesToLog
(input 'Error: expected 5 columns, actual number of columns: ':U + string(num-entries(vcLine,icDelimiter)) + '. File: ':U + icFileNameSODMatrix (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 */
assign vcCSVEntries[1] = entry(1,vcLine,icDelimiter).
if num-entries(vcLine,icDelimiter) < 2
then vcCSVEntries[2] = "FALSE":U.
else vcCSVEntries[2] = entry(2,vcLine,icDelimiter).
if num-entries(vcLine,icDelimiter) < 3
then vcCSVEntries[3] = "":U.
else vcCSVEntries[3] = entry(3,vcLine,icDelimiter).
if num-entries(vcLine,icDelimiter) < 4
then vcCSVEntries[4] = "":U.
else vcCSVEntries[4] = entry(4,vcLine,icDelimiter).
if num-entries(vcLine,icDelimiter) < 5
then vcCSVEntries[5] = "":U.
else vcCSVEntries[5] = entry(5,vcLine,icDelimiter).
if vcCSVEntries[2] <> "true":U and
vcCSVEntries[2] <> "false":U and
vcCSVEntries[2] <> "yes":U and
vcCSVEntries[2] <> "no":U
then do:
<M-52 run WriteMessagesToLog
(input 'Error: incorrect combined flag (':U + vcCSVEntries[2] + ') on line ':U + string(viLineCounter) + ', must be TRUE or FALSE':U + '. File: ':U + icFileNameSODMatrix (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
assign olImportError = true.
next.
end. /* if vcCSVEntries[2] <> "true":U and */
create tImportSODX3Matrix.
assign tImportSODX3Matrix.tcSODCategory1Code = vcCSVEntries[1]
tImportSODX3Matrix.tcSODCategory2Code = vcCSVEntries[3]
tImportSODX3Matrix.tcExclusionDescription = vcCSVEntries[5]
tImportSODX3Matrix.tcExclusionLevel = vcCSVEntries[4]
tImportSODX3Matrix.tlSODCategoriesConflict = (vcCSVEntries[2] = "true":U or
vcCSVEntries[2] = "yes":U).
end. /* repeat: */
input stream sImpStream close.
<M-53 run WriteMessagesToLog
(input 'Extract of file content ended. File: ':U + icFileNameSODMatrix (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
if olImportError
then return.
/* ======================================================================= */
/* Call method in BSystem to save the Categories, Resources and SOD-Matrix */
/* ======================================================================= */
if can-find (first tImportSODX1Category) or
can-find (first tImportSODX2Resource) or
can-find (first tImportSODX3Matrix)
then do :
<M-67 run WriteMessagesToLog
(input 'Calling BSystem started':U (icMessage),
input ? (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
/* Start and Open BSystem */
<I-25 {tFcStartAndOpenInstance
&CLASS = "BSystem"
&SESSIONID = "viSessionTSODID"}>
<M-48 run WriteMessagesToLog
(input 'Call BSystem:ApiSaveSODData started':U (icMessage),
input ? (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
/* Call the method in BSystem */
<M-79 run ApiSaveSODData
(input false (ilValidateOnly),
input false (ilCheckRule2Violations),
input dataset dImportSODForSystem (dSODDS),
output viExternalReturnStatus (oiReturnStatus)) in BSystem>
<M-24 run WriteMessagesToLog
(input 'Result of running BSystem:ApiSaveSODData(): ':U + string(viExternalReturnStatus) (icMessage),
input error-status:get-message(1) (icProgressErrorMessage),
input True (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
<M-39 run WriteMessagesToLog
(input 'Call BSystem:ApiSaveSODData ended':U + ' - Returnstatus: ' + string(viExternalReturnStatus) (icMessage),
input ? (icProgressErrorMessage),
input ? (ilIncludetFcMessages),
output viFcReturnSuper (oiReturnStatus)) in TSODImport>
/* Closing BSystem */
empty temp-table tImportSODX1Category.
empty temp-table tImportSODX2Resource.
empty temp-table tImportSODX3Matrix.
<I-43 {tFcCloseAndStopInstance
&CLASS = "BSystem"}>
<M-10 run WriteMessagesToLog
(input 'Calling BSystem 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 tImportSODX1Category) or */