project BLF > class BControlProperty > method SaveControlProperties

Description

Sets the PropertyControl values for a certain window


Parameters


tControlPropertyForWindowinputtemp-tabletControlPropertyForWindow
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program1/bcontrolproperty.p)

if  vcCurrentWindow   = ""
and viCurrentActivity = 0
then do:
    <M-8 run SetMessage
          (input  'Data not loaded.':U (icMessage), 
           input  '' (icArguments), 
           input  '' (icFieldName), 
           input  '' (icFieldValue), 
           input  'S':U (icType), 
           input  3 (iiSeverity), 
           input  '' (icRowid), 
           input  'BLF-60':U (icFcMsgNumber), 
           input  '' (icFcExplanation), 
           input  '' (icFcIdentification), 
           input  '' (icFcContext), 
           output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
    assign oiReturnStatus = -3.
    return.
end.

/* ================================================================= */
/* Not returned properties are considered deleted                    */
/* ================================================================= */
for each tControlProperty where
    tControlProperty.ControlPropertyWindow = vcCurrentWindow and
    tControlProperty.BusActivity_ID = viCurrentActivity and
    tControlProperty.ControlPropertyLayerType = viCurrentLayerType and
    tControlProperty.ControlPropertyLayerValue = viCurrentLayerValue and
    not can-find (first tControlPropertyForWindow where
        tControlPropertyForWindow.tcControlPropertyControl = tControlProperty.ControlPropertyControl and
        tControlPropertyForWindow.tcControlPropertyName = tControlProperty.ControlPropertyName):
    assign tControlProperty.tc_Status = "D":U.
end.

/* ================================================================= */
/* Copy input values into the class temp-tables                      */
/* ================================================================= */
for each tControlPropertyForWindow on error undo, throw:

    if can-find (first bControlPropertyForWindow where
       bControlPropertyForWindow.tcControlPropertyControl = tControlPropertyForWindow.tcControlPropertyControl and
       bControlPropertyForWindow.tcControlPropertyName = tControlPropertyForWindow.tcControlPropertyName and
       bControlPropertyForWindow.tiControlPropertyLayerType < tControlPropertyForWindow.tiControlPropertyLayerType)
    then next.

    for each tControlProperty where
             tControlProperty.ControlPropertyWindow = vcCurrentWindow and
             tControlProperty.BusActivity_ID = viCurrentActivity and
             tControlProperty.ControlPropertyControl = tControlPropertyForWindow.tcControlPropertyControl and
             tControlProperty.ControlPropertyName = tControlPropertyForWindow.tcControlPropertyName
             by tControlProperty.ControlPropertyLayerType:
        leave.
    end.

    /* save ALL properties, not just modified properties
    if available tControlProperty
    and tControlProperty.ControlPropertyAssemblName = tControlPropertyForWindow.tcControlPropertyAssemblyName
    and tControlProperty.ControlPropertyAssemblType = tControlPropertyForWindow.tcControlPropertyAssemblyType
    and tControlProperty.ControlPropertyChildChange = tControlPropertyForWindow.tlControlPropertyChildChanged
    and tControlProperty.ControlPropertyParent       = tControlPropertyForWindow.tcControlPropertyParent
    and tControlProperty.ControlPropertyTab          = tControlPropertyForWindow.tiControlPropertyTab
    and tControlProperty.ControlPropertyValue        = tControlPropertyForWindow.tcControlPropertyValue
    then next.
    */

    if available tControlProperty
    and tControlProperty.ControlPropertyLayerType = viCurrentLayerType
    and tControlProperty.ControlPropertyLayerValue = viCurrentLayerValue
    then assign tControlProperty.tc_Status = "C":U.
    else do:
        <M-9 run AddDetailLine (input  'ControlProperty':U (icTable), 
                        input  '' (icParentRowid), 
                        output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
        if viFcReturnSuper <> 0
        then assign oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0
        then return.

        assign tControlProperty.BusActivity_ID            = viCurrentActivity
               tControlProperty.ControlPropertyName       = tControlPropertyForWindow.tcControlPropertyName
               tControlProperty.ControlPropertyWindow     = vcCurrentWindow
               tControlProperty.ControlPropertyControl    = tControlPropertyForWindow.tcControlPropertyControl
               tControlProperty.ControlPropertyLayerType  = viCurrentLayerType
               tControlProperty.ControlPropertyLayerValue = viCurrentLayerValue.
    end.

    assign tControlProperty.ControlPropertyAssemblName = tControlPropertyForWindow.tcControlPropertyAssemblyName
           tControlProperty.ControlPropertyAssemblType = tControlPropertyForWindow.tcControlPropertyAssemblyType
           tControlProperty.ControlPropertyChildChange = tControlPropertyForWindow.tlControlPropertyChildChanged
           tControlProperty.ControlPropertyParent       = tControlPropertyForWindow.tcControlPropertyParent
           tControlProperty.ControlPropertyTab          = tControlPropertyForWindow.tiControlPropertyTab.
        /* tControlProperty.ControlPropertyValue        = tControlPropertyForWindow.tcControlPropertyValue. */

    If Length(tControlPropertyForWindow.tcControlPropertyValue,"RAW":U) <= 10
    Then Assign tControlProperty.ControlPropertyValue = tControlPropertyForWindow.tcControlPropertyValue.
    Else Do:
        /* Break the ControlPropertyValue up in segments */
        Assign tControlProperty.ControlPropertyValue = '':U.
        /* check if there already exists a segment else create one */
        Find First tControlPropertySegment Where
                   tControlPropertySegment.ControlProperty_ID        = tControlProperty.ControlProperty_ID And
                   tControlPropertySegment.ControlPropertySegmentSeq = 1 No-lock No-error.
        If Available tControlPropertySegment
        Then 
            Assign tControlPropertySegment.tc_Status = 'C':U.
        Else Do:
            <M-12 run AddDetailLine (input  'ControlPropertySegment':U (icTable), 
                             input  tControlProperty.tc_Rowid (icParentRowid), 
                             output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
            If viFcReturnSuper <> 0
            Then Assign oiReturnStatus = viFcReturnSuper.
            If viFcReturnSuper < 0
            Then Return.
    
            Assign tControlPropertySegment.ControlProperty_ID        = tControlProperty.ControlProperty_ID.
            Assign tControlPropertySegment.ControlPropertySegmentSeq = 1.
        End.

        Assign tControlPropertySegment.ControlPropertySegmentText = tControlPropertyForWindow.tcControlPropertyValue.
        Assign viSegment = 1.
    
        Do While Length(tControlPropertySegment.ControlPropertySegmentText,"RAW":U) > 4000:
    
            Assign vcControlPropertyValuePart = Substring(tControlPropertySegment.ControlPropertySegmentText,
                                                          4001,
                                                          -1,
                                                          "RAW":U).
            Assign tControlPropertySegment.ControlPropertySegmentText = Substring(tControlPropertySegment.ControlPropertySegmentText,
                                                                                  1,
                                                                                  4000,
                                                                                  "RAW":U).
            Assign viSegment = viSegment + 1.

            /* check if there already exists a segment else create one */
            Find First tControlPropertySegment Where
                       tControlPropertySegment.ControlProperty_ID        = tControlProperty.ControlProperty_ID And
                       tControlPropertySegment.ControlPropertySegmentSeq = viSegment No-lock No-error.
            If Available tControlPropertySegment
            Then 
                Assign tControlPropertySegment.tc_Status = 'C':U.
            Else Do:
                <M-13 run AddDetailLine (input  'ControlPropertySegment':U (icTable), 
                                 input  tControlProperty.tc_Rowid (icParentRowid), 
                                 output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
                If viFcReturnSuper <> 0
                Then Assign oiReturnStatus = viFcReturnSuper.
                If viFcReturnSuper < 0
                Then Return.
        
                Assign tControlPropertySegment.ControlProperty_ID        = tControlProperty.ControlProperty_ID.
                Assign tControlPropertySegment.ControlPropertySegmentSeq = viSegment.
            End.
    
            Assign tControlPropertySegment.ControlPropertySegmentText = vcControlPropertyValuePart.
        End.
    End. /*End of breaking it up into segments*/

    For Each tControlPropertySegment Where
             tControlPropertySegment.ControlProperty_ID         = tControlProperty.ControlProperty_ID And
             tControlPropertySegment.ControlPropertySegmentSeq  > viSegment:
        Assign tControlPropertySegment.tc_Status = "D":U.
    End.

end.

/* Make sure the RKBFs are not specified in this case */
for each tControlProperty:
    assign tControlProperty.tcBusActivityCode = ?
           tControlProperty.tcBusComponentCode = ?.
end.

/* ================================================================= */
/* Write changes                                                     */
/* ================================================================= */
<M-10 run ValidateBC (output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
if viFcReturnSuper <> 0
then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.

<M-14 run AdditionalUpdates
   (output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
if viFcReturnSuper <> 0
then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.

<M-11 run DataSave (output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
if viFcReturnSuper <> 0
then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.