These attributes identify characteristics of the object:

  • NAME — This CHARACTER attribute holds the name of the object.
  • PRIVATE-DATA — This CHARACTER attribute lets you associate any free-form text with an object, which can help program logic that determines how to identify or treat the object at run time.

You can see most of the object attributes that you can set for an object type in the AppBuilder property sheet for the object, such as the one shown for the Customer.Name fill-in field in the CustOrders window.

Figure 1. Property sheet for a fill-in field

The Advanced button takes you to the dialog box shown below. These are attributes that you might use less often, some of which are mentioned in this section.

Figure 2. Advanced Properties dialog box

Certain property sheet settings, such as Display and Enable, affect AppBuilder-generated executable statements and preprocessor values rather than the DEFINE statement for the object itself. You saw the effect of the Display and Enable settings already in the code for the AppBuilder-generated enable_UI procedure:

IF AVAILABLE Customer THEN
  DISPLAY Customer.CustNum Customer.Name Customer.Address Customer.City
    Customer.State
    WITH FRAME CustQuery IN WINDOW CustWin.
  ENABLE BtnFirst BtnNext BtnPrev BtnLast Customer.CustNum Customer.Name
    Customer.Address Customer.City Customer.State OrderBrowse dTotalPrice
    dTotalExt dAvgDisc cWorstWH cBestWH
  WITH FRAME CustQuery IN WINDOW CustWin.

The AppBuilder also keeps the list of displayed and enabled objects in preprocessor values:

&Scoped-define FIELDS-IN-QUERY-CustQuery Customer.CustNum Customer.Name ~
Customer.Address Customer.City Customer.State
&Scoped-define ENABLED-FIELDS-IN-QUERY-CustQuery Customer.CustNum ~
Customer.Name Customer.Address Customer.City Customer.State

Other property sheet settings for attributes that you cannot set as part of the object definition are set in a series of ASSIGN statements the AppBuilder generates, such as these for the READ-ONLY, PRIVATE-DATA, SELECTABLE, MOVABLE, and RESIZABLE attributes in this example:

ASSIGN
  BtnFirst:PRIVATE-DATA IN FRAME CustQuery =
    "Private data for the first button.".
ASSIGN
  cBestWH:READ-ONLY IN FRAME CustQuery = TRUE.
ASSIGN
  cWorstWH:SELECTABLE IN FRAME CustQuery = TRUE
  cWorstWH:MOVABLE IN FRAME CustQuery = TRUE
  cWorstWH:READ-ONLY IN FRAME CustQuery = TRUE
  cWorstWH:RESIZABLE IN FRAME CustQuery = TRUE.

As you develop your own applications, you need to keep in mind which attributes you can define in a DEFINE statement, which in a frame definition, and which only in executable statements at run time.