Calling IBM i programs from EGL using Rational Business Developer
by user
Comments
Transcript
Calling IBM i programs from EGL using Rational Business Developer
Calling IBM i programs from EGL, Page 1 of 63 Calling IBM i programs from EGL using Rational Business Developer By Claus Weiss Advisory Software Consultant IBM Corporation May 2009 Skill Level: Intermediate Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 2 of 63 Contents About this tutorial .......................................................................................................................... 3 Section 1. Before you start............................................................................................................. 3 Introduction.................................................................................................................................... 4 Calling an IBM i program from EGL ............................................................................................ 6 IBM i RPG Program .................................................................................................................. 6 Starting the RDI SOA workbench ............................................................................................. 6 Selecting the web perspective.................................................................................................... 8 Create a new EGL Dynamic Web Project ................................................................................. 9 Creating the linkage options for the program call ................................................................... 12 Specify linkage values ......................................................................................................... 19 Adding linkage to build file ................................................................................................. 20 Create the Program interface information using the EGL Services wizard............................. 24 Creating a web page to provide a user interface for the application........................................ 33 Create EGL Code to call the RPG Program............................................................................. 36 Create fields and button on the Web Page ............................................................................... 41 Handling record not found ....................................................................................................... 51 Debugging the RPG program................................................................................................... 52 Visit the EGL Café to get more information, join the community. ............................................. 58 Additional comments ............................................................................................................... 58 Resources ..................................................................................................................................... 60 About the authors......................................................................................................................... 60 Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 3 of 63 About this tutorial This tutorial describes how to write Enterprise Generation Language (EGL) code that calls programs (RPG, COBOL, CL, CL Commands, or programs written in any supported language) on your IBM® i machine. The process for you to call an existing IBM i™ program from EGL has been very much improved in IBM® Rational® Developer for i™ V7.1 and is even easier in 7.5 with the new EGL services wizard in RSE. EGL leverages the IBM i Toolbox for Java™, which in turn utilizes the IBM i’s Remote Command Host Server (QZRCSRVSD in the QSYSWRK subsystem). Section 1. Before you start Important Note: Walk through this scenario and others online as part of the Enterprise Modernization Sandbox for IBM i. You can also print the scenario from the pdf files on the right. About this tutorial: This tutorial shows you how to do the following: • Create EGL application that calls IBM i programs (RPG, COBOL, CL and CL Commands). • Learn to use IBM® Rational® Business Developer to build and test EGL application. Objectives: This tutorial will guide you through the following steps: • EGL and the IBM i runtime environment. • Configuring your EGL Web Project to access the IBM® i server and call a program • The actual code to call an IBM i program • Debugging both RPG and EGL code Prerequisites: You should be familiar with one of the IBM® Rational® Software Delivery Platform products that Rational Business Developer supports, and have knowledge of IBM® i applications. System requirements: Operating Systems: Microsoft® Windows® 2000 SP4, Windows 2003 Enterprise SP1, Windows 2003 Standard SP1, Windows XP Professional SP2, Windows Vista Business, Windows Vista Enterprise, Windows Vista Ultimate Hardware: Intel® Pentium® III 800 MHz processor minimum (higher is recommended) 1 GB RAM (1.5 GB RAM recommended) Minimum: 800 MB of disk space is required for product package installation. Additional disk space is required for the resources that you develop. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 4 of 63 Introduction This tutorial describes how to write Enterprise Generation Language (EGL) code that calls programs (RPG, COBOL, CL, CL Commands, or programs written in any supported language) on your IBM i machine. Calling an existing IBM i program from EGL has been very much improved in V 7.1 and is even easier in 7.5 with the new EGL services wizard in RSE. EGL leverages the IBM i Toolbox for Java™ which in turn utilizes the IBM i’s Remote Command Host Server (QZRCSRVSD in the QSYSWRK subsystem). In this tutorial we will guide you thru the following steps: • • • • EGL and the IBM i OS runtime environment. Configuring your EGL Web Project to access the IBM i OS server and call a program The actual code to call an IBM i program Debugging both RPG and EGL code. Note: The pictures in these labs show a similar application being built. Some of the names and icons may be different than the environment you are working with. Assume that i5/OS and IBM i are interchangeable. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 5 of 63 EGL and the IBM i – Calling IBM i Programs Calling a RPG, COBOL, CL, or other program on IBM i from EGL is as simple as coding: CALL “myProgram” (parm1, parmN) The facility is however extremely flexible and supports the many options that may be required to support many possible options and configurations In this scenario an EGL developer is working on RDI SOA on their workstation and running an EGL application under the WebSphere Test Environment. EGL uses the IBM i Toolbox for Java™ to call programs on the IBM i. The toolbox in turn uses the IBM i Remote Command server that is a part of the IBM i Host Servers. The following steps might sound a bit intimidating but don’t worry everything just happens automatically and you don’t really need to do anything to make this happen: • The Remote Command server in IBM i consists of a server daemon program that listens for TCP/IP requests from “clients”. This program is QZRCSRVSD which runs in the QSYSWRK sub-system. • When the Remote Command Server starts, it starts a number of “worker” jobs that process requests in the QUSRSYS sub-system. These jobs are all named QZRCSRVS. • The workstation will utilize the Java Toolbox to establish a connection with the Remote Command server on the IBM i (QZRCSRVSD). • The remote command server daemon (QZRCSRVSD) will locate an available work job (QZRCSRVS in the QUSRWRK sub-system). • The user is authenticated. The SWAP ID API will be issued to switch the QZRCSRVS job from QUSERS to the ID passed in by EGL. Finally the user program will be called. Return parameters will be returned up the path back to the invoking EGL program. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 6 of 63 Calling an IBM i program from EGL In this section we will walk through the steps involved in creating an EGL web project and create a simple JSF based Web Page that calls an RPG program on IBM i OS. IBM i RPG Program The RPG program you are going to call is named GETDATAE. It is a program with one input parameter of type character that will return two parameters. One of the parameters is a data structure that is externally defined which contains detail customer data, the other is a character field that contains feedback data. Here is the RPG Source: FCUSTOML3 IF E K Disk * *Input parameter from Web page DCustnoi s like(CUSTNO) * Data structure to specify output structure to return to caller D CSTRUC E DS extname(customl3:custom01) D feedback s 20 c *entry plist c parm custnoi c parm cstruc c parm feedback c eval feedback=*blank * c custnoi chain(E) customl3 c if not %found(CUSTOML3) c eval feedback= CUSTNOI c else c eval feedback='0' c endif * c return Figure 1: GETDATAE RPG Program As you can see this program when called is passed three variables “custnoi, cstruc, and feedback”. It gets a customer record, the data is stored in cstruc and stores the feedback for the data access in variable feedback. Variable feedback contains a 0 if the record was found or the customer number that could not be found if the access wasn’t successful. Starting the RDI SOA workbench You need to start the RDI SOA workbench and select a workspace that will contain all the files you will use in your development project. We suggest you use a new workspace so your environment fits the environment we used when we created this script and the screen captures. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 7 of 63 Start RDI SOA V 7.1 • Click StartÆ All programs Æ IBM Software Development Platform Æ IBM Rational Business Developer for System i Æ IBM Rational Business Developer for System i When prompted for a workspace name • Enter a new name, like in the figure above, so you get a brand new workspace Tip: Don’t worry about the directory path, accept the default, just specify a unique directory for the workspace. • Click OK The workbench will show: Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 8 of 63 • Click the x on the Welcome tab to remove the Welcome page. Selecting the web perspective In the workbench • Click the Open perspective button on the top right of the workbench • Select Other… from the context menu From the Open Perspective list Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 9 of 63 • • Select Web Click the OK button Create a new EGL Dynamic Web Project. The project in this example is called eglcallweb In the workbench • Click the New button • Select the Project… action From the New Project list Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 10 of 63 • • • Expand the EGL node Select EGL project Click the Next> button On the New EGL project wizard page Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 11 of 63 • • • Enter the project name eglcallweb Select Web Project Click the Next button On the New EGL project page: Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 12 of 63 • • • Make sure WebSphere Application Server V6.1 or 7.0 is selected as target runtime Select radio button Create a new build descriptor Click the Finish button Creating the linkage options for the program call Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 13 of 63 • • Expand the project eglcallweb Expand EGLSource. Locate the EGL Build descriptor file. The name of this file by default is the project name with the extension .eglbld. In this example it is eglcallweb.eglbld. • Double click the build descriptor file to open it. The default build descriptor editor opens. The linkage options are part of the build descriptor file but are handled by a different wizard. The linkage options describe where remote objects (in our case the program on IBM i) reside and what interfaces should be used to access them. Now you will create the linkage option for the program call Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 14 of 63 Locate the Outline view in your workspace. It should be on the upper right side of the Project Navigator. If it does not show up, • Click the Outline tab to select it. • • Right click on the eglcallweb.eglbld node in the tree to display the context menu Select a Add Part. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 15 of 63 • • Select Linkage Options from this dialog Click Next >. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 16 of 63 On the dialog page displayed in the figure above • Type the name of the linkage option. callsysipgms Once this one time set up for your project is done you can now use this to create linkages to any program on IBM i or other systems. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 17 of 63 When the dialog opens • Click on the Add button • . Click inside the Program Name field and type the name of the program you wish to call on IBM i. In this case it is GETDATAE Note: You may add as many programs as you need to this list. EGL programs in the project may call any number of programs on your IBM i system or other machines. • • • Then click in the field labeled Type. Click the downward pointing arrow Select remoteCall from the list of choices. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 18 of 63 • Click anywhere in the dialog and press Enter to make sure the change applies. You will see the program name GETDATAE and remoteCall appear in the right hand list of linkage options Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 19 of 63 Specify linkage values Click in the following fields and provide the following properties exactly as listed below: Property pgmName type conversionTable Value GETDATAE remoteCall CSOE037 library EGLLABv7xx location iseriesd.demos.ibm.com remoteBind GENERATION Comment should appear – as default should appear – as default CS letter O (Oh) E zero 37 See note below. Name of the i5/OS library where the program resides on the IBM i system, or nothing for libl. This is the TCP/IP name of your machine or the IP address.You can use the IBM demo server: iseriesd.demos.ibm.com Select from drop down list. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 20 of 63 remoteComType remotePgmType JAVA400 STATELESS Select from drop down list Select from drop down list Note: EGL handles conversions from ASCII or UNICODE to EBIDIC in the IBM i OS.. The converstionTable property specifies the code page and language to use for conversions. The first four characters of the conversion table are always “CSOE” (letter oh, not zero). The last three digits are the three digit code for your national language. The code 037 is US English. After completing the entry for these properties, • Save the Linkage options. Press CTRL + S to save the entries. • Select the tab eglcallwebWebBuildOptions to bring the Build Options editor window back into focus Adding linkage to build file In the Build options editor window Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 21 of 63 • • • Deselect the Show only specified options check box to show all options available for the Build Options file.. Find the linkage option Click on the (no Value set) entry field Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 22 of 63 • Click on the little arrow at the end of the field It will provide you with a list of all linkages available • Select callsysipgms Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 23 of 63 • • • Select the check box Show only specified options to reduce the number of options shown in the list Save by using CRTL+-S Click the X in the editor tab, to close the editor Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 24 of 63 Create the Program interface information using the EGL Services wizard In order to re-use the interface description of our RPG program we can use an EGL wizard that is provided to create an EGL service interface for accessing IBM i programs. We don’t want to create a Service in this lab but can still use the wizard to easily extract the required information from the program source and make our life easier. The wizard extracts descriptions of fields, records, or externally defined structures. We can use the RSE capabilities to point to RPG program source to get its call interface description and create EGL data description from it. You will use the Remote System Explorer (RSE) and its EGL service wizard. You need to switch to the RSE perspective: • • • Click the Open perspective button If the Remote System Explorer shows in the drop down list o Select Remote System Explorer from the list Otherwise o Select other… from the list o From the Open perspective dialog Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 25 of 63 o Select Remote System Explorer o Click the OK button You are now in the Remote System Explorer (RSE) perspective. You need to create a connection to the IBM i system that contains the Source member for the GETDATAE program you want to call to get its interface description. In your home environment you most likely already have an existing connection that can use. Let’s create the connection. In the Remote System View • Click the Define a connection to remote system button Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 26 of 63 In the New connection Dialog: • Select the IBM i node • Click the Next> button On the next page: Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 27 of 63 • Enter iseriesd.demos.ibm.com as the hostname. The connection name automatically changes to the value of the hostname, don’t change it unless you get an error message that this connection name already exists. If you get an error message change the connection name to a name that doesn’t exist. • Click the Finish button In the RSE view the new connection will show Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 28 of 63 • Expand the connection by clicking the + plus sign • Expand the Objects subsystem by clicking the + plus sign • Expand Library list by clicking the + plus sign In the Enter password dialog: • Enter userid egl4rpg • Enter password egl4you • Check Save user ID • Check Save password • Click the OK button A job gets created on the IBM i system and you will see the library list for this job. You will see library EGLLABV7xx inside the library list, this library contains the program you will call as well as the source for this program. In the library list: • Expand the library EGLLABV7xx • Expand the source file QRPGLESRC You will use the EGL Services wizard to extract the RPG interface information. You can use this information for the EGL call to the program, you will not actually use the service Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 29 of 63 interface. You just use the wizard for the convenience of creating the parameters and record definitions in EGL. • Right click on member GETDATAE • Select action EGL Services Æ Create: ExternalType, Interface, and records In the New EGL Part dialog: • Select the Create Rest web services checkbox • Uncheck any of the other check boxes • Click the Next> button On the next wizard page: Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 30 of 63 • Click the Browse button for the source folder entry field To tell the wizard where to store the EGL call interface information you need to select a web project and a folder inside the project. In the Folder selection dialog : • Expand your eglcallweb project • Select the EGLSource folder • Click the OK button. Back on the wizard page specify a package name inside the EGLSource: • In the Package entry field specify: getdataeCall as the name for the package. If you had a procedure in a Service Program you could specify this information in this dialog as well. Since you are dealing with a program call no other entry is needed. • Click the Next> button The Add protocol dialog comes up: Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 31 of 63 No changes are needed since you will not use the generated service runtime, you are only interested in the interface. • Click the Finish button. On the next wizard page accept the defaults. • Click on the Next > button Same for the last page, accept the defaults. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 32 of 63 • Click the Finish button You are done with this wizard and can return to the Web perspective to complete the EGL coding. • • • On the upper right corner of the workbench look for the Web perspective button If it is not showing click on the >> button Click the Web perspective button Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 33 of 63 Creating a web page to provide a user interface for the application Now it is time to create the web UI. It provides the input and output fields for the data that is sent to the RPG program and received from the program. It also provides a button to invoke the EGL function that calls the GETDATAE RPG program. • • Right click on the WebContent directory. Select New Æ Web page in the context menu. In the New Web Page Dialog: Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 34 of 63 • Type a name for your JSP file. In this example we named the page CALLEGL001R.jsp. • Click Finish. The Page designer will open Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 35 of 63 • Make sure the Design view is active (tab at the bottom of the designer) • Type Customer Inquiry on the white space in the page designer, • Click the text that you just wrote, so it has focus • Click on the Properties tab at the bottom of the screen, • Adjust the appearance to Heading 2 • Save with CRTL+S. Now you write some EGL code in the page handler file Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 36 of 63 • • Right click anywhere on the white space in the web page Select Edit Page Code from the context menu that appears. Create EGL Code to call the RPG Program The source editor opens with the EGL Pagehandler file for this page. The pagehandler is a type of EGL program that controls interaction with a Java Server Faces web page. Each JSF web page is linked to its own pagehandler file. All code that deals with this page for displaying or retrieving data and setting page attributes needs to be added to this source file. You will now write the code in here to call the RPG program and receive the data from the RPG program to display it on this page. Next you check the RPG program interface definition that is stored in the getdataeCall package in the GETDATAE.egl file. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 37 of 63 In the Web perspective, in the Project explorer view • Expand the eglcallweb project • Expand EGLSource • Expand the getdataeCall package • Double click on the GETDATAE.egl file to open it in the source editor Remember, this is the file that got created with the EGL Service wizard from your RPG program, the variable names and data structure names are carried over from the RPG source.. The EGL function GETDATAE has 3 parameters defined CUSTNOI a char(7) variable CSTRUC a record that is defined in this source file FEEDBACK a char(20) variable To use these three parameters, you must define them. You define these variables and re-use the CSTRUC record immediately following the: viewRoot UIViewRoot: record declaration. Note: The UIViewRoot is an EGL special record variable that provides access to the various parts on the web page. It is in the CALLEGL001R.egl tab Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 38 of 63 The figure above illustrates what your code should look like after you have declared the three variables. You are using the following variables • cinput for the customer number that gets passed to the RPG program • Feedback to get feedback about success of fetching the record, a char(20) variable. • cds is a structure of type CSTRUC, (the basicrecord that got created previously by the EGL services wizard). Tip: Make use of content assist (CTRL+ Spacebar) to find the correct datatypes, as shown in the above figure This figure shows your variables Now you need to create a simple EGL function with a couple of statements to call your RPG program. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 39 of 63 • Write the function callRPG as shown in the figure above Here is a bit more information on the code you see in the pagehandler program: The above figure illustrates the completed pagehandler code required to call the RPG Program GETDATAE. As you can see the code is very intuitive and simple. In this program as in all EGL JavaServer Faces web programs, there are two functions automatically added when a new JSFhandler program gets created. 1. onConstruction() 2. and onPrerender(). These functions are invoked when the page is loaded. You will not use these functions in your program, since you have no upfront processing to do when loading your webpage. So you leave these functions empty. In the UI after a user enters data into the input field cinput, you will add a pushbutton that allows to invoke your callRPG() function. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 40 of 63 In callRPG you added two statements that write to Stdout to show in the WAS console that the call is initiated and that it has been finished, these statement are just there for informational purposes and can be removed in real code. Note: In function callRPG you use the syslib.RemoteUser(“userid”, “password”) EGL builtin function to set the user-id and password for the logged in user with constants. Normally you would write a routine that stores user information in a session variable or other persistent area of storage, instead of using constants in your code. This routine is simplified for illustration purposes. Please use the userid and password that fits your sever (For the IBM demo system use userid: EGL4RPG password: EGL4YOU Note that the Java Toolbox used to access your IBM i system requires that you authenticate prior to every call to IBM i OS ensuring security and integrity of the system. Finally we have a simple call statement: call “GETDATAE” (cinput, cds, feedback); In this statement you specify the program name that you had previously defined in the EGL Build File’s Linkage options and the parameters to pass. You can now create the web form to capture input from the user, call the RPG program, and display the result. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 41 of 63 Create fields and button on the Web Page Click the Page Data view tab in the lower left corner of the workbench to bring it into focus • Expand JSFHandler • Expand Data • Expand Actions Under the Data node, you see the three variables that you created in the pagehandler. Under the Actions node you see the callRPG() function you created. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 42 of 63 • • Select the cinput variable Drag and drop it on to the web design area below the page title. A dialog appears indicating that you are about to create a new control on the page. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 43 of 63 • • • Be sure that the “Updating an existing record” radio button is selected. This will default the control type to Input field. Click the label area and change the label to Enter customer number: Click the Options button. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 44 of 63 • Unselect both Submit and Delete buttons, you will create a call button in the next step • Click Ok, • Click Finish on the main dialog. Now you will add the button to invoke the callRPG function. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 45 of 63 • Make some space underneath the input field by positioning the cursor before the error message control and click the Enter key a couple of time To create a button that when clicked on, invokes your callRPG function, in the data view: • Select the callRPG function in page data view • Drag it underneath the input field in the page designer Now a push button gets created on the web page. This button is bound to the function in the page handler. One last step and you are ready to run your application. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 46 of 63 • Drag and drop the variable cds from the Page Data view on to the web page underneath the pushbutton. The Configure Data Controls dialog appears. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 47 of 63 • Check the Displaying an existing record(read only) radio button This changes the control type for all fields to output • Click Finish You might notice, that there is an additional message control added, you don’t need this control, one message area is enough on the page. • Delete the Message control that got added underneath the customer information table, by selecting the message control in page designer and .clicking the DEL key. The figure below shows the completed web page Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 48 of 63 • • Save your page, Right click on the page white space and select Run on server from the context menu If a dialog comes up to select an application server, • select WAS6.1 • Check the check box Set server as project default or Always use this server when running this project • Click Finish You should see your webpage in the default browser: Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 49 of 63 • • Now enter a valid customer number for example 0010100 Click callRPG Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 50 of 63 • The data should appear on the page. This looks good, if there is time left, let’s add some error handling. If data does not show up, there might be an error in your application. The first step would be to look at the console. • Double click the Console tab to maximize it in the content area Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 51 of 63 In the example above there is an error message recorded. • In the console scroll to the right to see details of the error, here the wrong library was specified in the build descriptor. • Fix the problem • Re-generate the project by right clicking on the project and selecting the Generate action from the context menu. • You might have to re-start the server to pick up all changes • Try running it on the server again One more enhancement to your code and then you can try debugging. Handling record not found The feedback parameter tells you whether the record access for the customer number has been successful. If the customer exists in the database it returns a 0 otherwise the customer number will be returned. Go back to the pagehandler code: • Right mouse click on the white space in the page designer • Select Edit Page Code from the context menu Add the if statement as shown above: 1. You compare variable feedback to zero 2. If it is not zero 3. Use built-in function seterror to write an error message, you concatenate the wrong customer number in the error message. 4. You set the data structure cds to blank, so older output gets erased from the page. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 52 of 63 The error message will get displayed in the message control that has been added by default to the page when you added the customer number input field. • Save the changes • Run the application again Debugging the RPG program If there are problems with calling the program on i5/OS you can use the build in workbench integrated debugger to debug the RPG program when it gets invoked from EGL. Note: If you are in a Lab environment, ask the instructor if the IBM i system is setup for multiple students doing this exercise. Students need their own userids to successfully work thru this exercise. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 53 of 63 If you are in your own environment just make sure your userid has enough authority to debug programs on IBM i. To debug the RPG program GETDATAE: • Switch to the Remote System Explorer perspective • • • • • Expand the connection to the i5/OS server or create a new connection. Create a filter for library EGLLABBV7xx, xx being your team number Expand library EGLLABV7xx Locate program GETDATAE Right click on it and from the context menu select Debug(Service Entry) Æ Set Service Entry point You will see a message telling you, the Service Entry Point is set Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 54 of 63 • Click Ok In the RSE perspective a new view gets added This view shows all service entry points on the system and it also allows working with these Service Entry points. • Go back to the web perspective Now run the CALLEGL001R.jsp again. • Enter a customer number • Enter a valid customer number 0010200 • Click the callRPG button The debug perspective will pop up with the RPG source loaded • • Set a breakpoint where you think it is needed (in the figure we set it after the chain statement). To set a breakpoint, double click in the grey strip beside the line numbers. Click the debugger run button Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 55 of 63 If the CHAIN was successful the data will show in the variable monitor • Click run button again to end the program You could also debug the EGL source Set a break point in the CALLEGL001.egl source. Open the source in the editor, the editor is integrated with the debugger and allows setting breakpoints. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 56 of 63 • Just edit it and set a breakpoint Then start it like you normally do but instead of selecting Run on Server, • Select Debug on server • Key in a customer number • Click the CallRPG button The workbench switches to the debug perspective. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 57 of 63 The perspective looks familiar, but now it shows the EGL source If the Service entry point is still active if you specify run in the EGL debug session ,the debug perspective will show the RPG debug views. We hope you enjoyed the Lab Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 58 of 63 Visit the EGL Café to get more information, join the community. The IBM Rational EGL Café ibm.com/rational/cafe/community/egl Additional comments In the tutorial we try to setup the environment to make it easy to get thru the exercises. For non tutorial environment we suggest some changes to the approach how you use the EGL Services wizard. Since the wizard is targeting creating a service and not a simple call it actually creates the Services environment in the EGL project. The service is actually overhead in your project and not needed for a single call. Instead we suggest creating a dummy EGL project to contain all the services infra structure. This project you use as the target for the EGL services wizard. Then you copy the interface definitions from this dummy project into your real EGL call project. With this approach non of the services environment gets created for your EGL application runtime and you still get the EGL interfaces created for your RPG programs. Using this approach, you will have to copy the jt400.jar file from the dummy EGL project into the real EGL call project. The EGL services wizard does this automatically for you under the covers. The jt400.jar contains the IBM i toolbox runtime classes to access native IBM objects it actually implements the remote call of the RPG program. To copy the jt400.jar do the following The jt400.jar is located under WebContentÆWEB-INFÆLib- Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 59 of 63 Just copy and paste the jar file from the dummy project into the same location in your real call project. Summary: You learned to navigate through the EGL and the IBM i runtime environments, how to configure your EGL Web Project to access the IBM® i server, and how to call a program. You learned how to write the actual code to call an IBM i program, and how to debug both RPG and EGL code. Visit the EGL Café to get more information, join the community. The IBM Rational EGL Café ibm.com/rational/cafe/community/egl Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 60 of 63 Resources Learn • Visit the EGL Café at: http://www-949.ibm.com/software/rational/cafe/community/egl • Visit the Rational Developer for System i resource page on developerWorks for technical information and best practices. • Subscribe to the IBM developerWorks newsletter, a weekly update on the best of developerWorks tutorials, articles, downloads, community activities, webcasts and events. • Subscribe to the Rational Edge e-zine for articles on the concepts behind effective software development. • Browse the technology bookstore for books on these and other technical topics. • IBM Enterprise Modernization Solutions • Read other tutorials related to the Enterprise Modernization Sandbox for System i. • Get a Rational Developer for i for SOA Construction product overview. • See some demos here. Get products and technologies • Download trial versions of IBM Rational software. About the authors Claus Weiss Claus Weiss is an advisory software consultant with the Rational Software System i – Ecosystem team at the IBM Canada Toronto Laboratory. He has degrees in industrial engineering and computer science from the University of Hamburg in Germany. He worked as a systems engineer with IBM Germany and joined the IBM Toronto Laboratory in 1984. He was a developer and team leader for System/38 development tools. He has been a member of the Design Control Group for the AS/400 development tools. He has worked as a consultant for IBM iSeries Application Development for the past 10 years, specializing in Visual Tools. Claus is a frequent speaker at COMMON and other iSeries conferences and a six-time winner of COMMON's Speaker Excellence award. He is also the lead author of the book title "Understanding the IBM WebFacing Tool," published by IBM Press, and has co-authored several IBM Redbooks. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 61 of 63 Notices © Copyright IBM Corporation 1992, 2009. All rights reserved. U.S. Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. This information was developed for products and services offered in the U.S.A. IBM may not offer the products, services, or features discussed in this documentation in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectualproperty right may be used instead. However, it is the user’s responsibility to evaluate and verify the operation of any non-IBM product, program, or service. IBM may have patents or pending patent applications covering subject matter described in this documentation. The furnishing of this documentation does not give you any license to these patents. You can send license inquiries, in writing, to: IBM Director of Licensing IBM Corporation North Castle Drive Armonk, NY 10504-1785 U.S.A. For license inquiries regarding double-byte (DBCS) information, contact the IBMIntellectual Property Department in your country or send inquiries, in writing, to: IBM World Trade Asia Corporation Licensing 2-31 Roppongi 3-chome, Minato-ku Tokyo 106, Japan Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 62 of 63 The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDWARRANTIES OR CONDITIONS OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some statesdo not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. ″ ″ This information could include technical inaccuracies or typographical errors.Changes are periodically made to the information herein; these changes will beincorporated in new editions of the publication. IBM may make improvementsand/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. Any references in this information to non-IBM Web sites are provided for convenience only and do not in any manner serve as an endorsement of those Web sites. The materials at those Web sites are not part of the materials for this IBM product and use of those Web sites is at your own risk. Licensees of this program who wish to have information about it for the purpose of enabling: (i) the exchange of information between independently created programs and other programs (including this one) and (ii) the mutual use of the information which has been exchanged, should contact: Intellectual Property Dept. for WebSphere Software IBM Corporation 3600 Steeles Ave. East Markham, Ontario Canada L3R 9Z7 Such information may be available, subject to appropriate terms and conditions,including in some cases, payment of a fee. The licensed program described in this documentation and all licensed material available for it are provided by IBM under terms of the IBM Customer Agreement, IBM International Program License Agreement or any equivalent agreement between us. Any performance data contained herein was determined in a controlled environment. Therefore, the results obtained in other operating environments mayvary significantly. Some measurements may have been made on development-levelsystems and there is no guarantee that these measurements will be the same on generally available systems. Furthermore, some measurements may have been estimated through extrapolation. Actual results may vary. Users of this document should verify the applicable data for their specific environment. Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®. Calling IBM i programs from EGL, Page 63 of 63 All statements regarding IBM’s future direction or intent are subject to change orwithdrawal without notice, and represent goals and objectives only. Copyright license This information contains sample application programs in source language, whichillustrates programming techniques on various operating platforms. You may copy,modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing applicationprograms conforming to the application programming interface for the operatingplatform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. Each copy or any portion of these sample programs or any derivative work, mustinclude a copyright notice as follows: © (your company name) (year). Portions of this code are derived from IBM Corp.Sample Programs. © Copyright IBM Corp. 1992, 2009. All rights reserved Trademarks and service marks The following terms are trademarks or registered trademarks of International Business Machines Corporation in the United States, other countries, or both. • IBM • iSeries • Rational • RPG/400 • System i Intel® and Pentium® are trademarks of Intel Corporation in the United States, othercountries, or both. Microsoft, Windows, Windows NT® and the Windows logo are trademarks ofMicrosoft Corporation in the United States, other countries, or both. Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in theUnited States, other countries, or both. UNIX is a registered trademark of The Open Group in the United States and othercountries. Linux is a registered trademark of Linus Torvalds in the United States, othercountries, or both. Other company, product or service names may be trademarks or service marks of others. Copyright © 2009, IBM® Corporation. All rights reserved. Published by IBM® developerWorks®.