Try OpenEdge Now
skip to main content
Web Services
Creating OpenEdge SOAP Web Services : Sample Code with SOAP Messages for OpenEdge Web Services : Passing static and dynamic temp-table parameters : Invoking a method with a TABLE-HANDLE parameter
 
Invoking a method with a TABLE-HANDLE parameter
To invoke a method that passes a TABLE-HANDLE parameter:
*The client application must create and send an XML Schema along with the data to fully describe the dynamic temp-table in the SOAP request message. The TABLE-HANDLE parameter in a SOAP request or response consists of an XML <DataSet> element containing two child elements:
*An XML Schema element, <schema>, representing the schema for the TABLE-HANDLE
*An XML representation of data using an element, <Data>, with each row represented as a sub-element, <Item>
*A non-ABL client application must parse the XML Schema and data from the SOAP response message to make the TABLE-HANDLE accessible as native data within the application.
This is the ABL prototype for a sample method, dynttIO( ), that passes a TABLE-HANDLE parameter:

ABL prototype that passes a TABLE-HANDLE parameter

/* dynttIO.p */

DEFINE INPUT-OUTPUT PARAMETER TABLE-HANDLE ttHandle.
This is the declaration for a VB.NET client interface method (dynTTIO( )) which has a TABLE-HANDLE parameter, ttHandle, as a VB.NET object:

VB.NET declaration of interface method passing TABLE-HANDLE, ttHandle

Public Sub dynttIO(ByRef ttHandle As Object)
The following VB.NET client code passes the dyntt object representing a TABLE-HANDLE to the dynttIO( ) method:

VB.NET client code passing TABLE-HANDLE, ttHandle, to interface method

Dim dyntt as Object

'... Code to build up the dyntt Object (XML Schema and data)

webService.dynttIO(dyntt)
For more information on how you might manage TABLE-HANDLE parameters in VB.NET, see the subsections on handling TABLE-HANDLE parameters in Developing a .NET Client to Consume OpenEdge SOAP Web Services and in Java see the subsections on handling TABLE-HANDLE parameters in Developing a Java Client to Consume OpenEdge SOAP Web Services.
This is the structure of the Doc/Lit SOAP request message that the sample dynttIO method sends to pass a dynamic temp-table that you create for the ttHandle TABLE-HANDLE parameter:

Doc/Lit SOAP request for TABLE-HANDLE, ttHandle

<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope namespaces defined here...>
  <soap:Header .../>
  <soap:Body>
    <dynttIO xmlns="urn:DynTTSrvc:DynTT">
      <ttHandle>
        <DataSet xmlns="">
          <schema>
            <!-- Schema definition goes here -->
          </schema>
          <Data>
            <!-- Data goes here -->
          </Data>
        </DataSet>
      </ttHandle>
    </dynttIO>
  </soap:Body>
</soap:Envelope>
The ttHandle TABLE-HANDLE parameter becomes an XML <ttHandle> element containing the <DataSet> element that contains the schema and the data.
Note: Not shown is any required object ID that must be sent in the SOAP header for the object on which dynttIO( ) is invoked.
This is a sample XML Schema created by VB.NET for the TABLE-HANDLE contained by the sample <DataSet> element in the sample Doc/Lit SOAP request:

TABLE-HANDLE <schema> element for an Doc/Lit SOAP request

<xs:schema id="Data" xmlns=""
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Data" msdata:IsDataSet="true">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="Item">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Name" type="xs:string" minOccurs="0"/>
              <xs:element name="Number" type="xs:int" minOccurs="0"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>
Note the definition of the <Data> element containing the data for the table, and how the column type information is specified within the <Item> element.
This is a sample <Data> element you would create to accompany the specified schema in the sample Doc/Lit SOAP request, including the column values for the two rows initialized in the sample VB.NET code:

TABLE-HANDLE <Data> element for an Doc/Lit SOAP request

<Data>
  <Item>
    <Name>Fred</Name>
    <Number>1</Number>
  </Item>
  <Item>
    <Name>Barney</Name>
    <Number>2</Number>
  </Item>
</Data>