project BLF > class BControlProperty > method RemoveCustomFieldFromUI

Description

When a custom field is deleted, also remove all references to it on any UI.


Parameters


icCustomFieldNameinputcharacter
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method BCustomField.PostSave


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.