Preface
Purpose
Audience
Organization
Using ABL documentation
References to ABL compiler and run-time features
References to ABL data types
Typographical conventions
Examples of syntax descriptions
Long syntax descriptions split across lines
Complex syntax descriptions with both required and optional elements
Example procedures
OpenEdge messages
Obtaining more information about OpenEdge messages
Introduction
Web Services in OpenEdge
Web services
Comparing OpenEdge support for SOAP WSA and REST Web services
Choosing between SOAP and REST in OpenEdge
Overview of REST Web services in OpenEdge
Standards supported by OpenEdge REST Web Services
HTTP
JSON
REST Web service architecture in OpenEdge
Tools for REST application development and management
Progress Developer Studio for OpenEdge
OpenEdge Management (OEM) and OpenEdge Explorer (OEE)
RESTMAN
Creating OpenEdge REST applications
Planning
Configuring an AppServer
Creating a REST project
Creating an AppServer REST service interface
Creating REST Web services
Adding static resources to your project
Generating an OpenEdge REST application
Testing the REST application on an Apache Tomcat Web server
Deploying the REST application
Clients for OpenEdge REST Web services
Overview of SOAP Web services in OpenEdge
Standards supported by OpenEdge SOAP Web services
WSDL files
SOAP
SOAP message formats
SOAP message document structure
XML Schema
SOAP Web service architecture in OpenEdge
Creating OpenEdge SOAP Web services
Defining requirements
Session models
SOAP message formats
WSA and server security options
Defining the Web service in ProxyGen
Deploying a SOAP Web service
Writing a client and testing a SOAP Web service
Documenting client programming requirements
Putting the SOAP Web service into production
Tuning the Web service and its WSA instance
Creating ABL clients to consume SOAP Web services
Obtain the Web service's WSDL and documentation
Run the WSDL Analyzer
Build your client
Comparing access to AppServers and Web services
Test your client
Consuming SOAP Web service example
Sample of consuming a SOAP Web service
Sample SOAP Web service applications
Sample application directory structure
Using the sample applications
Creating OpenEdge REST Web Services
REST Applications
REST annotations in ABL code
Main REST annotations
Internal REST annotations
Annotation examples
External Procedure
Internal procedure
REST services in OpenEdge
Planning the URI structure of a REST service
Create services
Export WAR
Deploy application
Adding REST resources to a service
The service-relative URI
Path parameters
Query parameters
HTTP verbs
Procedure mapping examples
Parameter mapping
Input parameter mapping
Supported input parameter mappings
Output parameter mapping
Supported output parameter mappings
JSON input and output message formats
JSON input (request) messages
JSON output (response) messages
The structure of REST application WAR files
Manually Adding Additional Services to a REST Application
Errors and exceptions
REST Application Security
Security considerations
Java Servlet Container managed security
REST application managed security
AppServer application managed security
Data-in-transit network security
REST Manager security
Data Object Services
Overview of Data Object Services
Coding Business Entities to implement Data Objects
Singleton classes and procedures as Data Object resources
Coding ABL routines to implement a Data Object resource
Creating an ABL class with the New Business Entity wizard
Using existing ABL code with the Define Service Interface wizard
Coding ABL for Data Object operations
Sample Business Entity with before-image support
Sample Business Entity without before-image support
Updates to allow access by Kendo UI DataSources and Rollbase external objects
Understanding the JSON Filter Pattern (JFP)
Adding the Count operation method
Sample Read operation updated to handle JFP input and server paging
URIs for accessing Data Object Web applications, Services, and resources
Data Object URIs for client app access
Data Object URIs for testing resources from REST clients
Using a REST client to execute a Data Object operation
Creating OpenEdge SOAP Web Services
Exposing AppServer Applications as OpenEdge SOAP Web Services
Deciding how to expose your application
Web service objects and the WSDL file
Object representation
Object binding
Deployment information
Session Models and object IDs
Session models
How object IDs support session models
How session models affect Web service objects
SOAP message formats
SOAP formats supported by OpenEdge Web services
Enabling the AppServer application
Defining and deploying a Web service definition
Configuring a Web Service Adapter instance
Installing WSA on a DMZ server
Distributing your WSDL file
Building Clients for OpenEdge SOAP Web services
Creating client interfaces from WSDL
WSDL element overview for OpenEdge Web services
SOAP format impact on generated client interfaces
Method signatures
Method return values
Client programming for different session models
Programming clients for session-managed Web services
Programming clients for session-free Web services
Overview of calling methods on Web service objects
Client interface methods for session-managed AppObjects
Client interface methods for session-free AppObjects
Client interface methods for SubAppObjects and ProcObjects
ProcObject methods
SubAppObject methods
Retrieving and sending object IDs: handling SOAP headers
Defining object IDs in WSDL
Using object IDs in a SOAP message
Defining and passing Web service method parameters
Client data type mapping
Relational data types
Date and time data
Dedicated ABL data types
Array parameters
Fixed arrays
Mapping relational data
Defining TABLE (static temp-table) parameters
Defining TABLE-HANDLE (dynamic temp-table) parameters
Defining DATASET (static ProDataSet) parameters
Defining DATASET-HANDLE (dynamic ProDataSet) parameters
Additional considerations
Including before-image data
Name collisions
R-code header changes
Mapping ABL procedures to SOAP messages
ABL procedure prototype to WSDL operation
WSDL operation to client method prototype
Client method call to SOAP request/response message pair
Handling Web service errors and SOAP faults
Client programming for SOAP faults
Sample Code with SOAP Messages for OpenEdge Web Services
Sample Web service specifications
Consuming a session-managed Web service
Consuming a session-free Web service
Running an ABL non-persistent procedure
Creating and using a ProcObject
ProcObject session context
ProcObject IDs
ProcObject class factory methods
Running an internal procedure or user-defined function
Releasing an object
Passing static and dynamic temp-table parameters
Invoking a method with a TABLE parameter
Invoking a method with a TABLE-HANDLE parameter
Receiving a SOAP fault message
Passing static and dynamic ProDataSet parameters
Invoking a method with a DATASET parameter
Invoking a method with a DATASET-HANDLE parameter
Testing and Debugging OpenEdge SOAP Web Services
Testing the AppServer application as a Web service
Unit testing from ABL
Testing from a Web services client
Setting error information levels
WSA and Web service logging level properties
Logging information
Hints for setting the WSA loggingLevel property
Hints for setting the Web service serviceLoggingLevel property
Setting the logging level properties
Identifying relevant log files
Working with SOAP faults
Setting the serviceFaultLevel property
Typical SOAP fault response message
WSA's <errorMessage> element
WSA's <requestID> element
Handling SOAP faults programmatically
Using a SOAP message viewer
Configuring and running WSAViewer
Identifying errors
How the WSA logs Web service information
Errors occurring in WSA administration requests
Errors occurring in Web service application requests
Client-side errors
Server-side errors
Sample error scenarios
Scenario 1: Web service deployed but not enabled
Scenario 2: ABL updated, but Web service not redeployed
Scenario 3: Web service deployed but AppServer not running
Creating ABL Clients to Consume OpenEdge SOAP Web Services
Creating an ABL Client from WSDL
Basics of an ABL client to consume Web services
Using the WSDL Analyzer
Running the WSDL Analyzer
Understanding the WSDL Analyzer output
Index and Service pages
Operation index page
Port type page
Data types page
Analyzing wrapped document literal
Wrapped form
Unwrapped form
WSDL Analyzer documentation options
Programming options
Analyzing complex data
Web service operation parameter documentation
SOAP header entry and SOAP fault detail documentation
Mapping XML Schema data types to ABL data types
Simple data types
Suggested mappings
Interacting with XML Schema data formats
Arrays
Complex data types
Connecting to OpenEdge SOAP Web Services from ABL
What is a Web service connection?
Binding to a Web service
Creating a server object handle
Binding to a server object handle
Connection parameters
Using HTTPS
Invoking the binding
Binding results
Managing Web service bindings
Accessing a port type for a Web service
Accessing multiple port types
Accessing multiple port types simultaneously
Invoking OpenEdge SOAP Web Service Operations from ABL
Preparing to invoke operations
Creating a Web service procedure object
Invoking operations
Using the RUN statement
Using a user-defined function
Managing operation parameters
Managing complex data
Types of complex data
Complex data type parameters
Complex data in SOAP headers and SOAP faults
Complex data example
Coding options for wrapped document literal
Using the wrapped form
Using the unwrapped form
Managing asynchronous requests
Supported asynchronous Web service requests
Order of completion
Asynchronous request object handle
Results handling
Handling SOAP Message Headers in ABL
SOAP message headers: an overview
SOAP header structure
Accessing the SOAP header
Requirements for header handlers
SOAP header object model
Accessing SOAP header entries
Accessing a SOAP response header
Creating a SOAP request header
Specifying SOAP header callback procedures at run time
Using the SET-CALLBACK-PROCEDURE( ) method
Defining header handlers
Defining a response header handler
Defining a request header handler
Invoking a header handler
Creating and managing SOAP message headers
Reusing an unchanged SOAP response header
Response header handler for returning a header for reuse
Request header handler for reusing a header
Modifying a reused SOAP response header
Request header handler for reusing and modifying a header
Using a client-created SOAP request header
Procedure to create a SOAP request header
Request header handler for passing a globally-created header object
Managing memory for SOAP headers
SOAP header object model and DOM relationships
Memory for the SOAP header object model and DOM
Attributes and methods for handling SOAP headers
SOAP header object attributes and methods
SOAP header-entryref object attributes and methods
Handling Errors in ABL Requests to OpenEdge SOAP Web Services
Handling SOAP faults
Detecting a SOAP fault
SOAP faults with traditional error handling
SOAP faults with structured error handling
Managing a SOAP fault
Examples of ABL accessing a SOAP fault
Traditional error handling example
Structured error handling example
Asynchronous call error handling example
Debugging ABL applications that call Web services
SOAP Viewers
Using WSAViewer
Using WSAViewer with an ABL client
Using ProSOAPView
Running ProSOAPView (SOAPSpy)
Tracking messages in the SOAPSpy window
Developing a .NET Client to Consume OpenEdge SOAP Web Services
What is Microsoft .NET?
Using .NET as your Web services client
VB.NET sample Web service specifications
Creating the VB.NET client interface
Adding a Web reference
Reference.vb: Web service client interface
Reference.vb: Open Client objects
.NET data type mapping
Accessing parameter data
TABLE (static temp-table) parameters
TABLE-HANDLE (dynamic temp-table) parameters
Sample interface object prototypes in Reference.vb
Sample common interface method prototypes in Reference.vb
Sample ABL and VB.NET interface method prototypes
Non-persistent procedure
Persistent procedure
User-defined function
Internal procedure passing a TABLE parameter
TABLE definition
External procedure passing a TABLE-HANDLE parameter
Developing the VB.NET client application
Creating the Web service
Running a non-persistent (external) procedure
Creating server-side context for a ProcObject (running a persistent procedure)
Running an internal procedure or user-defined function
Creating a SubAppObject
Releasing an object
Running a procedure with a TABLE parameter
Processing the data from a TABLE parameter
Running a procedure with a TABLE-HANDLE parameter
Preparing schema and data for input TABLE-HANDLE parameter
Processing schema and data for output TABLE-HANDLE parameter
Extra processing for RPC/Encoded TABLE-HANDLE parameters
Handling errors on the client
Creating .NET DataSets from ProDataSet parameters
Learning more about writing .NET clients
Developing a Java Client to Consume OpenEdge SOAP Web Services
Using Java client toolkits
Java sample Web service specifications
Creating Java Axis client interface objects
Generating client interface objects
Proxy directory structure
Proxy classes
Java data type mapping
Output parameters
ABL unknown values
TABLE (static temp-table) parameters
TABLE-HANDLE (dynamic temp-table) parameters
Sample Java prototypes for common object methods
Sample ABL and Java interface method prototypes
Non-persistent procedure
Persistent procedure
User-defined function
Internal procedure using a temp-table
Temp-table definition
External procedure passing a TABLE-HANDLE
Developing the Axis client application
Setting up the Web service objects
Using the sample PscObjectIDHandler and HandlerControlBlock classes
Setting up the PscObjectIDHandler objects
Connecting to a Web service
Running a non-persistent (external) procedure
Creating server-side context for a ProcObject (running a persistent procedure)
Running an internal procedure or user-defined function
Running an internal procedure with a TABLE parameter
Processing the data from a TABLE parameter
Running a procedure with a TABLE-HANDLE parameter
Using sample helper classes to manage TABLE-HANDLE parameters
Preparing schema and data for input TABLE-HANDLE parameters
Processing schema and data for output TABLE-HANDLE parameters
Releasing an object
Handling errors on the client
Compiling and running the client application
ProDataSet parameters in Java Web service clients
Proxy classes
DATASET (static ProDataSet) parameters
Before-image data
DATASET-HANDLE (dynamic ProDataSet) parameters
Before-image data
ABL Elements for Consuming OpenEdge SOAP Web Services
Handles for consuming a Web service
Statements for consuming Web services
Attributes, methods, and events for consuming Web services
Data Type Conversion Rules for ABL Calls to OpenEdge SOAP Web Services
Data type casting
CHARACTER or LONGCHAR
DATE
DATETIME
DATETIME-TZ
DECIMAL
INT64
INTEGER
LOGICAL
MEMPTR or RAW
Understanding WSDL Details
ABL procedure prototype to WSDL operation
Array mapping in WSDL documents
Doc/Lit
RPC/Literal
RPC/Encoded
Defining TABLE (static temp-table) parameters
Defining TABLE-HANDLE (dynamic temp-table) parameters
Defining DATASET (static ProDataSet) parameters
Including before-image data
Using NAMESPACE-URI attributes
Defining DATASET-HANDLE (dynamic ProDataSet) parameters
The WSDL Analyzer
bprowsdldoc
Preface
bprowsdldoc