open-insight/LSL2/STPROC/TRANSFER_EDITTABLE_DATA.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

130 lines
6.1 KiB
Plaintext

Function Transfer_EditTable_Data(SourceEditTable, TargetEditTable, ArrayFlag, UpdateCellEdit)
/***********************************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
permission from SRP Computer Solutions, Inc.
Name : Transfer_EditTable_Data
Description : Transfer data from one EditTable to another. Normally this will be from an OpenInsight databound
EditTable to an SRP OLE EditTable and vice-versa.
Notes : This routine will typically be called from an OLE EditTable's LostFocus event and from the window's
WRITE_PRE and READ_POST events. A check is first made to see if the controls are valid. If not, the
function will return a failure flag.
Parameters :
SourceEditTable [in] -- The EditTable with the data that needs to be transferred.
TargetEditTable [in] -- The EditTable that the data will be transferred in to.
ArrayFlag [in] -- If the target is an OpenInsight EditTable then this flag indicates whether the ARRAY
property instead of the DEFPROP property should property should not be set after the
EditTable is populated.
UpdateCellEdit [in] -- Flag to determine if the UpdateCellEdit method should be called before the
transfer occurs. Normally only done during a window's WRITE event to make sure all
in-progress changes are updated to the SRP EditTable control. If this is set during
an SRP EditTable event this could cause the focus to get stuck in the control.
Success [out] -- Return flag to indicate if the process was successful.
History : (Date, Initials, Notes)
01/22/06 dmb Original programmer
02/16/08 dmb Add UpdateCellEdit parameter to determine if the UpdateCellEdit method should be called
07/21/08 rch Set Redraw off and on for Target OLE EditTable
07/14/10 rch Clear out databound edit table columns in @RECORD to work around OI problems
07/20/10 rch Skip copying of source data to target table if both have the same data
***********************************************************************************************************************/
$insert LOGICAL
Declare function Get_Property
Declare subroutine Set_Property, Send_Message
Success = Yes$ ; // Assume successful for now.
If Assigned(SourceEditTable) else SourceEditTable = ''
If Assigned(TargetEditTable) else TargetEditTable = ''
If Assigned(ArrayFlag) else ArrayFlag = No$
If ArrayFlag EQ '' then ArrayFlag = No$
If Assigned(UpdateCellEdit) else UpdateCellEdit = No$
If UpdateCellEdit EQ '' then UpdateCellEdit = No$
If Get_Property(SourceEditTable, 'HANDLE') then
If Get_Property(TargetEditTable, 'HANDLE') then
If Get_Property(SourceEditTable, 'OLE.ProgID') EQ 'SRP.EditTable.1' then
SourceProp = 'OLE.Array'
If UpdateCellEdit then Send_Message(SourceEditTable, 'OLE.UpdateCellEdit')
end else
If ArrayFlag EQ Yes$ then
SourceProp = 'ARRAY'
end else
SourceProp = 'DEFPROP'
end
end
If Get_Property(TargetEditTable, 'OLE.ProgID') EQ 'SRP.EditTable.1' then
TargetProp = 'OLE.Array'
If UpdateCellEdit then Send_Message(TargetEditTable, 'OLE.UpdateCellEdit')
end else
If ArrayFlag EQ Yes$ then
TargetProp = 'ARRAY'
end else
TargetProp = 'DEFPROP'
end
end
end else
Success = No$
end
end else
Success = No$
end
If Success then
*Data = Get_Property(SourceEditTable, SourceProp)
SourceData = Get_Property(SourceEditTable, SourceProp)
TargetData = Get_Property(TargetEditTable, TargetProp)
If SourceData NE TargetData then
// Skip this if source and target have the same data & avoid SAVEWARN message
If TargetProp NE 'OLE.Array' then
// The target EditTable is an OpenInsight control.
// Clear the @RECORD position values before setting its property.
// Otherwise, an OI bug may result in incorrect values in some {FIELD} references when symbolics are calculated.
PosValues = Get_Property(TargetEditTable, 'POS')
If PosValues then
NumValues = Count(PosValues, @SVM) + (PosValues NE '')
For iVal = 1 to NumValues
Pos = PosValues<0, 0, iVal>
If Pos then
@RECORD<Pos> = ''
end
Next iVal
Set_Property(@Window, 'RECORD', @RECORD)
end
// Make sure there are enough empty rows before setting its property.
// Otherwise, the data might get truncated.
*NumDataRows = DCount(Data<1>, @VM)
NumDataRows = DCount(SourceData<1>, @VM)
Array = Get_Property(TargetEditTable, TargetProp)
NumEditTableRows = DCount(Array<1>, @VM)
If NumDataRows GT NumEditTableRows then
NumExtraRows = NumDataRows - NumEditTableRows
For i = 1 to NumExtraRows
Send_Message(TargetEditTable, 'INSERT', -1, '')
Next i
end
end else
// Set Redraw to false for Target OLE EditTable control
Set_Property(TargetEditTable, 'OLE.Redraw', False$)
end
*Set_Property(TargetEditTable, TargetProp, Data)
Set_Property(TargetEditTable, TargetProp, SourceData)
If TargetProp EQ 'OLE.Array' then
Set_Property(TargetEditTable, 'OLE.Redraw', True$)
end
end
end
Return Success