**************************************************************************//
//
EXTENDED_DATA_SET //
//
This is the extended version of the Data_Set class. //
//
It provides the following extra's to the standard Data_Set class: //
//
- SETTING ITEM-OPTIONS PER FIELD //
These item-options will be used automatically when an DEO is used //
which recognizes the Extended_Data_Set. You can specify two types of //
item-options. //
1. The ones that will be used when the Server of the DEO is the same //
as the Data_File of the item. We call those the stadard-item- //
options. //
2. The ones that will be used when the Server of the DEO is different //
from the Data_File of the item. We call those options Foreign- //
item-options. //
//
- PROTECTING KEY FIELDS //
You can set the Key_Field_State of a field to true to identify Key- //
fields. When the property Protect_Key_State is TRUE (Default) then //
a user will not be able to change the value of a field which has been //
marked as Key-field from an existing record. //
//
- VALIDATING FIELDS //
A validation message can be set per field. This message will be //
executed when the Data_Set needs to validate all fields. The message //
will also be send when a DEO need to validate an item. //
//
- FIELD ENTRY AND EXITS MESSAGES //
One can specify a message which has to be send to the Data_Set when //
a item of a DEO is being entered or exited. //
//
Currently the fieldtypes Overlap, Text and Binary are *not* supported. //
//
PROPERTIES //
//
EXISTING_KEY_VALUE //
This property will hold the complete value of all the fields which //
have been flagged to be a key-field. It is used to check if a user //
has changed one of the fields which make up the key for a record. //
//
PROTECT_KEY_STATE //
When this property is TRUE, is will force a key to be read-only. A //
transaction will be aborted when this Data_Set detects that a key //
value for an existing record has been changed. //
//
KEY_FIELDS //
This property contains a comma separated list of all fieldnumbers //
which have been marked to be part of a key. This list is not sorted //
and should be considered read-only. //
//
FOREIGN_FIELD_OPTIONS PRIVATE //
This property hold the fields' item-options which are copied to a //
DEO item when this field is used as a foreign (related) field. //
These options will be applied for fields which are not part of an //
index. //
//
FOREIGN_KEY_FIELD_OPTIONS PRIVATE //
See Foreign_Field_Options. //
These options will be applied for fields which are part of the key. //
//
FOREIGN_INDEX_FIELD_OPTIONS PRIVATE //
See Foreign_Field_Options. //
These options will be applied for fields which are part of an index, //
but not of a key. //
//
**************************************************************************//
JVH
- Construct_Object(Integer iImage)
************************************************************************//
Construct_Object. //
Augmented to set the Focus_Mode to NO_ACTIVATE. If we don't do this, //
the object might try to take the focus. //
************************************************************************//
- StringExisting_Key_Value
- IntegerProtect_Key_State
- StringKey_Fields
- Integerprivate.Foreign_Field_Options
Used to store default foreign item-options.
- Integerprivate.Foreign_Key_Field_Options
Used to store default foreign item-options for key field.
- Integerprivate.Foreign_Index_Field_Options
Used to store default foreign item-options for non-key index field.
- IntegerValidate_Save_Structure_Mode
These are added to support the checking of DSO connections
during deletes and saves. Only the first two properties are Public
- IntegerValidate_Delete_Structure_Mode
- IntegerSave_Structure_Validated_State
- IntegerCascade_Delete_Structure_Validated_State
- IntegerNo_Cascade_Delete_Structure_Validated_State
- IntegerLast_Mark_Sequence_Id
- StringVisited_Fields
These are added for optimized traversal of
entry-update and validation and maybe more
- IntegerVisited_State
- IntegerAuto_Increment_Source_File
these are set by the define_auto_increment, which is obsolete and has been replaced
the Set Field_auto_increment method.
- IntegerAuto_Increment_Source_Field
- IntegerAuto_Increment_Dest_Field
- Integer[]pAutoIncrementFields
used by the set Field_auto_increment method
these are split into two arrays to make searching for the field easier
the arrays should always be synched.
- tDDFileField[]pAutoIncrementSysFileFields
- IntegerError_Report_Mode
Error Reporting Related
If DD_Error_No_Report errors would be supressed (only ERR gets set)
- integerCurrent_Validate_Field
During validation, this is the field being validated.
- integerOld_Error_Object_Id
when errors are redirected locally this maintains the original handler.
- integerError_Processing_State
Must be provided if local error handler is to be created
- IntegerValidate_DEOs_Only_State
These should be changed most carefully and possible only and the
DSO level. These allow you to defeat full field validation which
makes it easier to corrupt data! Validate_DEO_Only_State limits
save validation to DEOs (which is what data-sets have always done).
Validate_foreign_File_State will skip validation under the following
conditions: 1) DSO if for a parent (it did not originate the save).
- IntegerValidate_Foreign_File_State
- IntegerValidate_All_Fields_State
if set true, a field validation requested started with this
DD will check all fields, even in an error is encountered
- IntegerEntryUpdateLocalState
If true, all entry updates will occur through the DD. Else
saves occur through the DD and find occur through the DEOs
- integerFind_Record_Id
can be used by Refind_records method (remote refind of recs). Obsolete. Use Find_RowId
- RowIdFind_RowId
can be used by Refind_records method (remote refind of recs)
- IntegerField_Objects
Private: Id of field_objects container. This is not created until needed
- IntegerAllow_Foreign_New_Save_State
Public: If set the DDO will never be foreign, allowing
you to create new parents when a child is saved. This would
normally only be set within the DDO and not the class. This would be
used where a child table wants to save the parent (header) when the
first child is saved. It would disable the foreign key and index
find_Req and required settings (as well as any displayonly).
- IntegerpbDDAttach
This makes the attach use the DD structure instead of just doing an attach
on all open files. Existing programs should work fine with this. If they don't,
you can reset this in your class (although it would be smarter to find out why it
is not working.
- Record_Buffer : Record_Buffer
Create the local buffer.
- Field_Attributes : Field_Attributes
Create the extended field attributes array.
- Statushelp_Array : array
Create an array to maintain Status help values for each field
- FieldMask_Array : Field_Mask_array
- System_File_obj : Array
keep track of all system/unknown files that must be set to
default for smart file mode to work right.
- IntegerExtended_DSO_State()
// NEW: Returns true if record is active in DD. This is more intuitive than using the current record/rowid
Function HasRecord Returns Boolean
Function_Return (Not(IsNullRowId(CurrentRowId(self))))
End_Function
************************************************************************//
Extended_DSO_State //
Returns 1 to indicate that this is a DD class. //
************************************************************************//
- Define_Fields()
************************************************************************//
Define_Fields //
Used to set up all XDS functions and rules. Called by construct_object //
and considered a bit more user friendly. //
************************************************************************//
- Set(Integer iFile)
************************************************************************//
Set Main_File. //
This message has been augmented to create a local recordbuffer for a //
file. We cannot do this earlier because we need the file to count the //
number of necessary fields. //
************************************************************************//
- IntegeriCurrent_File
- Set(Integer iField Integer iState)
************************************************************************//
Set Key_Field_State //
This procedure will update the Key_Fields property to include or //
excluded the fieldnumber passed in the list of fieldnumbers which make //
up an keyvalue. //
************************************************************************//
- StringsKeys
- IntegerKey_Field_State(Integer iField)
************************************************************************//
Function Key_Field_State //
Will return TRUE if the field passed has been defined as a key. //
************************************************************************//
- StringsKeys
- StringKey_Value()
************************************************************************//
Function Key_Value //
Returns complete key value. //
************************************************************************//
- StringsKeys
- StringsKey_Value
- StringsValue
- IntegeriField
- New_Current_Record(integer iOld integer iNew)
************************************************************************//
New_Current_Record. //
This procedure will be called whenever the Data_Set changes its //
Current_Record property, or after a Save, Delete or Clear operation. //
We send this message to the Record_Buffer object to update its values. //
************************************************************************//
- OnNewCurrentRecord(RowId riOld RowId riNew)
- IntegeriObj
- IntegeriOldst
- IntegeriFoc
- IntegeriIsExt
- Prepare_Default_Values()
************************************************************************//
Procedure Prepare_Default_Values //
Shuts off change mode and sends initialize_default_values which is //
a user hook routine. //
************************************************************************//
- IntegeriOldState
- Private_Field_Defaults()
************************************************************************//
Private_Field_Defaults //
Set all checkbox fields to default to False data value. //
************************************************************************//
- IntegeriField
- Field_Defaults()
************************************************************************//
Procedure Field_Defaults //
Will be called after a clear operation to let the application //
programmer set the default values for the record. This should be done //
by sending SET Field_Current_Value. //
************************************************************************//
- integerIsDataInvalid(integer iType String sValue)
************************************************************************//
Function IsDataInvalid //
Pass type and string value and see if this is valid data for this //
type. Currently we check for numbers and dates. Return non-zero //
if invalid. //
************************************************************************//
- DatedVal
- DateTimedtVal
- NumbernVal
- IntegerbOK
- IntegerbInvalid
- IntegerOldRepMode
- IntegerhOldErrorObj
- integerIsDEOOwned(integer iDEO)
************************************************************************//
Function IsDeoOwned //
Return 1 if the passed DEO is part of the DDs list of connected DEOs //
First check if server of DEO is this DD. If so, we are owned. If not //
we must check the DD's UI DEO list. //
The passed object MUST be a valid DEO or an error will occur. //
************************************************************************//
- IntegeriMax
- IntegeriCount
- Set(Integer iField String sValue)
************************************************************************//
Procedure Set Field_Current_Value //
This procedure changes the field value of the given field in the //
record-buffer object. //
It also sends Field_Value_Changed to notify every the attached DEOs. //
This has been optimized so this message is only sent when data is //
actually changed. //
************************************************************************//
- IntegeriObj
- StringsOldVal
- IntegeriChanged
- IntegeriType
- IntegeriFile
- IntegeriFocObj
- IntegeriCrnt
- IntegerbInvalid
- IntegeriIdentity
- AddresspData
- IntegeriLen
- Set(Integer iField String sValue)
************************************************************************//
Procedure Set Field_Changed_Value //
Sets Field_Current_Value and Sets Field_Changed_State for passed field.//
************************************************************************//
- StringField_Current_Value(Integer iField)
************************************************************************//
Function Field_Current_Value //
Returns the value from the record buffer for the field of which the //
fieldnumber has been passed. //
If the file/field requested is the focus file/field the use the DEO's //
value. //
*************************************************************************//
- IntegeriType
- IntegeriFile
- StringsValue
- IntegeriFoc
- IntegeriCrnt
- IntegeriStrSize
- IntegeriFldSize
- AddresspData
- Set(Integer iField String sValue)
************************************************************************//
Procedure Set Field_Default_Value //
Procedure Set File_Field_Default_Value //
This sets a default value without setting the DSO's changed_State //
************************************************************************//
- IntegeriOldState
- Set(integer iFile integer iField string sValue)
- IntegeriDSO
- Set(Integer iFile Integer iField String sValue)
************************************************************************//
Get/Set File_Field_Current_Value //
Set File_Field_Changed_Value //
Methods to set and get the value of a field. When set all DSOs and //
DEOs are notified. //
************************************************************************//
- IntegeriDSO
- Set(Integer iFile Integer iField String sValue)
- IntegeriDSO
- stringFile_Field_Current_Value(Integer iFile Integer iField)
- IntegeriDSO
- StringsValue
- Field_Value_Changed(Integer iField String sValue)
************************************************************************//
Procedure Field_Value_Changed //
This procedure will notify every attached DEO that the value of a //
field has been changed. Every DEO needs to update its value to reflect //
the new value. //
************************************************************************//
- IntegeriMax
- IntegeriCount
- IntegeriDEO
- IntegeriMain_File
- IntegeriNoChange
- IntegerField_Changed_State(Integer iField)
************************************************************************//
Get/Set Field_Changed_State //
Gets/Sets Field_Changed_State of the passed field. Will Set Changed_ //
state if appropriate (if change_disabled_state is false) //
************************************************************************//
- Set(Integer iField Integer iState)
- IntegerFile_Field_Changed_State(Integer iFile Integer iField)
************************************************************************//
Get/Set File_Field_Changed_State //
As above, but passes both file and field //
************************************************************************//
- IntegeriDSO
- Set(Integer iFile Integer iField Integer iState)
- IntegeriDSO
- set(integer iField integer iOpts integer bShowErr String sValue)
************************************************************************//
This simulates entering a value into a field from a keyboard. Pass the //
Field and DD Options and the value. It is up to you to pass the proper //
DD options. This is normally sent by File_Field_Entry and you are //
advised to use that message and not this one. //
************************************************************************//
- IntegeriFile
- IntegeriType
- IntegerbChanged
- IntegerbInvalid
- IntegerhObj
- StringsOldVal
- AddresspData
- IntegeriLen
- integerFile_Field_Entry_Options(integer iFile integer iField)
**********************************************************************
Private: This returns file-field options for a Field_Entry type of environment.
It will strip autofind from main-file DDs but leave foreign field alone.
This is needed for Field_entry. Otherwise adding a field value to an autofind
for save or find causes an autofind to trigger first which either causes the
wrong rec to save or for a double find.
**********************************************************************
- IntegeriOpts
- set(integer iFile integer iField integer bShowErr string sValue)
************************************************************************//
This simulates entering a value into a field from a keyboard. The DD //
receiving this message determines if it is Main or Foreign (just like //
server). It will do an uppercase, will respect No_Enter and DisplayOnly//
and will do a autofind if required. It does not do a field validation. //
************************************************************************//
- IntegeriOpts
- IntegerhDD
- integerField_Object(integer iField)
************************************************************************//
return object ID of extended field, 0 if none //
************************************************************************//
- IntegerhFlds
- Set(integer iField integer iOpts integer iLen integer bShowErr Address pData)
************************************************************************//
This is the same as Field_entry except the value is passed via a //
pointer. If data-type is extended (text/binary) it will use and an //
extended field object to handle this. If date/number/string we will //
convert this to a string and use Field_Entry. It is the caller's //
responsibility to pass a valid pointer to valid data...else !@#$%^&^ //
If an extended Field object is needed and not defined, an error is //
returned. If pointer is null, assume empty string passed (this is a //
change as of 8.3 - it used to ignore null pointers) //
************************************************************************//
- IntegerhFld
- StringsValue
- IntegeriFile
- IntegeriType
- Set(integer iFile integer iField integer iLen integer bShowErr Address pData)
************************************************************************//
This is the same as File_Field_entry except the value is passed via a //
pointer. See Field_Pointer_Entry for more on this //
************************************************************************//
- IntegeriOpts
- IntegerhDD
- Set(integer iField integer iLen Address pData)
************************************************************************//
This is the same as Field_Current_Value except the value is passed via //
a pointer. If data-type is extended (text/binary) it will use and an //
extended field object to handle this. If date/number/string we will //
convert this to a string and use Field_Entry. It is the caller's //
responsibility to pass a valid pointer to valid data...else !@#$%^&^ //
If an extended Field object is needed and not defined, an error is //
returned. If pointer is null, assume empty string passed (this is a //
change as of 8.3 - it used to ignore null pointers) //
************************************************************************//
- IntegerhFld
- StringsValue
- IntegeriFile
- IntegeriType
- Set(integer iFile integer iField integer iLen Address pData)
************************************************************************//
This is the same as File_Field_Current_Value except the value is passed//
via a pointer. See Field_current_Pointer_Value for more on this //
************************************************************************//
- IntegerhDD
- AddressField_Current_Pointer_Value(integer iField)
************************************************************************//
Field_Current_Pointer_Value //
File_Field_Current_Pointer_Value //
This returns the data pointer to the extended field. At this point //
this is the data. Be careful if you change the data, be even more //
careful if you change the pointer (don't do it!!!!) //
************************************************************************//
- IntegerhFld
- AddressFile_Field_Current_Pointer_Value(integer iFile integer iField)
- AddresspValue
- IntegerhDD
- DefineExtendedField(integer iField)
************************************************************************//
Create an extended field object for the passed field. . //
If field already exists, do nothing. This should only be used with //
text and binary fields. //
************************************************************************//
- DefineAllExtendedFields()
************************************************************************//
create extended DD fields for all text and binary files //
************************************************************************//
- IntegeriCount
- IntegeriType
- IntegeriField
- IntegeriFile
- ExtendedFieldsUpdate(integer bSave)
************************************************************************//
Update Extended fields to FileBuffer. DD-Fields ---> FileBuffer //
Private //
************************************************************************//
- IntegerhFlds
- ExtendedFieldsRefresh(Boolean bCleared)
************************************************************************//
Refresh Extended field from FileBuffer. DD-Fields <--- FileBuffer //
Private //
************************************************************************//
- IntegerhFlds
- Set(Integer iField Integer iArg1)
************************************************************************//
Procedure Set Field_Options //
This procedure can be used to set the Item_Options of a field. This can//
be passed any number of arguments. //
Support the following special first parameters: //
DD_CLEAR_FIELD_OPTIONS - clear all following passed otpions //
DD_CLEAR_ALL_FIELD_OPTIONS - clear all options //
************************************************************************//
plus unknown arguments
- IntegeriObj
- IntegeriOptions
- IntegeriOption
- IntegeriArg
- IntegeriClear
- IntegeriType
- IntegerField_Options(Integer iField)
************************************************************************//
Function Field_Options //
This function returns all the item_options which have been set for //
a field. The value from the Record_Buffer object will be binary or'ed //
with constand Default_Item_Options and the DD_AUTOCLEAR constants when //
the Autoclear_State of the field has been set. //
Keep in mind that Autoclear is *not* kept in the Item_Options //
property. //
************************************************************************//
- integerField_Option(Integer iField Integer iOption)
- IntegeriOptions
- IntegeriState
- Set(Integer iField Integer iArg1)
Integer iOption
- IntegeriObj
- IntegeriOptions
- IntegeriOption
- IntegeriArg
- IntegeriClear
- IntegerForeign_Field_Options(Integer iField)
- IntegeriOpts
- IntegeriAux
- IntegeriFile
- IntegeriIndex
- Set(Integer iField Integer iOption Integer bSet)
- IntegerForeign_Field_Option(Integer iField Integer iOption)
- IntegeriOptions
- IntegeriState
- IntegerFile_Field_Options(Integer iFile Integer iField)
************************************************************************//
Function File_Field_Options //
This procedure is being used by DEOs when they need to copy the item- //
options from the Data_Set. When the filenumber being passed is not //
equal to the Main_File of this Data_Set, then the Foreign_Field_Options//
will be applied. //
************************************************************************//
- IntegeriDSO
- IntegeriMain_File
- IntegeriOpts
- IntegeriRB
- IntegeriType
- Set(Integer iField Integer iMsg)
************************************************************************//
Procedure to set the message to be send on item entry. //
************************************************************************//
- integerField_Entry_msg(Integer iField)
************************************************************************//
Function to return the message to be send on item entry. //
************************************************************************//
- Set(Integer iField Integer iMsg)
************************************************************************//
Procedure to sent the message to be send on item exit. //
************************************************************************//
- IntegerField_Exit_msg(Integer iField)
************************************************************************//
Function to return the message to be send on item exit. //
************************************************************************//
- Set(Integer iField Integer iMsg)
************************************************************************//
Procedure to set the message to be send on item validation. //
************************************************************************//
- IntegerField_Validate_msg(Integer iField)
************************************************************************//
Function to return the message to be send on item validation. //
************************************************************************//
- Set(Integer iField Integer iObj)
************************************************************************//
Set/Get Field_Prompt_Object //
Set/Get Field_Zoom_Object //
Used to Get/Set the Prompt_Object for a Field. //
************************************************************************//
- IntegerField_Prompt_Object(Integer iField)
- IntegeriObj
- Set(Integer iField Integer iObj)
- IntegerField_Zoom_Object(Integer iField)
- IntegerFile_Field_Prompt_Object(Integer iFile Integer iField)
************************************************************************//
Set/Get File_Field_Prompt_Object //
Set/Get File_Field_Zoom_Object //
Used to Get/Set the Prompt_Object for a Field. //
************************************************************************//
- IntegeriObj
- IntegerFile_Field_Zoom_Object(Integer iFile Integer iField)
- IntegeriObj
- IntegerField_Validation_Type(Integer iField)
************************************************************************//
Get Field_Validation_Type //
Return the extended validation type for this field. //
************************************************************************//
- IntegeriType
- Set(Integer iField String sMin String sMax)
************************************************************************//
Procedure Set Field_Value_Range //
Procedure to define a valid value range for a field. //
************************************************************************//
- Set(Integer iField integer iObj)
************************************************************************//
Required Messaging to Support Validation Tables //
************************************************************************//
************************************************************************//
Procedure Set Field_Value_Table //
Procedure to define a validate table for a field. //
************************************************************************//
- Field_Fill_List(integer iField integer iObj integer iMsg)
************************************************************************//
File_Field_Fill_List //
Field_Fill_List //
This provides a callback to the calling object (iObj) by passing this //
object the message iMsg for each item in the table. Note this works for//
all extended validation types (range, check, etc.) //
************************************************************************//
- File_Field_Fill_List(integer iFile integer iField integer iObj integer iMsg)
- IntegeriDSO
- integerField_Table_Object(integer iField)
************************************************************************//
Get Field_table_Object //
Get File_Field_table_object //
Returns the ID if any of the validation table for this object. //
************************************************************************//
- IntegeriRval
- integerFile_Field_Table_Object(integer iFile integer iField)
- IntegeriDSO
- stringValidation_Table_Description(integer iObj String sVal)
************************************************************************//
Get Field_table_Descripton //
Returns code description value for the passed string for the //
passed validation table object. Normally use field_value_description //
************************************************************************//
- StringsDesc
- stringField_Current_Description(integer iField)
************************************************************************//
Get Field_Current_description //
Get File_Field_Current_description //
Returns the description value for the field's code value. This only //
works if you have a validation table - else it returns the field value //
************************************************************************//
- StringsDesc
- StringsVal
- IntegeriObj
- stringFile_Field_Current_Description(integer iFile integer iField)
- IntegeriDSO
- Set(Integer iField String sTrue String sFalse)
************************************************************************//
Required Messaging to Support Checkbox items in DEOs //
************************************************************************//
************************************************************************//
Procedure Set Field_Checkbox_Values //
Defines a field as a two item field and defines True and False values //
************************************************************************//
- integerField_Value_Select_State(Integer iField String sValue)
************************************************************************//
Function Field_Value_select_State //
Returns a field's select_State based on the pased value //
Function Field_select_State //
Returns a field's select_State based on the DD buffer contents //
************************************************************************//
- integerField_Select_State(Integer iField)
- StringsValue
- integerFile_Field_Select_State(Integer iFile integer iField)
************************************************************************//
Function File_Field_select_State //
Returns a file/field' select_State based on contents of DD buffer //
Function File_Field_Value_select_State //
Returns a file/field' select_State based on passed value //
************************************************************************//
- IntegeriDSO
- integerFile_Field_Value_Select_State(Integer iFile integer iField String sValue)
- IntegeriDSO
- StringField_CheckBox_Value(Integer iField Integer iState)
************************************************************************//
Function Field_Checkbox_Value //
Function File_Field_Checkbox_Value //
get the actual database value that corresponds to the boolean value //
passed. //
************************************************************************//
- StringFile_Field_CheckBox_Value(Integer iFile Integer iField Integer iState)
- IntegeriDSO
- Set(integer iField integer iState)
************************************************************************//
Procedure Set Field_select_State //
Set the buffer's value based on the state passed. This notifies DEOs //
if needed (set Field_Current_Value does this) //
************************************************************************//
- StringsValue
- Set(Integer iFile Integer iField Integer iState)
************************************************************************//
Procedure Set File_Field_select_State //
Set the buffer's value based on the state passed. This notifies DEOs //
if needed (set Field_Current_Value does this). First finds proper file //
DSO //
************************************************************************//
- IntegeriDSO
- Set(Integer iField String sCheck)
************************************************************************//
Procedure Set Field_Value_Check //
Procedure to define a check string for a field. //
************************************************************************//
- integerExec_Field_Message(Integer iField Integer iMsg_ID)
************************************************************************//
Function Exec_Field_Message //
This function will be called indirectly by DEOs when an item is being //
entered, exited or needs validation. The first argument holds the //
fieldnumber for the field and the second holds the id of the message //
which can be send to retrieve the message which needs to be send for //
this Field/Event combination. The value of the second argument can be //
GET_Field_Entry_MSG, GET_Field_Exit_MSG or GET_Field_Validate_MSG. //
************************************************************************//
- IntegeriMsg
- IntegeriResult
- StringsValue
- integerExec_File_Field_Message(Integer iFile Integer iField Integer iMsg_ID)
************************************************************************//
Function Exec_File_Field_Message //
This function will be called from within DEOs when an item is being //
entered, exited or needs validation. The first argument holds the //
file number, the second argument holds the field and the third //
holds the id of the message which can be send to retrieve the message //
which needs to be send for this File/Field/Event combination. //
The value of the second argument can be GET_Field_Entry_MSG, //
GET_Field_Exit_MSG or GET_Field_Validate_MSG. //
This will redirect to the proper data-set object. //
************************************************************************//
- IntegeriDSO
- IntegeriResult
- IntegerData_Set(Integer iFile)
************************************************************************//
Function Data_Set //
Find the data-set whose main_file is the same as File#. The message //
Which_data_set includes updating parent files, we will throw those out.//
This has been augmented to search down the DDO tree if we do not find //
the DD with our quick C Which_Data_set search //
************************************************************************//
- IntegeriTmp
- IntegeriDSO
- IntegerPrivate.Data_Set(integer iFile)
- IntegeriMax
- IntegeriDSO
- IntegerhDD
- IntegeriCount
- Set(Integer iFile Integer iField Integer iMsg String sValue)
************************************************************************//
Function File_Field_Property //
Procedure Set File_Field_Property //
These methods can be used to set/get a field property in a flexible //
way. The first two argument are the file- and fieldnumber followed by //
the ID of the message that should be send. The last argument should //
be the value to set or the variable to store the value in. //
************************************************************************//
- IntegeriDSO
- integerFile_Field_Property(Integer iFile Integer iField Integer iMsg)
- IntegeriDSO
- StringsValue
- IntegerField_Count()
************************************************************************//
This procedure will return the number of fields in the object //
************************************************************************//
- Clear_Visited_Fields()
************************************************************************//
This procedure will clear all flags in the visited_fields string so //
that all field will be validated on the next requests. //
************************************************************************//
- Private.Initialize_Visited(integer Up_and_Down integer Clear_Fields)
************************************************************************//
Private.Initialize_Visited //
This procedure will be called when validations (and perhaps other //
events) is requested. It clears the visited marks and then proceeds //
to clear the marks up the server tree. //
This is passed two parameters: Up_and_down, If true upward and downward//
initialize. If Clear_Fields also clear the field string //
************************************************************************//
- IntegeriMax
- IntegeriDSO
- IntegeriCount
- Initialize_Visited(integer Up_and_Down integer Clear_Fields)
************************************************************************//
Initialize_Visted //
Clears Visited marks and (maybe) field visited marks in all required //
DSOs. If Up_and_Down is TRUE DSOs are marked up and Down (delete style)//
propagation. If False, DSOs are marked up (save style). This does not //
have a mode to mark ALL DSOs in a structure. (Not needed so far). //
If Clear_Fields is T the field string marker is also cleared. //
The method of using the global integer DD_Current_Mark_ID is an opt- //
imizer. This is private - do not tamper with it! //
************************************************************************//
- IntegerPrivate.Valid_Structure(Integer Up_And_Down)
************************************************************************//
Private.Valid_Structure //
Internal recursive message to check file connections. Called from //
Valid_connections only. Private message //
************************************************************************//
- IntegeriRval
- IntegeriCount
- IntegeriMax
- IntegeriDSO
- IntegerValid_Structure(Integer Up_And_Down)
************************************************************************//
Valid_Structure //
Validate data-set updating connections against required connections //
Pass: Up_and_down=T if we should check Server and Client connections //
=F is we only check servers //
Ret: 0 if ok, Missing File# if not ok. //
************************************************************************//
- IntegerValidate_Fields(integer DoAllFg integer bNoStop)
************************************************************************//
Validate_Fields //
This function will execute the validation message for each field within//
this object. If DoAllFG is true all items are validated. If false //
only unvisited items are checked. //
Added bNoStop, If true, all items are validated. It is up to you to //
do something with the possible cascade of errors //
if the err returns DFERR_ENTER_VALID_REC_ID we will not continue //
the validation (the other fields will be bad). This works best if the //
findreq appears as one of the first fields in the file (which is almost//
always the case //
************************************************************************//
- IntegeriRetval
- IntegeriMax
- IntegeriCount
- IntegeriFile
- IntegeriErr
- StringsVS
- IntegerValidate_Required(Integer iField)
************************************************************************//
Function Validate_Required //
************************************************************************//
- IntegerbErr
- IntegerValidate_FindReq(Integer iField)
************************************************************************//
Function Validate_FindReq //
************************************************************************//
- IntegerbErr
- IntegeriOpts
- IntegerValidate_Field(Integer iField)
************************************************************************//
Function Validate_Field //
This function will be called to validate a field. //
mark field currently being validated //
Altered to Check DD options (required, findreq) //
************************************************************************//
- IntegeriResult
- IntegeriMsg
- IntegeriObj
- StringsValue
- IntegeriFile
- IntegeriOpts
- IntegerFile_Field_Validate_Field(Integer iFile Integer iField)
************************************************************************//
Function File_Field_Validate_Field //
This function will be called to validate a field. //
************************************************************************//
- IntegeriDSO
- IntegeriResult
- IntegerhOldOrigin
- IntegerValidate_Key_Field(Integer iField)
************************************************************************//
Function Validate_Key_Field //
This function will be called to check if a key has been changed. //
************************************************************************//
- StringsOld_Value
- StringsNew_Value
- StringsKeys
- IntegeriState
- BooleanbMultiKeys
- IntegerValidate_Data_Sets(integer DoAllFg integer bNoStop)
************************************************************************//
Validate_Data_Sets //
This function will execute the validation message for each field of the//
data set and all of its parents in parent first order. //
Pass: DoALLFg bNoStop //
Added bNoStop, If true, all items are validated. It is up to you to //
do something with the possible cascade of errors //
************************************************************************//
- IntegeriDSO
- IntegeriRetval
- IntegeriCount
- IntegeriMax
- IntegerbErr
- Entry_Update_Data_Sets(Integer iFile Integer iAll)
************************************************************************//
Entry_Update_Data_Sets //
This sends entry_update to all server data-sets and itself //
************************************************************************//
- IntegeriDSO
- IntegeriMax
- IntegeriCount
- integerValid_Servers()
************************************************************************//
Valid_Servers //
Check that Server data-sets exist for all required server file numbers //
************************************************************************//
- IntegeriRval
- IntegeriCount
- IntegeriMax
- IntegeriDSO
- IntegeriPos
- IntegeriFile
- StringsFiles
- integerValid_Clients()
************************************************************************//
Valid_Clients //
Check that Client data-sets exist for all required Client file numbers //
************************************************************************//
- IntegeriRval
- IntegeriCount
- IntegeriMax
- IntegeriDSO
- IntegeriPos
- IntegeriFile
- StringsFiles
- IntegerValidate_Save_Structure(Integer ForceFg)
************************************************************************//
Function Validate_Save_Structure //
Validates save updating connections. If error returns file# that is //
expected and missing. If no error Set Validated_Save_connectio_State //
indicating that the connection validation has occurred and is ok //
************************************************************************//
- IntegeriRval
- IntegeriMode
- IntegerValidate_Delete_Structure(Integer ForceFg)
************************************************************************//
Function Validate_delete_Structure //
Validates Delete Structure. If cascade_state is true this must check //
up and down the tree. If no cascade_state just check up the tree. If //
Ok, set Validated_Delete_no_Cascade_Connection_State and and or //
Validated_Delete_Cascade_Connection_State //
Pass: ForceFg - if TRUE force the validation. //
************************************************************************//
- IntegeriCascade
- IntegeriMode
- IntegeriSt
- IntegeriRval
- Request_Entry_Update(Integer iFile Integer iAll)
************************************************************************//
Request_Entry_Update. //
This procedure will be called whenever the Data_Set wants its DEOs to //
write their values to the record buffer. The value of OPERATION_MODE //
determines if this is for finding an record or before saving a record. //
We use this event to tell our Record_Buffer to update the //
global record buffer. //
Modified to visit all server DSOs //
Note that this is only sent to the DSO starting the operation. //
We must manually send this to all server data-sets ourselves //
Note that during a DSO save this will get passed iFile=0 and iAll=3 //
Changed to Support EntryUpdateLocalState (private) //
************************************************************************//
- Update_Focus_Field()
************************************************************************//
Update_Focus_Field //
Forces the focus field to get update its value with the data-set. //
This insures that the DSO and DEO contain the same values. //
************************************************************************//
- IntegeriFocObj
- Update_Focus_Field_For_Operation(Integer iOperationMode)
very internal. Used to set Operation_mode and Operation_origin before the
update. A developer can use this in the DEO to know what state the update is in.
This was created because a DEO value change will trigger an OnChange event and you
can look at this and know that this is part of a DD operation.
This is *only* called by the DD operations in this class and the change is made for as
small of a period as possible.
- IntegeriOldMode
- IntegeriOldOrigin
- IntegerRequest_Validate()
************************************************************************//
Request_validate //
Augment to validate all field values that do not get //
validated as part of the item validation process. The advantage //
of item validation (over only field validation) is that an error //
returns you to the offending item. //
************************************************************************//
- IntegeriRetval
- IntegeriOldOrigin
- IntegeriOldMode
- IntegerRequest_Validate_All()
- IntegerbOld
- IntegeriRetVal
- File_Field_Find(integer iFindMode integer iFile integer iField integer bEntUpdt integer bShowErr integer bDfrd)
************************************************************************//
File_Field_Find //
Like Item_find except entry-update is forced through the DD, not DEO //
************************************************************************//
- IntegerbOld
- File_Field_AutoFind(integer iFile integer iField integer iFindMode)
************************************************************************//
File_Field_AutoFind //
Autofind for requestd file, field and mode. //
If mode not passed, EQ is assummed //
************************************************************************//
- IntegereMode
- File_Field_Default_AutoFind(integer iFile integer iField)
************************************************************************//
File_Field_Default_AutoFind //
Autofind in default mode (does not set changed states). Can be used //
within Clear and Clear_all to autofind parents. Parent values can be //
maintained using retainAll option //
************************************************************************//
- IntegeriOldState
- IntegerhoDD
- File_Index_Find(integer iFindMode integer iFile integer iIndex integer bEntUpdt integer bShowErr integer bDfrd)
************************************************************************//
File_Index_find //
Like item_find except you pass the index you want to find with and //
ent-update occurs through DDO buffers not deo buffers. //
This is currently private and is only used by web-applications //
************************************************************************//
- IntegerbOld
- RowIdriRec
- IntegerwasChanged
- IntegerhDD
- IntegeriOldStat
- BooleanbOk
- Find_Records()
************************************************************************//
Find_Records //
This does a refind of all records based on the contents of the //
refine_record_id property. //
This would be used after clearing the DDs and loading the local rencum //
buffer with recnums. This can be used by remote DEOs (BPOs). //
//
Find all existing records. This must be done in bottom-up, breadth //
first order. i.e., Start with the passed DD, find it and then find for //
parents. Only find if the record is non-zero and it is different than //
the current_record. //
This order will allow us to support changed parents. //
Don't use this if you do not understand what it does. //
Private.Find_Records is a helper. We will keep this private because //
it is rather specialized and only used by WebApp. //
************************************************************************//
- Private.Find_Records()
- IntegerhPrnt
- IntegeriMax
- IntegeriCount
- RowIdriRec
- IntegeriRec
- IntegeriMain
- Request_Save()
************************************************************************//
Request_Save //
Augmented to test updating connections. //
If error report it. //
************************************************************************//
- IntegeriRval
- Request_Delete()
************************************************************************//
Request_Delete //
Augmented to test updating connections. //
If error report it. //
************************************************************************//
- IntegeriRval
- Set(Integer iField string sVal)
************************************************************************//
Status Help Support //
************************************************************************//
************************************************************************//
Set Status_Help //
Set status-line help for the passed field. This could have been named //
Set Field_Status_Help but this keeps this message interface consistent //
with the rest of DF for windows. //
************************************************************************//
- stringStatus_Help(integer iField)
************************************************************************//
Get Status_Help //
Get status-line help for the passed field. This could have been named //
Get Field_Status_Help but this keeps this message interface consistent //
with the rest of DF for windows. //
************************************************************************//
- StringsHelp
- IntegeriObj
- stringFile_Field_Status_Help(Integer iFile Integer iField)
************************************************************************//
Get File_Field_status_Help //
Get status-line help for the passed file and field. This is called //
by DEOs (or any other object) that needs help for a particular file //
and field. //
************************************************************************//
- IntegeriDSO
- StringsValue
- Set(Integer iField integer iType)
************************************************************************//
Field Mask Support //
************************************************************************//
************************************************************************//
Get/Set Field_Mask_Type //
Get File_Field_Mask_Type //
Allows user to set a mask type. Legal value is any of the current mask //
window types. 0 Means undefined. //
************************************************************************//
- integerField_Mask_Type(integer iField)
- integerFile_Field_Mask_Type(Integer iFile Integer iField)
- IntegeriDSO
- Set(Integer iField integer iState)
************************************************************************//
Get/Set Field_Mask_Value_State //
Get File_Field_Mask_Value_state //
If TRUE the value returned by DEO will contain mask characters. //
Currently not supported. //
************************************************************************//
- integerField_Mask_Value_State(integer iField)
- integerFile_Field_Mask_Value_State(Integer iFile Integer iField)
- IntegeriDSO
- Set(Integer iField string sMask)
************************************************************************//
Get/Set Field_Mask //
Get File_Field_Mask //
Allows user to set a mask strinng. Legal value is any of the current //
masks. Note an empty string with a valid mask type implies that the //
system should figure it out by itself. //
************************************************************************//
- stringField_Mask(integer iField)
- stringFile_Field_Mask(Integer iFile Integer iField)
- IntegeriDSO
- StringsValue
- Set(Integer iField string sName)
************************************************************************//
Get/Set Field_Label_Short //
Get File_Field_Label_Short //
Short for field. This is normally used by grid headers. //
************************************************************************//
- stringField_Label_Short(integer iField)
- stringFile_Field_Label_Short(Integer iFile Integer iField)
- IntegeriDSO
- StringsValue
- Set(Integer iField string sName)
************************************************************************//
Get/Set Field_Label_Long //
Get File_Field_Label_Long //
Full Name for field. This is normally used by form labels //
************************************************************************//
- stringField_Label_Long(integer iField)
- stringFile_Field_Label_Long(Integer iFile Integer iField)
- IntegeriDSO
- StringsValue
- stringField_Label_Tag(integer iField)
************************************************************************//
Get Field_Label_Tag //
This is not really a DD attribute (it is in the API) but it is //
appropriate to be accessed from the DD //
************************************************************************//
- StringsName
- IntegeriFile
- stringSmartCase(string sName)
- IntegeriPos
- IntegeriNewPos
- StringsRight
- stringField_Label(Integer iField Integer iType)
************************************************************************//
Get Field_Label //
Get File_Field_Label //
Handy function to get the label for a field. Three "types" are //
supported: //
DD_LABEL_SHORT use short, if none use long, if none use smart tag //
DD_LABEL_LONG use long, if none use smart tag //
DD_LABEL_TAG use smart tag //
If you want an explicit field name use oneof the other messages. //
************************************************************************//
- IntegeriServer
- StringsValue
- stringFile_Field_Label(Integer iFile Integer iField Integer iType)
- IntegeriDSO
- StringsValue
- Set(Integer iField string sName)
************************************************************************//
Get/Set Field_Class_Name //
Normally this will not be used by a running program. However, it //
could be possible to create classes dynamically at runtime, in which //
case these messages could be useful. No File_Field is provided. If the //
person knows enough to create dynamic classes they can find the DD. //
************************************************************************//
- stringField_Class_Name(integer iField)
- Set(Integer iField Integer iErr String sMsg)
************************************************************************//
Field and General Data-Set Error Support //
************************************************************************//
************************************************************************//
Set Field_Error //
This procedure should be used to set a specific error number and //
message for a particular field. This can be used with the Field_error //
message to generate this error during a validation. //
************************************************************************//
- IntegerField_Error_Number(Integer iField)
************************************************************************//
Get Field_error_Number //
Get Field_error_Message //
Used to retreive the error number and message for a particular field //
************************************************************************//
- StringField_Error_Message(Integer iField)
- Field_Error(Integer iField String sDefault String sParam1 String sParam2)
************************************************************************//
Procedure Field_Error //
This procedure is used to declare an error on a standard field //
validation violation like Range or Check. //
Can pass 1 to 4 params: //
iField - Standard usage. Generates field as defined //
for this field. If field=-1, General error //
iField SDefault If no field error mess (or field=-1) use //
the default message //
iField sDefault sParam1 {sParam2} Replace occurances of @PARAM1 and //
@PARAM2 in text with these values //
************************************************************************//
- IntegeriErr
- StringsMess
- Data_set_error(Integer iField Integer iErr String sMess String sParam1 String sParam2)
************************************************************************//
Procedure Data_Set_Error //
This procedure is used to declare a data-set error. Pass error number //
and optional error message text. //
If iErr is 0, use the default error number. //
sParam1 and sParam2 are optional. If passed they are used as text //
replacements for @PARAM1 and @PARAM2. //
We pass iField (even though we don't use it) so that augmentations //
could support error logging down to a field level. If a non-field error//
is required the developer should pass negative values (e.g., -1) //
This will redirect errors locally if not already redirected //
//
Altered to additionally support %1 %2 replacements as well as //
replacements for @PARAM1 and @PARAM2. (vdf8.2) //
************************************************************************//
- IntegeriOldField
- Operation_Not_Allowed(integer iErr)
************************************************************************//
Procedure Operation_not_allowed //
Augment to support Error_Report_Mode. Allows errors without error mess //
This will redirect errors locally if not already redirected //
************************************************************************//
- IntegerbOK
- Error_Report(integer iError integer iLine string ErrMsg)
----------Start of Experimental code not yet ready for 8.3 ----------
Procedure Data_set_error Integer iField Integer iErr String sMess ;
String sParam1 String sParam2
If iErr eq 0 ; // if no error is passes, used a default error
Move DD_DEFAULT_ERROR_NUMBER to iErr
If sMess GT "" Begin
// Support message replacements.. Up to two values
// altered to support @Param1/2 and %1 %2 messages
If (Num_Arguments>3) begin
Move (Replaces("@PARAM1", sMess, sParam1)) to sMess
If (Num_Arguments>4) begin
Move (Replaces("@PARAM2", sMess, sParam2)) to sMess
Move (SFormat(sMess,sParam1,sParam2)) to sMess
end
else begin
Move (SFormat(sMess,sParam1)) to sMess
end
end
End
Send DDError iErr sMess iField
End_Procedure
Procedure DDError integer iError string sError integer iErrorField
integer iOldField iField
Get Current_validate_field to iOldField
If (Num_Arguments<3) Move 0 to iField
else Move iErrorField to iField
If (iField<>0) Set Current_Validate_field to iErrorField
Move self to ghoErrorSource
Send OnDDError iError sError iField
Move 0 to ghoErrorSource
Set Current_validate_field to iOldField
End_Procedure
Procedure OnDDError integer iError String sError integer iField
// showln "OnDDError: " (object_label(self)) ' error=' iError ' field=' iField ' Message=' sError
Error iError sError
End_Procedure
//************************************************************************//
// Procedure Operation_not_allowed //
// Augment to support Error_Report_Mode. Allows errors without error mess //
// This will redirect errors locally if not already redirected //
//************************************************************************//
Procedure Operation_Not_Allowed integer iErr
Send DDError iErr ""
End_Procedure
----------End of Experimental code not yet ready for 8.3 ----------
************************************************************************//
Procedure Error_report //
Local error handler. When errors are redirected to the DD this proce- //
dure handles the errors. If error_report_mode is NO-report it sets //
the err indicator and returns. Else it redirects the error to the //
main error handler first moving its ID to ghoErrorSource. This way the //
handler knows who sent this message and will get additional error info //
by calling Get Extended_error_message //
************************************************************************//
- IntegerhoErrId
- IntegerbRedirect
- stringExtended_Error_Message()
************************************************************************//
Function Extended_error_message //
This is called (by the system error handler) to get additional informa-//
tion about the error. Returns a multi line string with each line //
separated by a "\n". Return the file number, name, and if possible //
the field number and name. //
************************************************************************//
- StringsExtMess
- StringsFile
- IntegeriFile
- IntegeriField
- IntegerExtended_Error_File()
- IntegerExtended_Error_Field()
- Add_System_File(integer iFile integer iLock_Mode)
************************************************************************//
The following messages are used to control smart file mode exception //
handling. The message "Send Add_system_File file# Fg" allows you to //
add system files (or any other files not known to the dso structure) //
within define_fields. This allows you to not have to augment the msg //
reset_filemodes_for_lock. The only truly public messages here are //
Add_system_file and Remove_system_File (which s/b rarely used). //
************************************************************************//
************************************************************************//
Procedure Add_System_File //
Adds a system file for smart_file_mode handling. A second optional //
parameter may be passed to determine of the sys file should only be //
locked during a new save (and not during a delete or a save of an //
existing record). It is expected that this will be the only public //
message used to control smart filemode. All of the remaining sys file //
messages are considered advanced. //
************************************************************************//
- Integeriobj
- IntegeriCnt
- IntegeriMode
- integerSystem_File_Count()
************************************************************************//
Function System_File_Count //
Return number of system files //
************************************************************************//
- IntegerSystem_File_Number(Integer iItem)
************************************************************************//
Function System_File_Number //
Returns system file number for passed item. //
************************************************************************//
- integerSystem_File_Lock_Mode(integer iItem)
************************************************************************//
Function System_File_Lock_Mode //
Returns system flag to determine if file is only used during a new //
save (and not during an exiting save or a delete). //
************************************************************************//
- Remove_System_File(integer iFile)
************************************************************************//
Procedure Remove_System_File //
Removes a system_file for smart_file_Mode handling. This remvoes the //
first occurance of the file (S/b the only occurance). We assume that //
this will be rarely used. //
************************************************************************//
- Integeriobj
- IntegeriCnt
- IntegeriItmCnt
- Set(Integer iFile)
These set messages, add_client_file, add_server_file and add_system_file
were added to more easily support visual DD class modeling. They do the
same thing the Send counterpart messages do
- Set(Integer iFile)
- Set(Integer iFile Integer iLock_Mode)
- Set(Integer iField Integer iSysFile Integer iSysField)
The Set Field_Auto_Increment method replaces the need to use the Define_Auto_Incrmement
command. This models more easily and it supports multiple auto-increment fields
- Integer[]AutoIncFields
- tDDFileField[]SysFileFields
- IntegeriIndex
- IntegerField_Auto_Increment(Integer iField Integer ByRef iSysField)
Get auto-increment system file/field value for a field. There really should be no
reason to ever need this. Field is returned byref
- IntegeriSysFile
- Integer[]AutoIncFields
- tDDFileField[]SysFileFields
- IntegeriIndex
- Reset_Filemodes_For_Lock()
************************************************************************//
Procedure Reset_FileModes_for_Lock //
Augmented to set any system files defined via the Add_System_file //
message. This allows us to hide this procedure for the vast majority //
of cases. //
************************************************************************//
- BooleanbNewRec
- IntegeriItmCnt
- IntegeriCnt
- IntegeriMode
- IntegeriFile
- Creating()
************************************************************************//
Procedure Creating //
Augmented to handle auto-increment fields if defined. The value from //
the auto-incre sys file is incremented, saved and moved to the new //
record. //
************************************************************************//
- IntegeriSrcFile
- IntegeriSrcField
- Integeri
- IntegeriAutoFields
- IntegeriDestFile
- IntegeriDestField
- NumbernNum
- Integer[]AutoIncFields
- tDDFileField[]AutoIncSysFileFields
- Save_Main_File()
************************************************************************//
Procedure Save_main_File //
Augmented to fix a bug in the data-set C code. When a record is saved //
as part of a delete operation OnNewCurrentRecord is not called. It //
should be. We will do this in flex code for now. //
************************************************************************//
- RowIdriRec
- IntegeriRec
- IntegeriMain
- BooleanbRecnumTable
- Clear_Main_File()
************************************************************************//
Procedure Clear_main_File //
Augmented to not clear if a system-file. The auto-latching of views //
may cause a sys file DD to get cleared. This corrects this. This really//
belongs in Data_set (C) but we will not risk this for now. //
************************************************************************//
- IntegeriFile
- IntegeriIsSys
- Find(integer iMode integer iIndex)
************************************************************************//
Procedure Find Mode Index //
Executes a request_find on the mainfile. This is easier that having to //
pass file number all the time. Useful for batch operations. //
If Index is 0, use find_by_recnum (it handles a recnum of 0 better) //
************************************************************************//
- IntegeriFile
- IntegeriRec
- Request_Clear()
************************************************************************//
Procedure Request_Clear //
Procedure Request_Clear_All //
So many people make the mistake of using requeset_clear and request_ //
clear_all that will support these are alteratives to clear and //
clear_all. The preferred messages remain Clear and Clear_all. //
This would not work if you nested DEOs within DSOs (no-one does). //
************************************************************************//
- Request_Clear_All()
- set(Integer bState)
*****************************************************//
we want changed_state to always go through the
Record_buffer object. From there it is sent to
here. So if state or RB does not match we must
send to the RB object...it will delegate to here
*****************************************************//
- IntegerhRB
- Attach_Main_File()
**********************************************//
this lets us use the new attach logic
**********************************************//
- DDAttach()
This is a smarter attach than the normal attach command. It only attaches data from a parent
if 1) the DDO parent is connected to the structure and 2) if there is a record to attach. It will
not attach empty records into a child. This should make the finding (and saving) more sensible when
partial DD structures are used. For example, often a report does not all of the parent DDOs - however if
they are not provided, finding can get messed up because blank data is being moved into the child before a
find. This has been a problem since 3.0. This should just make it go away.
- IntegeriNumFields
- IntegeriFile
- IntegeriField
- IntegeriRelFile
- IntegeriRelField
- IntegeriType
- IntegeriServerCount
- IntegeriServer
- IntegerbOk
- IntegerbChanged
- IntegeriStat
- NumbernValue
- StringsValue
- DatedValue
- DateTimedtValue
- Field_Mask_Changed(Integer iField string sMask)
************************************************************************//
Procedure Field_Mask_Changed //
Notify all DEOs that a mask has changed. //
this message is sent by set Field_Mask //
************************************************************************//
- Integeri
- IntegeriDEOs
- IntegeriDEO
- IntegeriMain_File
- Field_label_Changed(Integer iField boolean bLong string sLabel)
************************************************************************//
Procedure Field_Label_Changed //
Notify all DEOs that a label has changed. //
This message is sent by Set Field_Label_long & Field_Label_Short //
************************************************************************//
- Integeri
- IntegeriDEOs
- IntegeriDEO
- IntegeriMain_File
- Field_Option_Changed(Integer iField Integer iOptions Boolean bClear)
************************************************************************//
Procedure Field_Options_Changed //
Notify all DEOs that a field option has changed. //
This message is sent by Set Field_Option //
************************************************************************//
- Integeri
- IntegeriDEOs
- IntegeriDEO
- IntegeriMain_File
- Set(Integer iField Integer iOption Boolean bSet)
************************************************************************//
Procedure Set Field_option and File_Field_Option //
Procedure Set Field_option_clear and File_Field_Option_Clear //
Procedure Set Field_option_toggle and File_Field_Option_toggle //
//
Set, clear or toggle a field option //
Multiple options can be passed as an expression //
(e.g. Set Field_option 2 (dd_Retain IOR dd_NoEnter). //
Unlike set Field_options this notifies DEOs of changes //
************************************************************************//
supports setting and clearing. e.g.:
Set Field_Option Field Customer.Name DD_NoEnter to True
This new syntax is now the recommended syntax but the older syntax without
the last parameter is supported (where true is the default). The old syntax is
only supported for compatibility. This means that Field_Option_Clear should
also be replaced with Field_Option
- BooleanbSetTrue
- Set(Integer iFile Integer iField Integer iOption Boolean bSet)
- IntegerhoDD
- BooleanbSetTrue
- Set(Integer iField Integer iOptions)
- Set(Integer iFile Integer iField Integer iOptions)
- Set(integer iField Integer iOption)
- IntegeriOldOption
- Set(Integer iFile Integer iField Integer iOption)
- IntegerhoDD
- integerField_Index(integer iField)
Field_Index
File_Field_Index
This returns the main index for a field. This replaces the DSO message Field_Main_index which
should no longer be used by DDOs. The old message has the problem that the DDO or DSO using
this message may not be the owner of the field. So augmenting the owner DDO did not insure that
all requests for this index would go through it. Now you can augment Field_Index and always
be sure that any DDO requesting an index for a file (via file_field_index) will always go to
the owner object.
- IntegeriFile
- IntegeriIndex
- IntegeriOrder
- integerFile_Field_Index(integer iFile integer iField)
In all cases, this message should be sent instead of Field_Main_Index. If
augmentation was used in Field_Main_Index, use Field_Index to insure the owner object
is called.
- IntegeriIndex
- IntegerhoDD
- Clear()
12/1 change: Make sure all of the major DD operations update the DD with the value in
the focus field. After the actual find, save, clar or delete, the DD buffer contains information that
is not yet reflected in the DEOs (before refresh is called) we want to make sure that we
don't try to get data from the DEO. Get Field_Current_Value now checks if operation_mode is
non-zero. If it is, it always gets from the DD buffer.
- Clear_All()
- Request_Assign(Integer iFile)
- Find_By_Recnum(Integer iFile Integer iRecord)
- FindByRowId(Integer iFile RowID riRowId)
- Request_Find(Integer eFindMode Integer iFile Integer iIndex)
- Request_Superfind(Integer eFindMode Integer iFile Integer iField)