project BLF > class BControlProperty > method RemoveCustomFieldFromUI
Description
When a custom field is deleted, also remove all references to it on any UI.
Parameters
icCustomFieldName | input | character | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
BLF
program code (program1/bcontrolproperty.p)
<M-59 run StartPersistence
(output vhPL (ohPersistence),
output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
/* ================================================================= */
/* If the custom field is a separate control. */
/* ================================================================= */
vcQuery = "for each ControlProperty where ControlProperty.ControlPropertyControl matches '*:sc_"
+ entry(1,icCustomFieldName,".") + "_"
+ entry(2,icCustomFieldName,".") + "'".
vhFcComponent = vhPL.
<M-28 run WriteDirect
(input 'ControlProperty' (icTableName),
input vcQuery (icPrepare),
input '' (icFieldList),
input '' (icFieldListDataTypes),
input '' (icAbsolute),
input '' (icIncremental),
input {&TARGETPROCEDURE} (ihClass),
input vcUserLogin (icUserLogin),
output viFcReturnSuper (oiReturnStatus)) in persistence>
if viFcReturnSuper = -4 then viFcReturnSuper = 0.
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
/* ================================================================= */
/* If the custom field is a column in a grid. */
/* ================================================================= */
vcQuery = "for each ControlPropertySegment where ControlPropertySegment.ControlPropertySegmentText matches '*"
+ icCustomFieldName + "|*'".
do while true:
vhFcComponent = vhPL.
<M-58 run ReadDirect
(input 'ControlPropertySegment' (icTableName),
input vcQuery (icPrepare),
input 'ControlProperty_ID' (icFieldList),
output vcCPID (ocValueList),
input {&TARGETPROCEDURE} (ihClass),
output viFcReturnSuper (oiReturnStatus)) in persistence>
if viFcReturnSuper = -4
then leave.
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
<M-20 run DataLoad
(input '' (icRowids),
input vcCPID (icPkeys),
input '' (icObjectIds),
input '' (icFreeform),
input no (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
vpOLD = "".
for each tControlPropertySegment by tControlPropertySegment.ControlPropertySegmentSeq:
vpOLD = vpOLD + tControlPropertySegment.ControlPropertySegmentText.
end.
vpNEW = "".
viFcCount2 = num-entries (vpOLD,";").
do viFcCount1 = 1 to viFcCount2:
vcNEW = entry (viFcCount1,vpOLD,";").
if not (vcNEW = "" or vcNEW begins icCustomFieldName + "|")
then vpNEW = vpNEW + vcNEW + ";".
end.
for each tControlPropertySegment by tControlPropertySegment.ControlPropertySegmentSeq:
if vpNEW = ""
then assign tControlPropertySegment.tc_Status = "D".
else if length (vpNEW,"RAW") > 4000
then assign tControlPropertySegment.ControlPropertySegmentText = substring (vpNEW,1,4000,"RAW")
tControlPropertySegment.tc_Status = "C"
vpNEW = substring (vpNEW,4001,-1,"RAW").
else assign tControlPropertySegment.ControlPropertySegmentText = vpNEW
tControlPropertySegment.tc_Status = "C"
vpNEW = "".
end.
<M-33 run ValidateBC (output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
<M-2 run AdditionalUpdates (output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
<M-7 run DataSave (output viFcReturnSuper (oiReturnStatus)) in BControlProperty>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
end.