project BLF > class BControlProperty > method SaveControlProperties
Description
Sets the PropertyControl values for a certain window
Parameters
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.