Commonly Used Data Dictionary Object Properties and Functions

When working with Data Dictionary objects you will actually use a small set of DD properties and functions. Those are the methods that allow you check the status of a DDO (is it changed, does it have a record) and allow you to get and set DDO field values. The most commonly used methods are:

 

HasRecord

 

Get HasRecord of hoDDO to bHasRecord

HasRecord is used to determine if your DDO has a current record. This can be used to determine if a find operation succeeded (if HasRecord is true), if the DDO buffer did not contain a record prior to the find operation (otherwise, check the Found indicator).

It can also be used to determine if a save will result in a new record save (if HasRecord is false) or an edit of an existing record (if HasRecord is true).

Procedure Refresh integer iMode

    Boolean bHasRecord

    Handle  hoDD

    Forward Send Refresh iMode

    // if record exists, enable the print button.

    Get Server to hoDD

    Get HasRecord of hoDD to bHasRecord

    Set Enabled_State of oPrintBtn to bHasRecord

End_Procedure  // Refresh

 

Should_Save

 

Get Should_Save of hoDDO to bChanged

Should_Save can be used to determine if a DDO has changed. If Should_Save is true, the DDO structure has changed and a save may be needed. Should_Save checks the changed state of a DDO and its parent DDOs. It also checks to see if a parent record has been switched.

There is no set variant of this message. Should_Save is set indirectly through data-input or by other messages such as Set File_Field_Changed_Value, Find, Clear, Request_Save, etc.

Get Should_Save of hoDDO to bChanged

If bChanged begin

    Get Request_Validate of hoDDO to bError

    If (not(bError)) begin

        Send Request_Save of hoDDO

    End

End

By evaluating Should_Save and HasRecord you can determine the major states of any DDO:


 

HasRecord=True

HasRecord=False

Should_Save=True

A changed record exists. A save will edit the existing record.

A new changed record. A save will create a new record.

Should_Save=False

An unchanged record exists. A save is not needed.

A new unchanged record. A save is not needed

 

CurrentRowId

 

Get CurrentRowId of hoDDO to riRec

CurrentRowId returns the RowId of the current record. If there is no current record (HasRecord=false), CurrentRowId will be null. This is often used to store the value of a current record so that it can be re-found at a later time.

Procedure RunUpdate

    RowId riCust

 

    // remember the original record

    Get CurrentRowId of oCustomer_DD to riCust

 

    // this may change the current record

    Send ProcessAllCustomers

 

    // re-find the original record

    Send FindByRowId of oCustomer_DD Customer.File_Number riCust

End_Procedure

Field_Current_Value

 

Get Field_Current_Value of hoDD Field Customer.Name to sName

Set Field_Current_Value of hoDD Field Customer.Name to sName

 

Get File_Field_Current_Value of hoDD File_Field Customer.Name to sName

Set File_Field_Current_Value of hoDD File_Field Customer.Name to sName

These messages are used to retrieve and change a field’s value. Get Field_Current_Value is used to retrieve the current value of a field. This message is used frequently.

You will note that many of the samples use the file buffer to directly obtain the value of a field (e.g. Move Customer.Name to sName). This is discussed in detail in Understanding File Buffers and DDO Field Buffers.

There are two variants of the message, “Field” and “File_Field”. This is discussed in Understanding the File_Field and Field  Keywords.

The set version of this message is used to change the current value of a field. You change the value of DDO field in preparation for a save. When you change a field’s value you must also change its changed-state. This can be done with the Field_Changed_State message.

Set Field_Current_Value of hoDD Field Customer.Name to sName

Set Field_Changed_state of hoDD Field Customer.Name to True

The message File_Field_Changed_Value performs both of these operations and is usually used for this purpose. Therefore, the Set File_Field_Current_Value message is rarely used.

Important

If a save operation is not changing the value of changed field, check if you are using Field_Current_Value instead of Field_Changed_Value. This is a common mistake.

Field_Changed_Value

 

Set Field_Changed_Value of hoDD Field Customer.Name to sName

Set File_Field_Changed_Value of hoDD File_Field Customer.Name to sName

This message is used to change the current value of a field and to set the field’s changed state to true. This is a commonly used message and is the suggested method for changing DDO field values in preparation for a save. This message is only used for changing values. There is no get version of this message.

Function ChangeName RowId riRecId string sName returns Boolean

    Boolean bErr

 

    Send Clear of oUser_DD

    Send FindByRowId of oUser_DD User.File_Number riRecId

    If (Found) Begin

        // update name and save

        Set Field_Changed_Value of oUser_DD field User.Name to sName

        Get Request_Validate of oUser_DD to bErr

        If (not(bErr)) begin

            Send Request_Save of oUser_DD

            // if save succeeds, Err indicator is False   

            Move (Err) to bErr

        End

    End

    Else Begin

        Move True to bErr

    End

    Function_Return bErr

End_Function

You will note that many of the samples use the file buffer to directly set the value of a field (e.g. Move sName to Customer.Name). This is discussed in detail in Understanding File Buffers and DDO Field Buffers.

There are two variants of the message, “Field” and “File_Field”. This is discussed in Understanding the File_Field and Field  Keywords.