Display / Input Arrays

In this lesson we are going to create a Display and an Input Array.

First of all we create a new file like “array.per” with the new screen form: DATABASE FORMONLY

LAYOUT

VBOX TABLE {

[id | name | age ] [id | name | age ] [id | name | age ] [id | name | age ] [id | name | age ] } END END

ATTRIBUTES

id = FORMONLY.id, TEXT=”Id”; name = FORMONLY.name, TEXT=”Name”; age = FORMONLY.age, TEXT=”Age”;

INSTRUCTIONS DELIMITERS “||”

SCREEN RECORD s_arr5 With “VBOX” we create a vertical align table to display our ARRAY vertically. The screen record is needed to declare how many rows your array has and from which column to the next column it has go. [5] is the rows of our ARRAY.

Compile it with “fcompile -xml array.per”

Then we create our window. Create a new file such as “array.4gl”. MAIN DEFINE string STRING

CLOSE WINDOW screen CALL ui.Interface.loadActionDefaults(”default”) CALL ui.Interface.LoadStyles(”default”)

OPEN WINDOW array WITH FORM “m_array” CALL ui.Interface.setText(”Display Array”)

MENU “Navigation” COMMAND “Ok” CALL dialog(string) COMMAND “Search” CALL displ_arr() RETURNING string COMMAND “Insert” CALL insert_arr() COMMAND “Exit” EXIT MENU END MENU END MAIN

FUNCTION insert_arr() DEFINE sc_arr ARRAY[500] OF RECORD id INTEGER, name CHAR(255), age INTEGER END RECORD

INPUT ARRAY sc_arr FROM s_arr.* BEFORE INPUT MESSAGE “BEFORE INPUT. Please fill the form fields.”

  BEFORE FIELD id
  AFTER FIELD id
     MESSAGE “Id have beed changed on row “||ARR_CURR()||”.”

  BEFORE FIELD name
  AFTER FIELD name
     MESSAGE “Name has been changed on row “||ARR_CURR()||”.”

  BEFORE FIELD age
  AFTER FIELD age
     MESSAGE “Age has been changed on row “||ARR_CURR()||”.”

  AFTER ROW

  ON KEY (F5)
     MESSAGE “This is the ON KEY action”

  AFTER INPUT
     MESSAGE “End of the ARRAY INPUT”
  END INPUT

END FUNCTION

FUNCTION displ_arr() DEFINE sc_arr ARRAY[500] OF RECORD id INTEGER, name CHAR(255), age INTEGER END RECORD DEFINE string STRING

LET sc_arr[1].id = “1″ LET sc_arr[1].name = “Max” LET sc_arr[1].age = “32″

LET sc_arr[2].id = “2″ LET sc_arr[2].name = “Mustermann” LET sc_arr[2].age = “12″

LET sc_arr[3].id = “3″ LET sc_arr[3].name = “Jorden” LET sc_arr[3].age = “34″

LET sc_arr[4].id = “4″ LET sc_arr[4].name = “Andre” LET sc_arr[4].age = “56″

LET sc_arr[5].id = “5″ LET sc_arr[5].name = “Mike” LET sc_arr[5].age = “82″

CALL SET_COUNT(5) DISPLAY ARRAY sc_arr TO s_arr.*

BEFORE ROW MESSAGE “Please select a row” AFTER ROW

ON KEY (F3) MESSAGE “You have selected row number: “||ARR_CURR()||”.”

AFTER DISPLAY MESSAGE “Your last row was: “||ARR_CURR()||”.”

END DISPLAY LET string = “You have selected the line: “, sc_arr[ARR_CURR()].id CLIPPED, “\nand name: “, sc_arr[ARR_CURR()].name CLIPPED RETURN string END FUNCTION

FUNCTION dialog(string) DEFINE string STRING IF string IS NULL THEN LET string = “You have nothing selected” END IF

MENU “title” ATTRIBUTE (STYLE=”dialog”, COMMENT = string CLIPPED) COMMAND “Ok” EXIT MENU END MENU

END FUNCTION Compile this example with “4glpc array.4gl -o array.4ae”.

We must define how many rows we want to display in our DISPLAY ARRAY by using SET_COUNT(). In our function “displ_arr()” we create the program array and fill them with content e.g 5 rows and 3 columns. And then we send it to the screen array from the program array with “DISPLAY ARRAY program array TO screen array”.

With the function insert_arr() we have made your screen array editable.