Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EDT:Accessing a service"
(→EDT version .7) |
|||
Line 3: | Line 3: | ||
You can access a service from a Rich UI application or (in the future) from code generated to Java. | You can access a service from a Rich UI application or (in the future) from code generated to Java. | ||
− | '''''The details have changed in the days after version 0.81 Milestone 2. ''''' The current details are outlined here:<br> | + | <!-- |
+ | '''''The details have changed in the days after version 0.81 Milestone 2. ''''' The current details are outlined here:<br> | ||
::[[EDT:Resource Binding Services|Resource Binding for Services]] | ::[[EDT:Resource Binding Services|Resource Binding for Services]] | ||
Line 28: | Line 29: | ||
*Outside of Rich UI (in the future), the statement causes a synchronous invocation and does not identify a callback function or exception handler. If a returned value is expected, the statement identifies a variable to receive the returned value.<br>The synchronous '''call''' statement is now supported for accessing an IBM i called or service program, as described here: <br> [[EDT:Support for IBM i|Support for IBM i]].<br> | *Outside of Rich UI (in the future), the statement causes a synchronous invocation and does not identify a callback function or exception handler. If a returned value is expected, the statement identifies a variable to receive the returned value.<br>The synchronous '''call''' statement is now supported for accessing an IBM i called or service program, as described here: <br> [[EDT:Support for IBM i|Support for IBM i]].<br> | ||
− | <br> | + | <br> |
== Accessing a dedicated service (version 0.80) == | == Accessing a dedicated service (version 0.80) == | ||
Line 85: | Line 86: | ||
= EDT version 0.8.1 = | = EDT version 0.8.1 = | ||
+ | --> | ||
− | You can set up your code so that the service is at one time a dedicated service and at another an EGL REST-RPC service. | + | You can set up your code so that the service is at one time a dedicated service and at another an EGL REST-RPC service. The task is as follows: |
<br> | <br> |
Revision as of 13:45, 28 August 2012
This page contains code snippets for service access.
You can access a service from a Rich UI application or (in the future) from code generated to Java.
You can set up your code so that the service is at one time a dedicated service and at another an EGL REST-RPC service. The task is as follows:
- Declare a binding variable
- Use it in a call statement
- Define an entry for a dedicated service, in the EGL deployment descriptor
Accessing a dedicated service (version 0.8.1)
/******************************************************** * Declare the binding variable * ********************************************************/ myBinding IHttp? = Resources.getResource("binding:myBinding"); /******************************************************** * Call the service * ********************************************************/ call MyServiceType.calculate(myList) using myBinding returning to theCallBack onException theExceptionHandler; /******************************************************** * Example: create a new EGL project for * * "Web 2.0 client application with services". Add the * * the Service type shown next to the server package, * * and add the Handler type to the client package. * * * * Test the example in the Rich UI Preview tab * * by typing valid input into the first text box; * * for example: 5, 12, 4 * ********************************************************/ /******************************************************** * The file with a Service type * ********************************************************/ package server; service MyServiceType // variables and constants can be here function calculate(myScores Int[] in) returns(Decimal(4, 2)) numberOfScores, i, mySum Int; numberOfScores = myScores.getSize(); for(i from 1 to numberOfScores) mySum = myScores[i] + mySum; end return(mySum/numberOfScores); end end /******************************************************** * The file with a Handler type * ********************************************************/ package client; import server.MyServiceType; import org.eclipse.edt.rui.widgets.GridLayout; import org.eclipse.edt.rui.widgets.GridLayoutData; import org.eclipse.edt.rui.widgets.TextField; import dojo.widgets.DojoButton; import dojo.widgets.DojoTextField; handler MyHandler type RUIhandler{initialUI =[ui], onConstructionFunction = start, cssFile = "css/MyClientAppWithService.css", title = "MyHandler"} ui GridLayout{columns = 3, rows = 4, cellPadding = 4, children =[myResult, myButton, scores]}; scores TextField{layoutData = new GridLayoutData{row = 2, column = 2}}; myButton DojoButton{layoutData = new GridLayoutData{row = 4, column = 2}, text = "Calculate", onClick ::= ui_onClick}; myResult DojoTextField{layoutData = new GridLayoutData{row = 4, column = 3}}; function start() end function theExceptionHandler(exp AnyException in) SysLib.writeStdOut(exp.messageID + " " + exp.message); if(exp isa ServiceInvocationException) SysLib.writeStdOut((exp as ServiceInvocationException).detail1); SysLib.writeStdOut((exp as ServiceInvocationException).detail2); SysLib.writeStdOut((exp as ServiceInvocationException).detail3); end end function theCallBack(retResult decimal(4, 2) in) myResult.text = retResult; end function ui_onClick(event Event in) inputLength int = scores.text.length(); myDelimiters string = ", "; myPosition int = 1; myToken string; myList int[]; while(myPosition < inputLength) myToken = StringLib.getNextToken(scores.text, myPosition, myDelimiters); if(myToken != null) myList.appendElement(myToken as int); end end /************ Service access statements ***************************/ myBinding IHttp? = Resources.getResource("binding:myBinding"); call MyServiceType.calculate(myList) using myBinding returning to theCallBack onException theExceptionHandler; /*******************************************************************/ end end
Accessing an EGL REST-RPC service (version .7)
Access of an EGL REST-RPC function is similar to accessing a dedicated service, but typically involves coding the variable declaration to reference an entry in the EGL deployment descriptor.
For example, you might change the previous handler to reference a deployment descriptor entry named myService
. You can change the related variable declaration in one of two ways:
myService MyServiceType?{@Resource}; // or myService MyServiceType?{@Resource{bindingKey="myService"}};
You can demonstrate the access of a Service type under development only after you update two aspects of your deployment descriptor: Service Deployment and Resource Bindings. For details and a look at the version .8 code syntax, see Service bindings.
To retrieve the details from the HTTP response, add a parameter of type IHTTP to the callback function:function theCallBack(retResult decimal(4, 2) in, myHttp IHTTP in) myResult.text = retResult; // display the response in JSON format SysLib.writeStdOut(myHttp.getResponse().body); end