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 IBM 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
