EDSPFLD_METHOD

Perform user field display

WSupported on Windows
USupported on Unix
VSupported on OpenVMS
NSupported in Synergy .NET
subroutine EDSPFLD_METHOD
   a_input      ,a
   a_type       ,a
   a_text       ,a
   a_window     ,n
   a_fldnum     ,n
   a_dest       ,a
   a_attr       ,n
   a_color      ,n
   a_inpinfo    ,a

a_input

The contents of the input field. (a)

a_type

The user_type string specified in the .FIELD USER qualifier. (a)

a_text

(optional) The user_text string specified in the .FIELD USER qualifier. (a)

a_window

The ID of the input window being processed. (n)

a_fldnum

Contains the internal field number of the current display field. (n)

a_dest

(optional) The data area in which to store the displayed data. If it is present, EDSPFLD_METHOD must load a_dest in storage format. (a)

a_attr

The attribute to apply to the display. (n)

a_color

The color to apply to the display. (n)

a_inpinfo

The structure of input information. (a)

EDSPFLD_METHOD is a subroutine that you write and name. The name of your subroutine is registered with UI Toolkit using the E_METHOD subroutine.

Note

We recommend using an input field display method (%IDISPLAY_METHOD) instead of EDSPFLD_METHOD. Unlike EDSPFLD_METHOD, your %IDISPLAY_METHOD adds to Toolkit functionality rather than replaces it. %IDISPLAY_METHOD also provides access to the structure defined in inpinf.def and to the 20 optional arguments passed to I_INPUT and L_INPUT. See %IDISPLAY_METHOD for more information.

EDSPFLD_METHOD cannot populate a field that has a view length that’s shorter than the display length.

The UI Toolkit input subroutine calls your EDSPFLD_METHOD subroutine to display the contents of the current input field. It is also called after the ECHKFLD_METHOD subroutine validates the user-defined input to display the validated data in the specified format. It is only called if the field definition uses the user_type argument in the .FIELD USER qualifier.

You will never call EDSPFLD_METHOD directly; it is called only by UI Toolkit.

The inpinf.def file defines a_inpinfo. See IARRIVE_METHOD for information.

S/DE Repository enables you to specify a subtype (or class) for user-defined fields. The default subtype is alpha, but you can also specify numeric or date. To access this subtype within the Toolkit user-defined processing routines, use the window ID and field number contained within the inputinfo structure (the a_inpinfo argument). Pass these two values to the I_FLDINF subroutine to retrieve the gs_inpfld structure (the controls argument) which contains the gs_class (user subtype) value. For user-defined alpha fields; gs_class = 0; for user-defined numeric fields, gs_class = 1; for user-defined date fields, gs_class = 2.

To display the user-defined input in a special format, you must call the Synergy DBL subroutine W_FLDS. The subroutine call can look like this:

xcall w_flds(a_window, WF_PUT, a_fldnum, display_text, WF_ATTR, a_fldnum, a_attr, WF_COLOR, a_fldnum, a_color)

where display_text is the specially formatted input to display in the input field.

EDSPFLD_METHOD works in conjunction with the ECHKFLD_METHOD and EEDTDSP_METHOD subroutines. The following steps occur for a user-defined field:

1. When your program calls I_DISPLAY or I_DSPFLD, UI Toolkit also calls EDSPFLD_METHOD and passes it the field’s data in the format it was stored. EDSPFLD_METHOD displays the data in the field with the formatting you have specified in the EDSPFLD_METHOD subroutine.

For example, if you have written EDSPFLD_METHOD so that it formats all case “A” numbers with a dollar sign and a decimal point, it will display $350.00 when passed the stored data “350A.”

2. When the user selects the field for editing, UI Toolkit calls EEDTDSP_METHOD and passes it the data in storage format. The supplied EEDTDSP_METHOD displays the editable data in the stored format. If you want the editable data to display differently, you must write your own version of EEDTDSP_METHOD.

For example, once the user has selected the “350A” data for editing, your EEDTDSP_METHOD might re-display the data as “350.” If you used the supplied version of EEDTDSP_METHOD, the editable data would display as “350A.”

3. After the user edits the data, UI Toolkit calls ECHKFLD_METHOD to validate the new data, determining if it meets all of your specified criteria. If ECHKFLD_METHOD validates the data, EDSPFLD_METHOD is called again to display the new data including the proper formatting.

If the user has changed “350” to “150,” ECHKFLD_METHOD is called and checks to make sure “150” is an acceptable entry for that field. If it is, EDSPFLD_METHOD displays “$150.00” in the field.

The following example shows how you can use ECHKFLD_METHOD and EDSPFLD_METHOD to handle user-defined field types. See the ECHKFLD_METHOD Discussion for a sample window script that corresponds with this example.

Note

See the ECHKFLD_METHOD Examples for an example that uses ECHKFLD_METHOD, EDSPFLD_METHOD, and EEDTSP_METHOD to validate and display a ZIP Code.

; Description:  Routines for handling user-defined field types
;
; Reprinted by permission of BancTec, Inc.
;
; Routines:
;      ECHKFLD_METHOD - Validation of user-defined types
;      EDSPFLD_METHOD - Display and storage of user-defined types
;
subroutine ECHKFLD_METHOD
; Description: Validate user-defined data types
; Arguments:
;      a_input      ,a     ;Text as input
      a_type       ,a     ;User-defined data type
      a_text       ,a     ;User text for field
      a_status     ,n     ;Returned status
      a_inpinfo    ,a     ;Input information
.include "WND:tools.def"
.align
record
       sts          ,i4   ;Decoding status
       yr           ,i4
       mo           ,i4
       da           ,i4
proc
  case a_type of
    begincase
      "MDYDATE ":call mdydate
    endcase
  else
    begin
      xcall u_message("Unrecognized user type "+a_type)
    end
  xreturn
;
; Description: Handle MM/DD/YY date format
;
mdydate,
  xcall u_dcddat(sts, a_input, 3,, yr, mo, da)
  if (sts) then
    a_status = D_DATERR
  else
    begin
      clear a_status
      a_input = %string(mo, "XX")+%string(da, "XX")+%string(yr,"XX")
    end
  return
endsubroutine
subroutine EDSPFLD_METHOD
;
; Description:  Handle display and storage of user-defined data types 
;
; Arguments:
  a_input       ,a      ;Contents of field
  a_type        ,a      ;User-defined type
  a_text        ,a      ;User text
  a_window      ,n      ;Input window ID
  a_fldnm       ,n      ;Display field number
  a_dest        ,a      ;Destination (optional)
  a_attr        ,n      ;Display attribute
  a_color       ,n      ;Display color
  a_inpinfo     ,a      ;Input information
;
.include "WND:tools.def"
.include "WND:windows.def"
;
record
  group yymmdd          ,d
        yy              ,d2
        mm              ,d2
        dd              ,d2
  endgroup
  buf           ,a8
;
proc
  case a_type of
   begincase
    "MDYDATE ":call mdydate
   endcase
  else
    begin
      xcall u_message("Unrecognized user type "+a_type)
    end
  xreturn
;
; Description: Display and store MM/DD/YY dates
;
mdydate,
  yy = a_input(5:2)
  mm = a_input(1:2)
  dd = a_input(3:2)
  xcall u_fmtdat(3, buf, yy, mm, dd)
  xcall w_flds(a_window, WF_PUT, a_fldnm, buf, WF_ATTR, 
&       a_fldnm, a_attr, WF_COLOR, a_fldnm, a_color)
  if (^passed(a_dest))
    a_dest(1:6) = a_input    ; To avoid clobbering following fields. Defined as d8, but stored as d6.
  return
endsubroutine