project BLF > class TSODImport > method ImportSODDataBSystem

Description

ImportSODDataBSystem: submethod of ImportSODDate


Parameters


icFileNameSODCategoriesinputcharacterName of the file that will be used to read out the content to be uploaded
icFileNameSODResourcesinputcharacterName of the file that will be used to read out the content to be uploaded
icFileNameSODMatrixinputcharacterName of the file that will be used to read out the content to be uploaded
icDelimiterinputcharacterDelimiter that will be used to read the different properties on a single line in the input files
olImportErroroutputlogicalIndicates if an error occured during the import of the file-content
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method TSODImport.ImportSODData


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  */