Example 1: Show Employee Details.

RAMP-NL

Example 1: Show Employee Details.


This example will navigate to the Browse and Maintain Employees screen which is part of the Personnel System.

To reach this screen, RAMP scripts will execute the following steps:

·         Sign on

·         Type lansa run pslsys partition(dem) in the command line and press Enter.

·         Type 3 in the option field and press Enter.

·         Type the employee number of the currently selected employee and press Enter.

·         Press F21.

Function Options(*DIRECT)

Begin_Com Role(*EXTENDS #VF_AC010) Height(569) Layoutmanager(#MAIN_LAYOUT) Width(776)

* ================================================================================

* Simple Field and Group Definitions

* ================================================================================

Group_By Name(#XG_HEAD) Fields(#EMPNO #SURNAME #GIVENAME #ADDRESS1 #ADDRESS2 #ADDRESS3 #POSTCODE #PHONEHME #DEPTMENT #SECTION)

* Body and Button arrangement panels

Define_Com Class(#PRIM_PANL) Name(#BUTTON_PANEL) Displayposition(3) Height(569) Hint(*MTXTDF_DET1) Layoutmanager(#BUTTON_FLOW) Left(688) Parent(#COM_OWNER) Tabposition(3) Tabstop(False) Top(0) Width(88)

Define_Com Class(#PRIM_PANL) Name(#BODY_HEAD) Displayposition(2) Height(569) Hint(*MTXTDF_DET1) Layoutmanager(#BODY_HEAD_FLOW) Left(0) Parent(#COM_OWNER) Tabposition(2) Tabstop(False) Top(0) Verticalscroll(True) Width(688)

* Attachment and flow layout managers

Define_Com Class(#PRIM_ATLM) Name(#MAIN_LAYOUT)

Define_Com Class(#PRIM_FWLM) Name(#BUTTON_FLOW) Direction(TopToBottom) Flowoperation(Center) Marginbottom(4) Marginleft(4) Marginright(4) Margintop(4) Spacing(4) Spacingitems(4)

Define_Com Class(#PRIM_FWLM) Name(#BODY_HEAD_FLOW) Direction(TopToBottom) Marginbottom(4) Marginleft(4) Marginright(4) Margintop(4) Spacing(4) Spacingitems(4)

Define_Com Class(#PRIM_FWLI) Name(#FWLI_EMPNO) Manage(#EMPNO) Parent(#BODY_HEAD_FLOW)

Define_Com Class(#PRIM_FWLI) Name(#FWLI_SURNAME) Manage(#SURNAME) Parent(#BODY_HEAD_FLOW)

Define_Com Class(#PRIM_FWLI) Name(#FWLI_GIVENAME) Manage(#GIVENAME) Parent(#BODY_HEAD_FLOW)

Define_Com Class(#PRIM_FWLI) Name(#FWLI_ADDRESS1) Manage(#ADDRESS1) Parent(#BODY_HEAD_FLOW)

Define_Com Class(#PRIM_FWLI) Name(#FWLI_ADDRESS2) Manage(#ADDRESS2) Parent(#BODY_HEAD_FLOW)

Define_Com Class(#PRIM_FWLI) Name(#FWLI_ADDRESS3) Manage(#ADDRESS3) Parent(#BODY_HEAD_FLOW)

Define_Com Class(#PRIM_FWLI) Name(#FWLI_POSTCODE) Manage(#POSTCODE) Parent(#BODY_HEAD_FLOW)

Define_Com Class(#PRIM_FWLI) Name(#FWLI_PHONEHME) Manage(#PHONEHME) Parent(#BODY_HEAD_FLOW)

Define_Com Class(#PRIM_FWLI) Name(#FWLI_SAVE_BUTTON) Manage(#SAVE_BUTTON) Parent(#BUTTON_FLOW)

* The save button

Define_Com Class(#PRIM_PHBN) Name(#SAVE_BUTTON) Caption(*MTXTDF_SAVE) Displayposition(1) Left(4) Parent(#BUTTON_PANEL) Tabposition(1) Top(4)

* Collection for detail fields

Define_Com Class(#Prim_ACol<#prim_evef>) Name(#PanelFields)

* Fields in the head area

Define_Com Class(#EMPNO.Visual) Displayposition(1) Height(19) Hint(*MTXTDF_DET1) Left(4) Parent(#BODY_HEAD) Tabposition(1) Top(4) Usepicklist(False) Width(209)

Define_Com Class(#SURNAME.Visual) Displayposition(2) Height(19) Hint(*MTXTDF_DET1) Left(4) Parent(#BODY_HEAD) Tabposition(2) Top(27) Usepicklist(False) Width(324)

Define_Com Class(#GIVENAME.Visual) Displayposition(3) Height(19) Hint(*MTXTDF_DET1) Left(4) Parent(#BODY_HEAD) Tabposition(3) Top(50) Usepicklist(False) Width(324)

Define_Com Class(#ADDRESS1.Visual) Displayposition(4) Height(19) Hint(*MTXTDF_DET1) Left(4) Parent(#BODY_HEAD) Tabposition(4) Top(73) Usepicklist(False) Width(363)

Define_Com Class(#ADDRESS2.Visual) Displayposition(5) Height(19) Hint(*MTXTDF_DET1) Left(4) Parent(#BODY_HEAD) Tabposition(5) Top(96) Usepicklist(False) Width(363)

Define_Com Class(#ADDRESS3.Visual) Displayposition(6) Height(19) Hint(*MTXTDF_DET1) Left(4) Parent(#BODY_HEAD) Tabposition(6) Top(119) Usepicklist(False) Width(363)

Define_Com Class(#POSTCODE.Visual) Displayposition(7) Height(19) Hint(*MTXTDF_DET1) Left(4) Parent(#BODY_HEAD) Tabposition(7) Top(142) Usepicklist(False) Width(216)

Define_Com Class(#PHONEHME.Visual) Displayposition(8) Height(19) Hint(*MTXTDF_DET1) Left(4) Parent(#BODY_HEAD) Tabposition(8) Top(165) Usepicklist(False) Width(286)

Define_Com Class(#PRIM_ATLM) Name(#ATLM_1)

Define_Com Class(#PRIM_ATLI) Name(#ATLI_1) Attachment(Center) Parent(#ATLM_1)

Define_Com Class(#PRIM_ATLI) Name(#ATLI_2) Attachment(Center) Manage(#BODY_HEAD) Parent(#MAIN_LAYOUT)

Define_Com Class(#PRIM_ATLI) Name(#ATLI_3) Attachment(Right) Manage(#BUTTON_PANEL) Parent(#MAIN_LAYOUT)

Define_Com Class(#vf_sy122) Name(#myscreen_wrapper) Height(569) Parent(#COM_OWNER) Visible(False) Width(688)

Define_Com Class(#PRIM_ATLI) Name(#ATLI_4) Attachment(Center) Parent(#MAIN_LAYOUT)

Define_Com Class(#PRIM_ATLI) Name(#ATLI_6) Attachment(Center) Manage(#myscreen_wrapper) Parent(#MAIN_LAYOUT)

* --------------------------------------------------------------------------------

* Handle Initialization

* --------------------------------------------------------------------------------

Mthroutine Name(uInitialize) Options(*REDEFINE)

Define_Com Class(#Prim_evef) Name(#FormField) Reference(*dynamic)

Invoke Method(#Com_Ancestor.uInitialize)

For Each(#Control) In(#Body_Head.ComponentControls)

If_Ref Com(#Control) Is(*INSTANCE_OF #prim_evef)

Set_Ref Com(#FormField) To(*dynamic #Control)

Invoke Method(#PanelFields.Insert) Item(#FormField)

Endif

Endfor

* Set the uCommand wrapper property.

Set Com(#myscreen_wrapper) Ucommand(#com_owner)

Endroutine

* --------------------------------------------------------------------------------

* Handle Command Execution

* --------------------------------------------------------------------------------

Mthroutine Name(uExecute) Options(*REDEFINE)

Invoke Method(#Com_Ancestor.uExecute)

* The user has selected an Employee from the instance list. MakeRampAvailable will make sure the connection is in order and then signal back with the appropiate action

Invoke Method(#myscreen_wrapper.MakeRampAvailable) Foraction(ShowDetails)

Set Com(#Save_Button) Enabled(False)

Endroutine

* ================================================================================

* Event Handlers

* ================================================================================

* RAMP has signalled it's available. What we do will depend on the #ForAction specified in the MakeRampAvailable method invocation.

Evtroutine Handling(#myscreen_wrapper.RampAvailable) Foraction(#ForAction) Nextaction(#NextAction)

Case (#ForAction)

When Value_Is('= ShowDetails')

* Navigate to a Destination that was previously named EmployeeDetailsAndSkills using newlook Designer. Use the ReturnScreen parameter to verify we are in the expected screen

* once the navigation has completed

Invoke Method(#myscreen_wrapper.navigatetoscreen) Name('EmployeeDetailsAndSkills') Returnscreen(#vf_eltxtl)

* If the current screen is the expected one, get the values of the 5250 screen fields into the fields in this component

If (#vf_eltxtl = 'EmployeeDetailsAndSkills')

Invoke Method(#avListManager.GetCurrentInstance) Akey3(#EMPNO)

#myscreen_wrapper.getvalue From('uSurname') Value(#surname.value)

#myscreen_wrapper.getvalue From('uGivename') Value(#givename.value)

#myscreen_wrapper.getvalue From('uAddress1') Value(#address1.value)

#myscreen_wrapper.getvalue From('uAddress2') Value(#address2.value)

#myscreen_wrapper.getvalue From('uAddress3') Value(#address3.value)

#myscreen_wrapper.getvalue From('uHomePhone') Value(#phonehme.value)

#myscreen_wrapper.getvalue From('uPostcode') Value(#POSTCODE.value)

Endif

When Value_Is('= UpdateDetails')

* Set the values of the fields in the newlook form with the ones from this component

#myscreen_wrapper.setvalue Infield('uSurname') Value(#surname.value)

#myscreen_wrapper.setvalue Infield('uGivename') Value(#givename.value)

#myscreen_wrapper.setvalue Infield('uAddress1') Value(#address1.value)

#myscreen_wrapper.setvalue Infield('uAddress2') Value(#address2.value)

#myscreen_wrapper.setvalue Infield('uAddress3') Value(#address3.value)

#myscreen_wrapper.setvalue Infield('uHomePhone') Value(#phonehme.value)

#myscreen_wrapper.setvalue Infield('uPostcode') Value(#POSTCODE.value)

* Send the enter key to update the details in the 5250

#myscreen_wrapper.sendkey Key(#myscreen_wrapper.KeyEnter) Returnscreen(#vf_eltxtl)

Otherwise

Use Builtin(message_box_show) With_Args(ok ok info *component ('Unknown ForAction>>' + #ForAction.Value + '<<'))

Endcase

Set Com(#myscreen_wrapper) Visible(False)

Endroutine

* Listen to messages from RAMP and the 5250 application

Evtroutine Handling(#myscreen_wrapper.RampMessage) Umessagetype(#MsgType) Umessagetext(#MsgText)

Case (#msgtype.value)

When Value_Is('= VF_ERROR')

* Fatal messages reported by Ramp (e.g. Navigation request failed, etc). If in design mode, show the underlying newlook screen. Otherwise, make the error message

* appear in a message box on top of the command

If (#usystem.iDesignMode = true)

Set Com(#myscreen_wrapper) Visible(True)

Else

Message Msgid(dcm9899) Msgf(dc@m01) Msgdta(#msgtext.value)

#com_owner.avshowmessages

Endif

* Messages sent by the System i application or unknown form was encountered

When Value_Is('= VF_INFO' '= VF_UNKNOWN_FORM')

Message Msgid(dcm9899) Msgf(dc@m01) Msgdta(#msgtext.value)

* Failure to initialize RAMP. Could occur for mainly one of two reasons

When Value_Is('= VF_INIT_ERROR')

Message Msgid(dcm9899) Msgf(dc@m01) Msgdta(#msgtext.value)

#com_owner.avshowmessages

When Value_Is('= VF_WAITCONNECTION')

Otherwise

Use Builtin(message_box_show) With_Args(ok ok info *Component ('Unknown message type ' + #MsgType + 'encountered'))

Endcase

Endroutine

* --------------------------------------------------------------------------------

* Handle changes in any of the fields on the panel

* --------------------------------------------------------------------------------

Evtroutine Handling(#PanelFields<>.Changed)

* Enable the save button

Set Com(#SAVE_BUTTON) Enabled(True)

* Lock the framework and set a message for the user

Use Builtin(bconcat) With_Args('Changes made to employee' #GiveName #Surname 'have not been saved yet.' 'Do you want to save them before continuing?') To_Get(#sysvar$av)

Set Com(#avFrameworkManager) Ulocked(USER) Ulockedmessage(#sysvar$av)

Endroutine

* --------------------------------------------------------------------------------

* Enter key pressed

* --------------------------------------------------------------------------------

Evtroutine Handling(#PanelFields<>.KeyPress) Options(*NOCLEARMESSAGES *NOCLEARERRORS) Keycode(#KeyCode)

If Cond('#KeyCode.Value = Enter')

* If there no changes have been made issue message and ignore enter

If Cond('#SAVE_BUTTON.Enabled *EQ True')

Invoke Method(#Com_Owner.Save)

Else

* Issue 'There are no changes to save' message

Use Builtin(Message_box_show) With_Args(ok ok Info *Component *MTXTDF_NO_SAVE)

Endif

Endif

Endroutine

* --------------------------------------------------------------------------------

* Handle the save button

* --------------------------------------------------------------------------------

Evtroutine Handling(#SAVE_BUTTON.Click)

* Call the Save method

Invoke Method(#Com_Owner.Save)

Endroutine

* --------------------------------------------------------------------------------

* Handle Save

* --------------------------------------------------------------------------------

Mthroutine Name(Save)

* Update data base

Invoke Method(#myscreen_wrapper.MakeRampAvailable) Foraction(UpdateDetails)

Endroutine

* --------------------------------------------------------------------------------

* Handle Termination

* --------------------------------------------------------------------------------

Mthroutine Name(uTerminate) Options(*REDEFINE)

* Clean up the colelction of fields on the panel

Invoke Method(#PanelFields.RemoveAll)

* Do any termination defined in the ancestor

Invoke Method(#Com_Ancestor.uTerminate)

Endroutine

End_Com