project BLF > class BControlProperty > method DataLoadByInput

Description

This method loads database records corresponding to input values (records found in the t_s*** tables).
When nothing found in the database, a new record should be initialised.
Input values should also be updated with :
- identity fields (override input values)
- tc_Rowid / tc_ParentRowid / tc_Status

Annotation

This template can be used to implement the code for this method.

* Replace [MainTableName] with the name of the main table in the class dataset (no prefixes).
* This template assumes that the main table has an identity field, and this field is the only field of the primary index of the table. Replace [PrimaryKeyFieldName] with the name of this field.
* This template assumes that the table has one logical alternate key (a key that is visible and editable to end-users) with one field. Replace [LogicalKeyFieldName] with the name of this field. If the logical key contains more than one field, repeat the code with this tag for every field in the key.
* The run statement following [METHOD CALL] should not be copied literally, but inserted as a method call (run the method in your own component).




for each t_s[MainTableName] by rowid(t_s[MainTableName]) on error undo, throw:

/* ================================================================= */
/* Lookup object by logical key */
/* When in create mode, skip lookup. */
/* ================================================================= */
if vcActivityCode <> "Create":U
then do:
vcFreeform = "for each [MainTableName] where [MainTableName].[LogicalKeyFieldName] = '":U + t_s[MainTableName].[LogicalKeyFieldName] + "'":U.
[METHOD CALL]
run DataLoad
(input '' (icRowids),
input '' (icPkeys),
input '' (icObjectIds),
input vcFreeform (icFreeform),
input yes (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus))
if viFcReturnSuper >= 0
then do:
/* DataLoad succeeded, no no-error needed */
find first t[MainTableName] where t[MainTableName].[LogicalKeyFieldName] = t_s[MainTableName].[LogicalKeyFieldName].
if t[MainTableName].tc_Status <> ""
then do:
[METHOD CALL]
run SetMessage
(input [duplicate key error] (icMessage),
input t_s[MainTableName].[LogicalKeyFieldName] (icArguments),
input 't[MainTableName].[LogicalKeyFieldName]':U (icFieldName),
input t_s[MainTableName].[LogicalKeyFieldName] (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input t_s[MainTableName].tc_Rowid (icRowid),
input 'ERR-xyz':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus))
assign oiReturnStatus = -1.
return.
end.
end.
end.

/* ================================================================= */
/* When in delete mode, ignore input data. */
/* When object not found, do not return an error. */
/* ================================================================= */
if vcActivityCode = "Delete":U
then do:
if viFcReturnSuper = -4
then delete t_s[MainTableName].
else do:
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.

/* keep the UI rowid for usage in error messages (tFcMessages.tcFcRowid) */
[METHOD CALL]
run SetRowidConvert
(input t_s[MainTableName].tc_Rowid (icOldRowid),
input t[MainTableName].tc_Rowid (icNewRowid),
output viFcReturnSuper (oiReturnStatus))

/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_s[MainTableName].tc_Rowid = t[MainTableName].tc_Rowid
t_s[MainTableName].tc_ParentRowid = ""
opPrimeKey = (if opPrimeKey = "" then "" else opPrimeKey + chr(4))
+ string(t[MainTableName].[PrimaryKeyFieldName]).
end.

next.
end.

if vcActivityCode = "Create":U
or viFcReturnSuper = -4
then do:
/* ================================================================= */
/* When object not found and in modify only mode, return an error. */
/* ================================================================= */
if vcActivityCode = "Modify":U
then do:
[METHOD CALL]
run SetMessage
(input #T'Object with key $1 does not exist.':100T# (icMessage),
input t_s[MainTableName].[LogicalKeyFieldName] (icArguments),
input 't[MainTableName].[LogicalKeyFieldName]':U (icFieldName),
input t_s[MainTableName].[LogicalKeyFieldName] (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input t_s[MainTableName].tc_Rowid (icRowid),
input 'ERR-xyz':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus))
assign oiReturnStatus = -1.
return.
end.

/* ================================================================= */
/* When object not found or in create mode, create it. */
/* ================================================================= */
[METHOD CALL]
run AddDetailLine
(input '[MainTableName]':U (icTable),
input '' (icParentRowid),
output viFcReturnSuper (oiReturnStatus))

/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_s[MainTableName].tc_Status = "N":U.
end.
else do:
/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
assign t_s[MainTableName].tc_Status = "C":U
t[MainTableName].tc_Status = "C":U.
end.

if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.

/* insert code for subtables here */

/* keep the UI rowid for usage in error messages (tFcMessages.tcFcRowid) */
[METHOD CALL]
run SetRowidConvert
(input t_s[MainTableName].tc_Rowid (icOldRowid),
input t[MainTableName].tc_Rowid (icNewRowid),
output viFcReturnSuper (oiReturnStatus))

/* ================================================================= */
/* override value for identity fields in input */
/* ================================================================= */
assign t_s[MainTableName].[PrimaryKeyFieldName] = t[MainTableName].[PrimaryKeyFieldName]

/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
t_s[MainTableName].tc_Rowid = t[MainTableName].tc_Rowid
t_s[MainTableName].tc_ParentRowid = ""

opPrimeKey = (if opPrimeKey = "" then "" else opPrimeKey + chr(4))
+ string(t[MainTableName].[PrimaryKeyFieldName]).
end.






If the class dataset contains more than one table, insert this code for every additional table.

/* ================================================================= */
/* Delete existing detail */
/* ================================================================= */
for each t[ChildTableName] where
t[ChildTableName].tc_ParentRowid = t[ParentTableName].tc_Rowid:
assign t[ChildTableName].tc_Status = "D":U.
end.

/* ================================================================= */
/* Update / add detail */
/* ================================================================= */
for each t_s[ChildTableName] where
t_s[ChildTableName].tc_ParentRowid = t_s[ParentTableName].tc_Rowid
on error undo, throw:

find first t[ChildTableName] where
t[ChildTableName].tc_ParentRowid = t[ParentTableName].tc_Rowid and
t[ChildTableName].[LogicalKeyFieldName] = t_s[ChildTableName].[LogicalKeyFieldName] no-error.
if available t[ChildTableName]
then if t[ChildTableName].tc_Status = "D":U
then assign t_s[ChildTableName].tc_Status = "C":U
t[ChildTableName].tc_Status = "C":U.
else do:
[METHOD CALL]
run SetMessage
(input [duplicate key error] (icMessage),
input t_s[ChildTableName].[LogicalKeyFieldName] (icArguments),
input 't[ChildTableName].[LogicalKeyFieldName]':U (icFieldName),
input t_s[ChildTableName].[LogicalKeyFieldName] (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input t_s[ChildTableName].tc_Rowid (icRowid),
input 'ERR-xyz':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus))
assign oiReturnStatus = -1.
return.
end.
else do:
[METHOD CALL]
run AddDetailLine (input '[ChildTableName]':U (icTable),
input t[ParentTableName].tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus))
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
assign t_s[ChildTableName].tc_Status = "N":U
t[ChildTableName].[LogicalKeyFieldName] = t_s[ChildTableName].[LogicalKeyFieldName].
end.

/* keep the UI rowid for usage in error messages (tFcMessages.tcFcRowid) */
[METHOD CALL]
run SetRowidConvert
(input t_s[ChildTableName].tc_Rowid (icOldRowid),
input t[ChildTableName].tc_Rowid (icNewRowid),
output viFcReturnSuper (oiReturnStatus))

/* ================================================================= */
/* override value for identity fields in input */
/* ================================================================= */
assign t_s[ChildTableName].[ChildPrimaryKeyFieldName] = t[ChildTableName].[ChildPrimaryKeyFieldName]

/* ================================================================= */
/* Update input to allow correct matching */
/* ================================================================= */
t_s[ChildTableName].[ParentPrimaryKeyFieldName] = t[ChildTableName].[ParentPrimaryKeyFieldName]
t_s[ChildTableName].tc_Rowid = t[ChildTableName].tc_Rowid
t_s[ChildTableName].tc_ParentRowid = t[ParentTableName].tc_Rowid.
end.

PreCondition

The code of this method must always be overridden, not extended.


Parameters


opPrimeKeyoutputlongcharPrimary Key field value of loaded record(s).
Keys are chr(4) separated.
Key fields are chr(2) separated.
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program2/bcontrolproperty.p)

/* First, make sure the BusActivity_ID and ControlPropertyLayerValue fields are filled in correctly */
for each t_sControlProperty on error undo, throw:
    
    if t_sControlProperty.tcBusComponentCode = ""
    or t_sControlProperty.tcBusComponentCode = ?
    or t_sControlProperty.tcBusActivityCode  = ""
    or t_sControlProperty.tcBusActivityCode  = ?
    then do:
        vlWarned = yes.
        <M-24 run SetMessage
           (input  #T-52'Some customizations were skipped.':255(126284260)T-52# (icMessage), 
            input  '' (icArguments), 
            input  'tControlProperty.tcBusActivityCode' (icFieldName), 
            input  t_sControlProperty.tcBusComponentCode + '.' + t_sControlProperty.tcBusActivityCode (icFieldValue), 
            input  'W' (icType), 
            input  4 (iiSeverity), 
            input  t_sControlProperty.tc_Rowid (icRowid), 
            input  'blf-741712':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  'rowid=' + t_sControlProperty.tc_Rowid (icFcIdentification), 
            input  'form=' + t_sControlProperty.controlPropertyWindow (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
        
        for each t_sControlPropertySegment where
                 t_sControlPropertySegment.tc_ParentRowid = t_sControlProperty.tc_Rowid
                 on error undo, throw:
            delete t_sControlPropertySegment.
        end.
        
        delete t_sControlProperty.
        next.
    end.
    
    <Q-2 run BusActivityPrim (all) (Read) (Cache)
       (input ?, (BusActivityID)
        input t_sControlProperty.tcBusActivityCode, (BusActivityCode)
        input t_sControlProperty.tcBusComponentCode, (BusComponentCode)
        output dataset tqBusActivityPrim) in BBusinessComponent >
    
    find first tqBusActivityPrim where
               tqBusActivityPrim.tcBusComponentCode = t_sControlProperty.tcBusComponentCode and
               tqBusActivityPrim.tcBusActivityCode  = t_sControlProperty.tcBusActivityCode
               no-error.
               
    if not available tqBusActivityPrim
    then do:
        vlWarned = yes.
        <M-58 run SetMessage
           (input  #T-31'Some customizations were skipped.':255(126284260)T-31# (icMessage), 
            input  '' (icArguments), 
            input  'tControlProperty.tcBusActivityCode' (icFieldName), 
            input  t_sControlProperty.tcBusComponentCode + '.' + t_sControlProperty.tcBusActivityCode (icFieldValue), 
            input  'W' (icType), 
            input  4 (iiSeverity), 
            input  t_sControlProperty.tc_Rowid (icRowid), 
            input  'blf-26198':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  'rowid=' + t_sControlProperty.tc_Rowid (icFcIdentification), 
            input  'form=' + t_sControlProperty.controlPropertyWindow (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
        
        for each t_sControlPropertySegment where
                 t_sControlPropertySegment.tc_ParentRowid = t_sControlProperty.tc_Rowid
                 on error undo, throw:
            delete t_sControlPropertySegment.
        end.
        
        delete t_sControlProperty.
        next.
    end.
    
    assign t_sControlProperty.BusActivity_ID            = tqBusActivityPrim.tiBusActivity_ID
           t_sControlProperty.ControlPropertyLayerValue = 0.
           
    case t_sControlProperty.ControlPropertyLayerType:
        when {&CONTROLPROPERTYLAYERTYPE-ROLE}
        then do:
            if t_sControlProperty.tcRoleName = ""
            then do:
                vlWarned = yes.
                <M-30 run SetMessage
                   (input  #T-64'Some customizations were skipped.':255(126284260)T-64# (icMessage), 
                    input  '' (icArguments), 
                    input  'tControlProperty.tcRoleName' (icFieldName), 
                    input  t_sControlProperty.tcRoleName (icFieldValue), 
                    input  'W' (icType), 
                    input  4 (iiSeverity), 
                    input  t_sControlProperty.tc_Rowid (icRowid), 
                    input  'blf-679614':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  'rowid=' + t_sControlProperty.tc_Rowid (icFcIdentification), 
                    input  'form=' + t_sControlProperty.controlPropertyWindow (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
        
                for each t_sControlPropertySegment where
                         t_sControlPropertySegment.tc_ParentRowid = t_sControlProperty.tc_Rowid
                         on error undo, throw:
                   delete t_sControlPropertySegment.
                end.
                
                delete t_sControlProperty.
                next.
            end.
            
            <Q-38 run RolePrim (all) (Read) (Cache)
               (input ?, (RoleID)
                input t_sControlProperty.tcRoleName, (RoleName)
                output dataset tqRolePrim) in BRole >
                
            find first tqRolePrim where
                       tqRolePrim.tcRoleName = t_sControlProperty.tcRoleName
                       no-error.
                       
            if not available tqRolePrim
            then do:
                vlWarned = yes.
                <M-42 run SetMessage
                   (input  #T-26'Some customizations were skipped.':255(126284260)T-26# (icMessage), 
                    input  '' (icArguments), 
                    input  'tControlProperty.tcRoleName' (icFieldName), 
                    input  t_sControlProperty.tcRoleName (icFieldValue), 
                    input  'W' (icType), 
                    input  4 (iiSeverity), 
                    input  t_sControlProperty.tc_Rowid (icRowid), 
                    input  'blf-191976':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  'rowid=' + t_sControlProperty.tc_Rowid (icFcIdentification), 
                    input  'form=' + t_sControlProperty.controlPropertyWindow (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
                
                for each t_sControlPropertySegment where
                         t_sControlPropertySegment.tc_ParentRowid = t_sControlProperty.tc_Rowid
                         on error undo, throw:
                    delete t_sControlPropertySegment.
                end.
                
                delete t_sControlProperty.
                next.
            end.
            
            assign t_sControlProperty.ControlPropertyLayerValue = tqRolePrim.tiRole_ID.
        end.
        
        when {&CONTROLPROPERTYLAYERTYPE-USER}
        then do:
            if t_sControlProperty.tcUsrLogin = ""
            then do:
                vlWarned = yes.
                <M-55 run SetMessage
                   (input  #T-18'Some customizations were skipped.':255(126284260)T-18# (icMessage), 
                    input  '' (icArguments), 
                    input  'tControlProperty.tcusrLogin' (icFieldName), 
                    input  t_sControlProperty.tcUsrLogin (icFieldValue), 
                    input  'W' (icType), 
                    input  4 (iiSeverity), 
                    input  t_sControlProperty.tc_Rowid (icRowid), 
                    input  'blf-84573':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  'rowid=' + t_sControlProperty.tc_Rowid (icFcIdentification), 
                    input  'form=' + t_sControlProperty.controlPropertyWindow (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
                
                for each t_sControlPropertySegment where
                         t_sControlPropertySegment.tc_ParentRowid = t_sControlProperty.tc_Rowid
                         on error undo, throw:
                    delete t_sControlPropertySegment.
                end.
                
                delete t_sControlProperty.
                next.
            end.
            
            <Q-84 run UserPrim (all) (Read) (Cache)
               (input ?, (UsrId)
                input t_sControlProperty.tcUsrLogin, (UsrLogin)
                output dataset tqUserPrim) in BUser >
                
            find first tqUserPrim where
                       tqUserPrim.tcUsrLogin = t_sControlProperty.tcUsrLogin
                       no-error.
                       
            if not available tqUserPrim
            then do:
                vlWarned = yes.
                <M-34 run SetMessage
                   (input  #T-93'Some customizations were skipped.':255(126284260)T-93# (icMessage), 
                    input  '' (icArguments), 
                    input  'tControlProperty.tcusrLogin' (icFieldName), 
                    input  t_sControlProperty.tcUsrLogin (icFieldValue), 
                    input  'W' (icType), 
                    input  4 (iiSeverity), 
                    input  t_sControlProperty.tc_Rowid (icRowid), 
                    input  'blf-541540':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  'rowid=' + t_sControlProperty.tc_Rowid (icFcIdentification), 
                    input  'form=' + t_sControlProperty.controlPropertyWindow (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
                
                for each t_sControlPropertySegment where
                         t_sControlPropertySegment.tc_ParentRowid = t_sControlProperty.tc_Rowid
                         on error undo, throw:
                    delete t_sControlPropertySegment.
                end.
                
                delete t_sControlProperty.
                next.
            end.
            
            assign t_sControlProperty.ControlPropertyLayerValue = tqUserPrim.tiUsr_ID.
        end.
    end case.
end.

/* Now, start the real processing */
for each t_sControlProperty
         break by t_sControlProperty.BusActivity_ID
               by t_sControlProperty.ControlPropertyWindow
               by t_sControlProperty.ControlPropertyLayerType
               by t_sControlProperty.ControlPropertyLayerValue
         on error undo, throw:
    if first-of(t_sControlProperty.ControlPropertyLayerValue)
    then do:
        assign vcFreeForm = "for each ControlProperty where " +
                                     "ControlProperty.BusActivity_ID = "            + string(t_sControlProperty.BusActivity_ID)           +  " and " +
                                     "ControlProperty.ControlPropertyWindow = '"    + t_sControlProperty.ControlPropertyWindow            + "' and " +
                                     "ControlProperty.ControlPropertyLayerType = "  + string(t_sControlProperty.ControlPropertyLayerType) +  " and " +
                                     "ControlProperty.ControlPropertyLayerValue = " + string(t_sControlProperty.ControlPropertyLayerValue).
                                     
        <M-81 run DataLoad
           (input  '' (icRowids), 
            input  '' (icPkeys), 
            input  '' (icObjectIds), 
            input  vcFreeForm (icFreeform), 
            input  true (ilKeepPrevious), 
            output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
            
        if viFcReturnSuper = -4
        then assign viFcReturnSuper = 0.
        
        if viFcReturnSuper < 0 or
           oiReturnStatus  = 0
        then assign oiReturnStatus = viFcReturnSuper.
        
        if oiReturnStatus < 0
        then return.
        
        for each tControlProperty where
                 tControlProperty.BusActivity_ID            = t_sControlProperty.BusActivity_ID           and
                 tControlProperty.ControlPropertyWindow     = t_sControlProperty.ControlPropertyWindow    and
                 tControlProperty.ControlPropertyLayerType  = t_sControlProperty.ControlPropertyLayerType and
                 tControlProperty.ControlPropertyLayerValue = t_sControlProperty.ControlPropertyLayerValue
                 on error undo, throw:
            assign tControlProperty.tc_Status = "D".
        end.
    end.
    
    /* Lookup object by logical key. When in create mode, skip lookup. */
    if vcActivityCode = "Create"
    then release tControlProperty.
    else find tControlProperty where
              tControlProperty.BusActivity_ID            = t_sControlProperty.BusActivity_ID            and
              tControlProperty.ControlPropertyWindow     = t_sControlProperty.ControlPropertyWindow     and
              tControlProperty.ControlPropertyLayerType  = t_sControlProperty.ControlPropertyLayerType  and
              tControlProperty.ControlPropertyLayerValue = t_sControlProperty.ControlPropertyLayerValue and
              tControlProperty.ControlPropertyControl    = t_sControlProperty.ControlPropertyControl    and
              tControlProperty.ControlPropertyName       = t_sControlProperty.ControlPropertyName
              no-error.
              
    /* When in delete mode, ignore input data. When object not found, do not return an error. */
    if vcActivityCode = "Delete"
    then do:
        /* Update input to allow correct matching */
        if available tControlProperty
        then assign t_sControlProperty.tc_ParentRowid = ""
                    t_sControlProperty.tc_Rowid       = tControlProperty.tc_Rowid
                    t_sControlProperty.tc_Status      = "D".
        else delete t_sControlProperty.
        
        next.
    end.
    
    if vcActivityCode = "Create" or
       not available tControlProperty
    then do:
        /* When object not found and in modify only mode, return an error */
        if vcActivityCode = "Modify"
        then do:
            <M-5 run SetMessage
               (input  trim(#T-1'Object with key $1 does not exist.':100(8887)T-1#) (icMessage), 
                input  string(t_sControlProperty.BusActivity_ID) + ',' + t_sControlProperty.ControlPropertyWindow + ',' + string(t_sControlProperty.ControlPropertyLayerType) + ',' + string(t_sControlProperty.ControlPropertyLayerValue) (icArguments), 
                input  '' (icFieldName), 
                input  '' (icFieldValue), 
                input  'E' (icType), 
                input  3 (iiSeverity), 
                input  t_sControlProperty.tc_Rowid (icRowid), 
                input  'BLF-53':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
                
            assign oiReturnStatus = -1.
            return.
        end.
        
        /* When object not found or in create mode, create it */
        <M-6 run AddDetailLine
           (input  'ControlProperty' (icTable), 
            input  '' (icParentRowid), 
            output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
            
        if viFcReturnSuper < 0 or
           oiReturnStatus  = 0
        then assign oiReturnStatus = viFcReturnSuper.
        
        if oiReturnStatus < 0
        then return.
        
        /* Update input to allow correct matching */
        assign t_sControlProperty.tc_Status = "N".
    end.
    else assign tControlProperty.tc_Status   = "C"
                t_sControlProperty.tc_Status = "C".
                
    /* Delete existing detail */
    for each tControlPropertySegment where
             tControlPropertySegment.tc_ParentRowid = tControlProperty.tc_Rowid
             on error undo, throw:
        assign tControlPropertySegment.tc_Status = "D".
    end.
    
    /* Update / add detail  - basically always in add mode!! */
    for each t_sControlPropertySegment where
             t_sControlPropertySegment.tc_ParentRowid = t_sControlProperty.tc_Rowid
             on error undo, throw:
        <M-7 run AddDetailLine
           (input  'ControlPropertySegment' (icTable), 
            input  tControlProperty.tc_Rowid (icParentRowid), 
            output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
            
        if viFcReturnSuper < 0 or
           oiReturnStatus  = 0
        then assign oiReturnStatus = viFcReturnSuper.
        
        if oiReturnStatus < 0
        then return.
        
        assign t_sControlPropertySegment.tc_Status          = "N"
               t_sControlPropertySegment.ControlProperty_ID = tControlPropertySegment.ControlProperty_ID
               t_sControlPropertySegment.tc_Rowid           = tControlPropertySegment.tc_Rowid
               t_sControlPropertySegment.tc_ParentRowid     = tControlProperty.tc_Rowid.
    end.
    
    /* Override value for identity fields in input */
    assign t_sControlProperty.ControlProperty_ID = tControlProperty.ControlProperty_ID 
           t_sControlProperty.tc_Rowid           = tControlProperty.tc_Rowid
           t_sControlProperty.tc_ParentRowid     = "".
           
    vlImportFound = yes.
end.

finally:
    if oiReturnStatus = 0
    then if vlImportFound = no
    then do:
        <M-29 run SetMessage
           (input  #T-36'Nothing was imported.':255(333576403)T-36# (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'E' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'blf-403740':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
        oiReturnStatus = -3.
    end.
    else if vlWarned
    then oiReturnStatus = 1.
end finally.