Talk:Portal:Data Connectivity

From DataFlex Wiki
Jump to navigationJump to search

One thing VDF is missing is an event that fires after a record is found & all relates, constrains, etc. are done.

Matthew Davidian responded to a post of mine in the VDF newsgroup with a great solution. I've expanded it to cover VDF 11.1 & later - which use FindByRowID instead of Find_By_Recnum.

After putting the code below in your DataDictionary subclass, put the following in a local DataDictionary (one in a view, dialog, etc.):

Object oTable_DD is a Table_DataDictionary
  Set DDO_Server to oParent_DD
       
  Set AfterRecordFound_msg to ProcName

  Procedure ProcName
      Do something
      Do something else
  End_Procedure

The code for your DataDictionary class:

Class MyDataDictionary is a DataDictionary
   // Construct_Object: Object constructor.
   Procedure Construct_object
       Forward Send Construct_Object
       // Define new Properties: Property {Type} {pxName} {initial_value}
       // Set this property in Local DD to a local proc
       // that will get called after records are found
       Property String AfterRecordFound_msg ""
       // Create child objects
       // Set property values:
   End_Procedure
   // Below three procs from Matthew Davidian to create a proc
   // that runs after Finds/constraints, etc. are done
   // GM Added Procedure FindByRowID
   Procedure Request_Find Integer iFind_Mode# Integer iFile# Integer iIndex#
       Integer iAfterRecordFound
       Forward Send Request_Find iFind_Mode# iFile# iIndex#
       [Found] If (AfterRecordFound_msg(Self)) Begin
           Get AfterRecordFound_msg to iAfterRecordFound
           Send iAfterRecordFound iFile#
           Indicate Found True
       End
   End_Procedure
   Procedure Find_By_Recnum Integer iFile# Integer iRec#
       Integer iAfterRecordFound
       Forward Send Find_By_Recnum iFile# iRec#
       [Found] If (AfterRecordFound_msg(Self)) Begin
           Get AfterRecordFound_msg to iAfterRecordFound
           Send iAfterRecordFound iFile#
           Indicate Found True
       End
   End_Procedure
   Procedure Request_Assign Integer iFile#
       Integer iAfterRecordFound
       Forward Send Request_Assign iFile#
       [Found] If (AfterRecordFound_msg(Self)) Begin
           Get AfterRecordFound_msg to iAfterRecordFound
           Send iAfterRecordFound iFile#
           Indicate Found True
       End
   End_Procedure
   Procedure FindByRowID Integer iFile# RowID riRowId
       Integer iAfterRecordFound
       Forward Send FindByRowId iFile# riRowId
       [Found] If (AfterRecordFound_msg(Self)) Begin
           Get AfterRecordFound_msg to iAfterRecordFound
           Send iAfterRecordFound iFile#
           Indicate Found True
       End
   End_Procedure