Delphi - SAP SOAP WebService no return values

Hi,

I have a webservice from SAP, it has one operation "ZMymcsCustomersMulti"

		<wsdl:operation name="ZMymcsCustomersMulti">
			<wsp:Policy>
				<wsp:PolicyReference URI="#OP_ZMymcsCustomersMulti"/>
			</wsp:Policy>
			<wsdl:input message="tns:ZMymcsCustomersMulti"/>
			<wsdl:output message="tns:ZMymcsCustomersMultiResponse"/>
		</wsdl:operation>

As you can see the return value should be of the type "ZMymcsCustomersMultiResponse". 
After I imported this service into my delphi project the operation doesn't have any return values.

As you can see in the delphi generated code the webservice doesn't return any values, but the wsdl file clearly states it should return a value of the type "ZMymcsCustomersMultiResponse".

How can I change the delphi generated code to solve this issue?
I have already tried creating the type myself and registering the class in the webservice but the function still doesn't return any values.

Please help me solve this issue...


WSDL:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions targetNamespace="urn:sap-com:document:sap:soap:functions:mc-style" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="urn:sap-com:document:sap:soap:functions:mc-style" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-
wss-wssecurity-utility-1.0.xsd">
	<wsdl:documentation>
		<sidl:sidl xmlns:sidl="http://www.sap.com/2007/03/sidl"/>
	</wsdl:documentation>
	<wsp:UsingPolicy wsdl:required="true"/>
	<wsp:Policy wsu:Id="BN_ZMCS_CUSTOMER_MULTI">
		<wsaw:UsingAddressing xmlns:wsaw="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
		<saptrnbnd:OptimizedXMLTransfer uri="http://xml.sap.com/2006/11/esi/esp/binxml" xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbinding/" wsp:Optional="true"/>
		<sapattahnd:Enabled xmlns:sapattahnd="http://www.sap.com/710/features/attachment/">false</sapattahnd:Enabled>
		<wsp:ExactlyOne xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
			<wsp:All>
				<sp:TransportBinding>
					<wsp:Policy>
						<sp:TransportToken>
							<wsp:Policy>
								<sp:HttpsToken>
									<wsp:Policy>
										<sp:HttpBasicAuthentication/>
									</wsp:Policy>
								</sp:HttpsToken>
							</wsp:Policy>
						</sp:TransportToken>
						<sp:AlgorithmSuite>
							<wsp:Policy>
								<sp:TripleDesRsa15/>
							</wsp:Policy>
						</sp:AlgorithmSuite>
						<sp:Layout>
							<wsp:Policy>
								<sp:Strict/>
							</wsp:Policy>
						</sp:Layout>
					</wsp:Policy>
				</sp:TransportBinding>
			</wsp:All>
		</wsp:ExactlyOne>
	</wsp:Policy>
	<wsp:Policy wsu:Id="IF_z_mcs_customers_multi">
		<sapsession:Session xmlns:sapsession="http://www.sap.com/webas/630/soap/features/session/">
			<sapsession:enableSession>false</sapsession:enableSession>
		</sapsession:Session>
		<sapcentraladmin:CentralAdministration xmlns:sapcentraladmin="http://www.sap.com/webas/700/soap/features/CentralAdministration/" wsp:Optional="true">
			<sapcentraladmin:BusinessApplicationID>81349D4EDC1BD767E1000000153F1A9B</sapcentraladmin:BusinessApplicationID>
		</sapcentraladmin:CentralAdministration>
	</wsp:Policy>
	<wsp:Policy wsu:Id="OP_ZMymcsCustomersMulti">
		<sapcomhnd:enableCommit xmlns:sapcomhnd="http://www.sap.com/NW05/soap/features/commit/">false</sapcomhnd:enableCommit>
		<sapblock:enableBlocking xmlns:sapblock="http://www.sap.com/NW05/soap/features/blocking/">true</sapblock:enableBlocking>
		<saptrhnw05:required xmlns:saptrhnw05="http://www.sap.com/NW05/soap/features/transaction/">no</saptrhnw05:required>
		<saprmnw05:enableWSRM xmlns:saprmnw05="http://www.sap.com/NW05/soap/features/wsrm/">false</saprmnw05:enableWSRM>
	</wsp:Policy>
	<wsdl:types>
		<xsd:schema attributeFormDefault="qualified" targetNamespace="urn:sap-com:document:sap:soap:functions:mc-style">
			<xsd:complexType name="ZmcsCustomer">
				<xsd:sequence>
					<xsd:element name="Name" type="xsd:string"/>
					<xsd:element name="Street" type="xsd:string"/>
					<xsd:element name="Postcode" type="xsd:string"/>
					<xsd:element name="City" type="xsd:string"/>
					<xsd:element name="Message" type="xsd:string"/>
				</xsd:sequence>
			</xsd:complexType>
			<xsd:complexType name="ZmcsCustomerInfoT">
				<xsd:sequence>
					<xsd:element name="item" type="tns:ZmcsCustomer" minOccurs="0" maxOccurs="unbounded"/>
				</xsd:sequence>
			</xsd:complexType>
			<xsd:complexType name="StringTable">
				<xsd:sequence>
					<xsd:element name="item" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
				</xsd:sequence>
			</xsd:complexType>
			<xsd:element name="ZMymcsCustomersMulti">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="Customer" type="xsd:string" minOccurs="0"/>
						<xsd:element name="Return" type="tns:ZmcsCustomerInfoT" minOccurs="0"/>
						<xsd:element name="Tcustomers" type="tns:StringTable" minOccurs="0"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="ZMymcsCustomersMultiResponse">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="Return" type="tns:ZmcsCustomerInfoT"/>
						<xsd:element name="Tcustomers" type="tns:StringTable"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:schema>
	</wsdl:types>
	<wsdl:message name="ZMymcsCustomersMulti">
		<wsdl:part name="parameters" element="tns:ZMymcsCustomersMulti"/>
	</wsdl:message>
	<wsdl:message name="ZMymcsCustomersMultiResponse">
		<wsdl:part name="parameter" element="tns:ZMymcsCustomersMultiResponse"/>
	</wsdl:message>
	<wsdl:portType name="z_mcs_customers_multi">
		<wsp:Policy>
			<wsp:PolicyReference URI="#IF_z_mcs_customers_multi"/>
		</wsp:Policy>
		<wsdl:operation name="ZMymcsCustomersMulti">
			<wsp:Policy>
				<wsp:PolicyReference URI="#OP_ZMymcsCustomersMulti"/>
			</wsp:Policy>
			<wsdl:input message="tns:ZMymcsCustomersMulti"/>
			<wsdl:output message="tns:ZMymcsCustomersMultiResponse"/>
		</wsdl:operation>
	</wsdl:portType>
	<wsdl:binding name="ZMCS_CUSTOMER_MULTI" type="tns:z_mcs_customers_multi">
		<wsp:Policy>
			<wsp:PolicyReference URI="#BN_ZMCS_CUSTOMER_MULTI"/>
		</wsp:Policy>
		<wsa:EndpointReference xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
			<wsa:ReferenceParameters/>
		</wsa:EndpointReference>
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
		<wsdl:operation name="ZMymcsCustomersMulti">
			<soap:operation soapAction="" style="document"/>
			<wsdl:input>
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:service name="ZMCS_CUSTOMER_MULTI">
		<wsdl:port name="ZMCS_CUSTOMER_MULTI" binding="tns:ZMCS_CUSTOMER_MULTI">
			<soap:address location="http://localhost/zmcs_customer_multi"/>
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Delphi generated code:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// Encoding : utf-8
// Version  : 1.0
// (9/12/2011 11:34:20 - - $Rev: 25127 $)
// ************************************************************************ //

unit MCS_CUSTOMER_MULTI;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

const
  IS_OPTN = $0001;
  IS_UNBD = $0002;
  IS_UNQL = $0008;
  IS_REF  = $0080;


type

  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Embarcadero types; however, they could also 
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:string          - "http://www.w3.org/2001/XMLSchema"[Gbl]

  ZmcsCustomer         = class;                 { "urn:sap-com:document:sap:soap:functions:mc-style"[GblCplx] }
  item                 = class;                 { "urn:sap-com:document:sap:soap:functions:mc-style"[Alias] }



  // ************************************************************************ //
  // XML       : ZmcsCustomer, global, <complexType>
  // Namespace : urn:sap-com:document:sap:soap:functions:mc-style
  // ************************************************************************ //
  ZmcsCustomer = class(TRemotable)
  private
    FName_: string;
    FStreet: string;
    FPostcode: string;
    FCity: string;
    FMessage_: string;
  published
    property Name_:    string  Index (IS_UNQL) read FName_ write FName_;
    property Street:   string  Index (IS_UNQL) read FStreet write FStreet;
    property Postcode: string  Index (IS_UNQL) read FPostcode write FPostcode;
    property City:     string  Index (IS_UNQL) read FCity write FCity;
    property Message_: string  Index (IS_UNQL) read FMessage_ write FMessage_;
  end;

  ZmcsCustomerInfoT = array of item;            { "urn:sap-com:document:sap:soap:functions:mc-style"[GblCplx] }


  // ************************************************************************ //
  // XML       : item, alias
  // Namespace : urn:sap-com:document:sap:soap:functions:mc-style
  // ************************************************************************ //
  item = class(ZmcsCustomer)
  private
  published
  end;

  item2           = type string;      { "urn:sap-com:document:sap:soap:functions:mc-style"[Alias] }
  StringTable     = array of item2;                 { "urn:sap-com:document:sap:soap:functions:mc-style"[GblCplx] }

  // ************************************************************************ //
  // Namespace : urn:sap-com:document:sap:soap:functions:mc-style
  // transport : http://schemas.xmlsoap.org/soap/http
  // style     : document
  // binding   : ZMCS_CUSTOMER_MULTI
  // service   : ZMCS_CUSTOMER_MULTI
  // port      : ZMCS_CUSTOMER_MULTI
  // ************************************************************************ //
  z_mcs_customers_multi = interface(IInvokable)
  ['{DDFC4969-7467-E4D1-D6A2-37D3C09C4750}']
    function ZMymcsCustomersMulti(const Customer: string; const Return: ZmcsCustomerInfoT; var Tcustomers: StringTable) ; stdcall;
  end;

function Getz_mcs_customers_multi(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): z_mcs_customers_multi;


implementation
  uses SysUtils;

function Getz_mcs_customers_multi(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): z_mcs_customers_multi;
const
  defWSDL = '';
  defURL  = '';
  defSvc  = 'ZMCS_CUSTOMER_MULTI';
  defPrt  = 'ZMCS_CUSTOMER_MULTI';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as z_mcs_customers_multi);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;

initialization
  InvRegistry.RegisterInterface(TypeInfo(z_mcs_customers_multi), 'urn:sap-com:document:sap:soap:functions:mc-style', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(z_mcs_customers_multi), '');
  InvRegistry.RegisterInvokeOptions(TypeInfo(z_mcs_customers_multi), ioIsAppServerSOAP);
  InvRegistry.RegisterInvokeOptions(TypeInfo(z_mcs_customers_multi), ioDocument);
  InvRegistry.RegisterInvokeOptions(TypeInfo(z_mcs_customers_multi), ioHasReturnParamNames);
  RemClassRegistry.RegisterXSClass(ZmcsCustomer, 'urn:sap-com:document:sap:soap:functions:mc-style', 'ZmcsCustomer');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ZmcsCustomer), 'Name_', 'Name');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ZmcsCustomer), 'Message_', 'Message');
  RemClassRegistry.RegisterXSInfo(TypeInfo(ZmcsCustomerInfoT), 'urn:sap-com:document:sap:soap:functions:mc-style', 'ZmcsCustomerInfoT');
  RemClassRegistry.RegisterXSClass(item, 'urn:sap-com:document:sap:soap:functions:mc-style', 'item');
  RemClassRegistry.RegisterXSInfo(TypeInfo(item2), 'urn:sap-com:document:sap:soap:functions:mc-style', 'item2', 'item');
  RemClassRegistry.RegisterXSInfo(TypeInfo(StringTable), 'urn:sap-com:document:sap:soap:functions:mc-style', 'StringTable');
end.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

my altered delphi generated code
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// Encoding : utf-8
// Version  : 1.0
// (9/12/2011 11:34:20 - - $Rev: 25127 $)
// ************************************************************************ //

unit MCS_CUSTOMER_MULTI;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

const
  IS_OPTN = $0001;
  IS_UNBD = $0002;
  IS_UNQL = $0008;
  IS_REF  = $0080;


type

  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Embarcadero types; however, they could also 
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:string          - "http://www.w3.org/2001/XMLSchema"[Gbl]

  ZmcsCustomer         = class;                 { "urn:sap-com:document:sap:soap:functions:mc-style"[GblCplx] }
  item                 = class;                 { "urn:sap-com:document:sap:soap:functions:mc-style"[Alias] }



  // ************************************************************************ //
  // XML       : ZmcsCustomer, global, <complexType>
  // Namespace : urn:sap-com:document:sap:soap:functions:mc-style
  // ************************************************************************ //
  ZmcsCustomer = class(TRemotable)
  private
    FName_: string;
    FStreet: string;
    FPostcode: string;
    FCity: string;
    FMessage_: string;
  published
    property Name_:    string  Index (IS_UNQL) read FName_ write FName_;
    property Street:   string  Index (IS_UNQL) read FStreet write FStreet;
    property Postcode: string  Index (IS_UNQL) read FPostcode write FPostcode;
    property City:     string  Index (IS_UNQL) read FCity write FCity;
    property Message_: string  Index (IS_UNQL) read FMessage_ write FMessage_;
  end;

  ZmcsCustomerInfoT = array of item;            { "urn:sap-com:document:sap:soap:functions:mc-style"[GblCplx] }


  // ************************************************************************ //
  // XML       : item, alias
  // Namespace : urn:sap-com:document:sap:soap:functions:mc-style
  // ************************************************************************ //
  item = class(ZmcsCustomer)
  private
  published
  end;

  item2           = type string;      { "urn:sap-com:document:sap:soap:functions:mc-style"[Alias] }
  StringTable     = array of item2;                 { "urn:sap-com:document:sap:soap:functions:mc-style"[GblCplx] }

  ZMymcsCustomersMultiResponse = class(TRemotable)
    private
      FReturn     : ZmcsCustomerInfoT;
      FTcustomers : StringTable;
    published
      property Return : ZmcsCustomerInfoT read FReturn write FReturn;
      property Tcustomers : StringTable   read FTcustomers write FTcustomers;
  end;

  // ************************************************************************ //
  // Namespace : urn:sap-com:document:sap:soap:functions:mc-style
  // transport : http://schemas.xmlsoap.org/soap/http
  // style     : document
  // binding   : ZMCS_CUSTOMER_MULTI
  // service   : ZMCS_CUSTOMER_MULTI
  // port      : ZMCS_CUSTOMER_MULTI
  // ************************************************************************ //
  z_mcs_customers_multi = interface(IInvokable)
  ['{DDFC4969-7467-E4D1-D6A2-37D3C09C4750}']
    function ZMymcsCustomersMulti(const Customer: string; const Return: ZmcsCustomerInfoT; var Tcustomers: StringTable) : ZMymcsCustomersMultiResponse; stdcall;
  end;

function Getz_mcs_customers_multi(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): z_mcs_customers_multi;


implementation
  uses SysUtils;

function Getz_mcs_customers_multi(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): z_mcs_customers_multi;
const
  defWSDL = 'MCS_CUSTOMER_MULTI.wsdl';
  defURL  = 'http://localhost/......';
  defSvc  = 'ZMCS_CUSTOMER_MULTI';
  defPrt  = 'ZMCS_CUSTOMER_MULTI';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as z_mcs_customers_multi);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;

initialization
  InvRegistry.RegisterInterface(TypeInfo(z_mcs_customers_multi), 'urn:sap-com:document:sap:soap:functions:mc-style', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(z_mcs_customers_multi), '');
  InvRegistry.RegisterInvokeOptions(TypeInfo(z_mcs_customers_multi), ioIsAppServerSOAP);
  InvRegistry.RegisterInvokeOptions(TypeInfo(z_mcs_customers_multi), ioDocument);
  InvRegistry.RegisterInvokeOptions(TypeInfo(z_mcs_customers_multi), ioHasReturnParamNames);
  RemClassRegistry.RegisterXSClass(ZmcsCustomer, 'urn:sap-com:document:sap:soap:functions:mc-style', 'ZmcsCustomer');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ZmcsCustomer), 'Name_', 'Name');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ZmcsCustomer), 'Message_', 'Message');
  RemClassRegistry.RegisterXSInfo(TypeInfo(ZmcsCustomerInfoT), 'urn:sap-com:document:sap:soap:functions:mc-style', 'ZmcsCustomerInfoT');
  RemClassRegistry.RegisterXSClass(item, 'urn:sap-com:document:sap:soap:functions:mc-style', 'item');
  RemClassRegistry.RegisterXSInfo(TypeInfo(item2), 'urn:sap-com:document:sap:soap:functions:mc-style', 'item2', 'item');
  RemClassRegistry.RegisterXSInfo(TypeInfo(StringTable), 'urn:sap-com:document:sap:soap:functions:mc-style', 'StringTable');

  RemClassRegistry.RegisterXSClass(ZMymcsCustomersMultiResponse, 'urn:sap-com:document:sap:soap:functions:mc-style', 'ZMymcsCustomersMultiResponse');
  //RemClassRegistry.RegisterXSInfo(TypeInfo(ZMymcsCustomersMultiResponse), 'urn:sap-com:document:sap:soap:functions:mc-style', 'ZMymcsCustomersMultiResponse');
end.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0
Yoran
12/13/2011 1:52:39 PM
embarcadero.delphi.webservices 976 articles. 0 followers. Follow

3 Replies
1693 Views

Similar Articles

[PageSpeed] 31

Hello,

>
> I have a webservice from SAP, it has one operation "ZMymcsCustomersMulti"
>
> <wsdl:operation name="ZMymcsCustomersMulti">
> <wsp:Policy>
> <wsp:PolicyReference URI="#OP_ZMymcsCustomersMulti"/>
> </wsp:Policy>
> <wsdl:input message="tns:ZMymcsCustomersMulti"/>
> <wsdl:output message="tns:ZMymcsCustomersMultiResponse"/>
> </wsdl:operation>
>
> As you can see the return value should be of the type 
> "ZMymcsCustomersMultiResponse".
> After I imported this service into my delphi project the operation doesn't 
> have any return values.
>
> As you can see in the delphi generated code the webservice doesn't return 
> any values, but the wsdl file clearly states it should return a value of 
> the type "ZMymcsCustomersMultiResponse".
>
> How can I change the delphi generated code to solve this issue?
> I have already tried creating the type myself and registering the class in 
> the webservice but the function still doesn't return any values.
>
> Please help me solve this issue...
>


The service matches the rule for wrapped convention for document|literal 
services (see 
http://atmanes.blogspot.com/2005/03/wrapped-documentliteral-convention.html). 
When that happens, by default, the WSDL importer will unwrap. If you don't 
want it to unwrap you must turn OFF that feature. If you run "WSDLImp.exe" 
without any parameters you'll see the list of options:

{code}
Embarcadero WSDLIMP Version 2.41 - $Rev: 44408 $
Copyright (c) 2010 Embarcadero Technologies, Inc.

Usage: WSDLIMP [options] <WSDL[File|URL]>

 Language Generation Options:
  -C     Generate C++ code
  -P     Generate Pascal code

 Code Generation Options [ -option{+|-} default shown ]:
  -Oa+   Process nillable and optional elements
  -Ob-   Use Setters and Getters for properties
  -Od+   Generate destructors for remotable types
  -Oe+   Generate scoped enumerations
  -Of+   Import Fault Types
  -Og-   Generate interface GUIDs using COM API
  -Oh+   Import Header Types
  -Oi+   Generate warning comments
  -Oj+   Validate Enumeration members
  -Ok-   Map pure collections to wrapper class types
  -Ol-   Emit wrapper element Types
  -Om-   Allow out parameters
  -Oo+   One out parameter is return value
  -Op+   Process included and imported schemas
  -Or-   Generate alias for the element of pure collections
  -Os-   Generate server implementation instead of client proxies
  -Ot+   Do not emit unused types
  -Ou+   Unwrap wrapper elements (wrapped doc|lit services)
  -Ov+   Generate verbose information about types and interfaces
  -Ow-   Map String to WideString
  -Ox+   Generate class aliases as class types
  -Oz-   Use TXSxxxx classes for simple nillable types

 SOAP Version Options:
  Automatically determines SOAP version if not forced. (Recommended)
  -SOAP11   Process only WSDL Binding extensions for the SOAP 1.1 Protocol
  -SOAP12   Process only WSDL Binding extensions for the SOAP 1.2 Protocol

 File options:
  -D<path>  Output directory path
  -=+       Output filename after '=' in URL
  @<Resp>   Response file with list of WSDL

 Proxy/Server Authentication:
  -user:userName -pass:Password [-proxy:Proxy]
{code}

The one option you want to use is this one:

{code}
  -Ou+   Unwrap wrapper elements (wrapped doc|lit services)
{code}

Unwrapping is ON by default. To turn it off use "-Ou-", as in:

{code}
  wsdlimp -ou-  service.wsdl
{code}

The importer will then generate this code instead:

{code}
// ************************************************************************ 
//
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL     : service.wsdl
//  >Import : service.wsdl>0
// Encoding : utf-8
// Codegen  : [wfUnwindLiteralParameters-]
// Version  : 1.0
// (12/13/2011 11:36:28 AM - - $Rev: 44408 $)
// ************************************************************************ 
//

unit service;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

const
  IS_OPTN = $0001;
  IS_UNBD = $0002;
  IS_UNQL = $0008;
  IS_REF  = $0080;


type

  // 
************************************************************************ //
  // The following types, referred to in the WSDL document are not being 
represented
  // in this file. They are either aliases[@] of other types represented or 
were referred
  // to but never[!] declared in the document. The types from the latter 
category
  // typically map to predefined/known XML or Embarcadero types; however, 
they could also
  // indicate incorrect WSDL documents that failed to declare or import a 
schema type.
  // 
************************************************************************ //
  // !:string          - "http://www.w3.org/2001/XMLSchema"[Gbl]

  ZmcsCustomer         = class;                 { 
"urn:sap-com:document:sap:soap:functions:mc-style"[GblCplx] }
  ZMymcsCustomersMultiResponse = class;         { 
"urn:sap-com:document:sap:soap:functions:mc-style"[GblElm] }
  ZMymcsCustomersMulti = class;                 { 
"urn:sap-com:document:sap:soap:functions:mc-style"[GblElm] }



  // 
************************************************************************ //
  // XML       : ZmcsCustomer, global, <complexType>
  // Namespace : urn:sap-com:document:sap:soap:functions:mc-style
  // 
************************************************************************ //
  ZmcsCustomer = class(TRemotable)
  private
    FName_: string;
    FStreet: string;
    FPostcode: string;
    FCity: string;
    FMessage_: string;
  published
    property Name_:    string  Index (IS_UNQL) read FName_ write FName_;
    property Street:   string  Index (IS_UNQL) read FStreet write FStreet;
    property Postcode: string  Index (IS_UNQL) read FPostcode write 
FPostcode;
    property City:     string  Index (IS_UNQL) read FCity write FCity;
    property Message_: string  Index (IS_UNQL) read FMessage_ write 
FMessage_;
  end;

  StringTable = array of string;                { 
"urn:sap-com:document:sap:soap:functions:mc-style"[GblCplx] }
  ZmcsCustomerInfoT = array of ZmcsCustomer;    { 
"urn:sap-com:document:sap:soap:functions:mc-style"[GblCplx] }


  // 
************************************************************************ //
  // XML       : ZMymcsCustomersMultiResponse, global, <element>
  // Namespace : urn:sap-com:document:sap:soap:functions:mc-style
  // 
************************************************************************ //
  ZMymcsCustomersMultiResponse = class(TRemotable)
  private
    FReturn: ZmcsCustomerInfoT;
    FTcustomers: StringTable;
  public
    destructor Destroy; override;
  published
    property Return:     ZmcsCustomerInfoT  Index (IS_UNQL) read FReturn 
write FReturn;
    property Tcustomers: StringTable        Index (IS_UNQL) read FTcustomers 
write FTcustomers;
  end;



  // 
************************************************************************ //
  // XML       : ZMymcsCustomersMulti, global, <element>
  // Namespace : urn:sap-com:document:sap:soap:functions:mc-style
  // 
************************************************************************ //
  ZMymcsCustomersMulti = class(TRemotable)
  private
    FCustomer: string;
    FCustomer_Specified: boolean;
    FReturn: ZmcsCustomerInfoT;
    FReturn_Specified: boolean;
    FTcustomers: StringTable;
    FTcustomers_Specified: boolean;
    procedure SetCustomer(Index: Integer; const Astring: string);
    function  Customer_Specified(Index: Integer): boolean;
    procedure SetReturn(Index: Integer; const AZmcsCustomerInfoT: 
ZmcsCustomerInfoT);
    function  Return_Specified(Index: Integer): boolean;
    procedure SetTcustomers(Index: Integer; const AStringTable: 
StringTable);
    function  Tcustomers_Specified(Index: Integer): boolean;
  public
    destructor Destroy; override;
  published
    property Customer:   string             Index (IS_OPTN or IS_UNQL) read 
FCustomer write SetCustomer stored Customer_Specified;
    property Return:     ZmcsCustomerInfoT  Index (IS_OPTN or IS_UNQL) read 
FReturn write SetReturn stored Return_Specified;
    property Tcustomers: StringTable        Index (IS_OPTN or IS_UNQL) read 
FTcustomers write SetTcustomers stored Tcustomers_Specified;
  end;


  // 
************************************************************************ //
  // Namespace : urn:sap-com:document:sap:soap:functions:mc-style
  // transport : http://schemas.xmlsoap.org/soap/http
  // style     : document
  // use       : literal
  // binding   : ZMCS_CUSTOMER_MULTI
  // service   : ZMCS_CUSTOMER_MULTI
  // port      : ZMCS_CUSTOMER_MULTI
  // URL       : http://localhost/zmcs_customer_multi
  // 
************************************************************************ //
  z_mcs_customers_multi = interface(IInvokable)
  ['{DDFC4969-7467-E4D1-D6A2-37D3C09C4750}']
    function  ZMymcsCustomersMulti(const parameters: ZMymcsCustomersMulti): 
ZMymcsCustomersMultiResponse; stdcall;
  end;

function Getz_mcs_customers_multi(UseWSDL: Boolean=System.False; Addr: 
string=''; HTTPRIO: THTTPRIO = nil): z_mcs_customers_multi;


implementation
  uses SysUtils;

function Getz_mcs_customers_multi(UseWSDL: Boolean; Addr: string; HTTPRIO: 
THTTPRIO): z_mcs_customers_multi;
const
  defWSDL = 'service.wsdl';
  defURL  = 'http://localhost/zmcs_customer_multi';
  defSvc  = 'ZMCS_CUSTOMER_MULTI';
  defPrt  = 'ZMCS_CUSTOMER_MULTI';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as z_mcs_customers_multi);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;


destructor ZMymcsCustomersMultiResponse.Destroy;
var
  I: Integer;
begin
  for I := 0 to System.Length(FReturn)-1 do
    SysUtils.FreeAndNil(FReturn[I]);
  System.SetLength(FReturn, 0);
  inherited Destroy;
end;

destructor ZMymcsCustomersMulti.Destroy;
var
  I: Integer;
begin
  for I := 0 to System.Length(FReturn)-1 do
    SysUtils.FreeAndNil(FReturn[I]);
  System.SetLength(FReturn, 0);
  inherited Destroy;
end;

procedure ZMymcsCustomersMulti.SetCustomer(Index: Integer; const Astring: 
string);
begin
  FCustomer := Astring;
  FCustomer_Specified := True;
end;

function ZMymcsCustomersMulti.Customer_Specified(Index: Integer): boolean;
begin
  Result := FCustomer_Specified;
end;

procedure ZMymcsCustomersMulti.SetReturn(Index: Integer; const 
AZmcsCustomerInfoT: ZmcsCustomerInfoT);
begin
  FReturn := AZmcsCustomerInfoT;
  FReturn_Specified := True;
end;

function ZMymcsCustomersMulti.Return_Specified(Index: Integer): boolean;
begin
  Result := FReturn_Specified;
end;

procedure ZMymcsCustomersMulti.SetTcustomers(Index: Integer; const 
AStringTable: StringTable);
begin
  FTcustomers := AStringTable;
  FTcustomers_Specified := True;
end;

function ZMymcsCustomersMulti.Tcustomers_Specified(Index: Integer): boolean;
begin
  Result := FTcustomers_Specified;
end;

initialization
  { z_mcs_customers_multi }
  InvRegistry.RegisterInterface(TypeInfo(z_mcs_customers_multi), 
'urn:sap-com:document:sap:soap:functions:mc-style', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(z_mcs_customers_multi), 
'');
  InvRegistry.RegisterInvokeOptions(TypeInfo(z_mcs_customers_multi), 
ioDocument);
  InvRegistry.RegisterInvokeOptions(TypeInfo(z_mcs_customers_multi), 
ioLiteral);
  RemClassRegistry.RegisterXSClass(ZmcsCustomer, 
'urn:sap-com:document:sap:soap:functions:mc-style', 'ZmcsCustomer');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ZmcsCustomer), 'Name_', 
'[ExtName="Name"]');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ZmcsCustomer), 
'Message_', '[ExtName="Message"]');
  RemClassRegistry.RegisterXSInfo(TypeInfo(StringTable), 
'urn:sap-com:document:sap:soap:functions:mc-style', 'StringTable');
  RemClassRegistry.RegisterXSInfo(TypeInfo(ZmcsCustomerInfoT), 
'urn:sap-com:document:sap:soap:functions:mc-style', 'ZmcsCustomerInfoT');
  RemClassRegistry.RegisterXSClass(ZMymcsCustomersMultiResponse, 
'urn:sap-com:document:sap:soap:functions:mc-style', 
'ZMymcsCustomersMultiResponse');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ZMymcsCustomersMultiResponse), 
'Return', '[ArrayItemName="item"]');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ZMymcsCustomersMultiResponse), 
'Tcustomers', '[ArrayItemName="item"]');
  RemClassRegistry.RegisterXSClass(ZMymcsCustomersMulti, 
'urn:sap-com:document:sap:soap:functions:mc-style', 'ZMymcsCustomersMulti');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ZMymcsCustomersMulti), 
'Return', '[ArrayItemName="item"]');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(ZMymcsCustomersMulti), 
'Tcustomers', '[ArrayItemName="item"]');

end.
{code}

Let me know if the above does not help.

Cheers,

Bruneau
0
Jean
12/13/2011 7:39:44 PM
Hello,

Since the issue of the importer unwrapping often confuses, I thought I'd use 
this opportunity to expand on that. Plus after looking closer at the WSDL 
you posted, I also believe that the importer unwrapped incorrectly. More on 
that later.

As mentioned on this link 
(http://atmanes.blogspot.com/2005/03/wrapped-documentliteral-convention.html 
 ), there's a convention used by doc|lit services that bridges the gap 
between document and RPC-styles interfaces.

In this particular case, the imported detected that:

1. The service is document|literal.

2. The part refers to elements (the wrapper elements):
{code}
  <wsdl:message name="ZMymcsCustomersMulti">
    <wsdl:part name="parameters" element="tns:ZMymcsCustomersMulti"/>
  </wsdl:message>
  <wsdl:message name="ZMymcsCustomersMultiResponse">
    <wsdl:part name="parameter" element="tns:ZMymcsCustomersMultiResponse"/>
  </wsdl:message>
{code}

3. The wrapper elements are defined as complex types:
{code}
      <xsd:element name="ZMymcsCustomersMulti">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="Customer" type="xsd:string" minOccurs="0"/>
            <xsd:element name="Return" type="tns:ZmcsCustomerInfoT" 
minOccurs="0"/>
            <xsd:element name="Tcustomers" type="tns:StringTable" 
minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
{code}

4. The name of the input wrapper matched that of the operation:
{code}
   <wsdl:operation name="ZMymcsCustomersMulti">
{code}

5. The name of the output wrapper matched that of the operation with the 
"Response" suffix.
{code}
      <xsd:element name="ZMymcsCustomersMultiResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="Return" type="tns:ZmcsCustomerInfoT"/>
            <xsd:element name="Tcustomers" type="tns:StringTable"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
{code}

So the importer decides that it will unwrap the wrapper elements and expose 
its elements as parameters. So the importer looks at the elements of the 
Input and Output. They are:

{code}
// Input
            <xsd:element name="Customer" type="xsd:string" minOccurs="0"/>
            <xsd:element name="Return" type="tns:ZmcsCustomerInfoT" 
minOccurs="0"/>
            <xsd:element name="Tcustomers" type="tns:StringTable" 
minOccurs="0"/>
// Output
            <xsd:element name="Return" type="tns:ZmcsCustomerInfoT"/>
            <xsd:element name="Tcustomers" type="tns:StringTable"/>
{code}

"Customer" is only in the input so it's made const. "Tcustomers" is in both 
the input and output, so it's marked as var. The problem is with "Return". 
The importer marked it as const and that's a bug because it's in both the 
input and output:

{code}
 z_mcs_customers_multi = interface(IInvokable)
  ['{DDFC4969-7467-E4D1-D6A2-37D3C09C4750}']
    procedure ZMymcsCustomersMulti(const Customer: string;
                                                             const Return: 
ZmcsCustomerInfoT;
                                                             var Tcustomers: 
StringTable); stdcall;
  end;
{code}

"Return" should also be var. The reason for the bug, I suspect, is because 
there's special logic that treats "Return" specially, since it's typically 
the only element of the output wrapper, specially for C++ Webservices where 
the keyword "return" is used to name the return value.

So typically whether to unwrap or not is a matter of style: more control 
when not unwrapping but have to deal with extra layer of indirection. But in 
this particular case, the unwrapping logic is not properly handling 
"Return". Any "Return" element sent back would be lost if the importer is 
allowed to unwrap. I'll enter a bug for this.

Cheers,

Bruneau
0
Jean
12/13/2011 8:10:30 PM
Thank you Jean-Marie Babet the web service works now thanks to your input.

And it actually was a rather simple solution.
0
Yoran
12/14/2011 2:40:11 PM
Reply:

Similar Artilces:

how to retrieve a value which is returned by a webservice method by using the webservice behavior
Hello Mate,                     I am using the webservice behavior to call a webservice method through internet. but i have a problem in getting a value which is returned from a webservice method. the jscript shown below is not working. Could u please help me in this ? This is my web method:<WebMethod(True)> _ Public Function add(ByVal a As Integer, ByVal b As Integer)Return a + b End Function  This is my jscript file: Function add() {  service.useService("GridTasks.a...

Delphi Webservice
Hello, I have created one webservice using indy TIdHTTPWebBrokerBridge and also created the client. Now I need to way to pass some file which will be reside on my server path to the client thorugh SOAP. The picture is as follows: 1) I have some fastreport files on the server 2) The client will show those report on the client side. There will be no fr3 files in the client side. Also I don't want to use FastReport Client/Server technology, as my client does not want this. 3) I don't want to save the fr3 files in the client side also. How to call this report from Client...

SOAP webservice in Delphi. Best option?
Hello all, I need to implement a SOAP web service in Delphi (it will be an ISAPI) that will be under heavy load (=many concurrent calls). I'd like to know which would be the best ISAPI/SOAP framework available. My web service must do some very "expensive" initialization (load some huge XML files that cannot be shared between threads) and it would be nice if I could re-use those resources again in the next call, so it would be very nice if the framework could do thread pooling. Also, is the Delphi soap server wizard still "current", or is it deprecated? Kin...

Delphi 2010 webservice consumer pass null strings to webservice [Edit]
Hello, I need to consume a webservice that is developed in java ( thas all that I know ). I have a HTTPRIO componente and have import the webservice file win the WSDL importer. Til here everything is allright but when I run the application all the parameters reach the webservice as null. I have made some webservice and consumers but I never have had problems ( I make the server and the client ) I test to do the same with prism and c++ bilder and it go allright, but I need it to do in delphi Thanks PD: Pleas be patient, my English is not good Edited by: Adrian Zussino on Sep 8, 2010 3...

Delphi SOAP (WebServices) demos are back on CodeCentral!
Anybody doing WebServices/SOAP programming on delphi who remembers the Delphi 2007 era demos, might be happy to know that I've fixed them up and posted them on CodeCentral. Since that code belongs to Embarcadero, I'd like to thank Embarcadero for giving permission to me to post this code on CodeCentral: http://cc.embarcadero.com/item/28789 Anybody who has bug reports for this code can email me at warren dot postma at gmail dot com. It is possible that I might set up a version control system (bitbucket) if that's needed, and if Embarcadero has no problem with that. I w...

How to recover a SOAP Header in a Delphi Win32 WebService?
I'm trying to implement authentication across of SOAP header in my webservice. The WebService is developed in Delphi XE (Win32) and is accessed by application an .NET (C #). I could not find documentation and working examples of a webservice with this type of authentication.The other option would be to create parameters in all functions of the webservice passing the username and password, but would not want to do this. Declared in the interface (INTF) a class of type "TSoapHeader" with the properties you need in this case, username and password! {code} THeader = class(...

Delphi Webservices Application
I am trying to run a webservice client on Windows XP that accesses a server on windows server 2003. I get the following error: "Receieved content of invalid Content-Type setting: text/html - SOAP expects text/xml" when I call a function on the server. I don't get this error if both the server and client are running under windows xp. I have compiled both the client and server on windows XP with Delphi 7. What could be the cause of the error? Pier Pier Nardin wrote: > I am trying to run a webservice client on Windows XP that accesses a > server on windows s...

return more than value from webservice
Hi I have a webservice that first of all return a string value, then I would like to return a boolean value which is set after the initial function is ran. But this boolean value never changes. Is it possible at all to return more than one value from a webservice?    hi modig, As you told first you want to return a string and then you wan to send a boolen value which  is set after the initial function is ran. So, can you write another function that return an arraylist object. The another function will run after the initial function finishes running. ...

Webservice returns a valid SOAP response but proxy returns null
Hi, We've been having real trouble consuming a webservice on an Apache server in C#, I've scoured the various forum posts discussing a dodgy namespace, casing and updating the OperationContractAttribute attribute but none of them seem to fit (unless I'm missing something). From what I can see, it all looks fine so I was wondering if anyone else could shed any light on what we're missing. The platform is C# .Net 3.5, I'm working in Visual Studio 2008 SP1 and have been inspecting the response using Fiddler 2. I've uploaded the WSDL (with the end point r...

Delphi Webservices application #2
I have written a CGI webserver and client with Delphi 7 that work fine in windows XP, but not in windows server 2003. When I type the server's address into internet explorer on the windows 2003 server machine I cannot read the WSDL interfaces for the server using internet explorer. However, I can read them on another XP machine. So, I tried writing the server as an ASAPI dll. I can now read the WSDL interfaces for the server using internet explorer. However, the client application does not work with the ASAPI server. I get the following error: "Received content of inval...

Deploy WebService from Delphi XE2
Hi, I was develop WebService in RAD Studio XE2 (CGI standalone app) and after development procedure (copy webservice module and midas.dll) server raise me an error: -- Sasa Mihajlovic --- Life is to short to be boring, keep smiling... HTTP Error 404.3 - Not Found The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map. Module StaticFileModule Notification ExecuteRequestHandler Handler StaticFile Error Code 0x80070032 Requested URL http://www.msdaio.c...

Secure the data in XML (returned by a webservice) during Webservice calls
          My website has a flash object which call a webserviec which returns a xml back to flash.  How can i secure the data which is passed through the XML.  That is I dont want any users read the xml which i am giving to falsh object using any tools like fiddler, fire bug etc... Please give me your valuable suggestions and IdeasRegards    Hi, check this URL regarding secured web service   http://msdn2.microsoft.com/en-us/library/aa302428.aspx...

Delphi and Delphi for .Net
It seems that Delphi for .Net is slower than Delphi Win32 native applicaiton. I would like to know is it true all .Net application is slower than Win32 native applicaiton or it is Delphi for .Net only. Your information is great appreciated, Inung On 2011-06-21 18:20:17 +0100, Inung Huang said: > It seems that Delphi for .Net is slower than Delphi Win32 native applicaiton. > I would like to know is it true all .Net application is slower than > Win32 native applicaiton or it is Delphi for .Net only. If you are only running the code in the application once then, yes, yo...

Delphi 2007
Hello, I have a problem, I think Delphi generates the body of a request false. [code] <SOAP-ENV:Body> <sucheStrasseByPLZPattern xmlns="http://lallaaallaaaa.info"> <pattern> <hausnummer xmlns=""/> <ort xmlns=""/> <ortteil xmlns=""/> <plz xmlns="">03048</plz> <strasse xmlns="">Kiefer</strasse> <zone xmlns=""/> </pattern> </sucheStrasseByPLZPattern> </SOAP-ENV...

problem with returning values in webservice
hello i have a web method which returns an array of decimal,and i call it in java script function, is there anyway to return different types in return? ive tried to return a class but in java script i couldnt get results,also what should i do if i have a data-table as result which has different dimension everytime, this is java functionfunction load2me() { read_location.GetLocation(onSuccessme,onError); } ------------------------------------------------------------------------------------function onSuccessme(result){ var lon = result[0]; var lat = result[1]; var speed=result[2]; ...

Web resources about - Delphi - SAP SOAP WebService no return values - embarcadero.delphi.webservices

webservices Articles, Posts, Blogs, Videos - Technorati
— Authority: The job consist in a PHP program that read a file, compose a message (email or sms) and call an API of email provider (Amazon SES) ...

Section: software:webservices
Wired.com © 2012 Condé Nast. All rights reserved. Use of this Site constitutes acceptance of our User Agreement (effective 3/21/12) and Privacy ...

Products - CrunchBase
Product profiles

App Search on Flickr - Application Sharing!
Flickr is almost certainly the best online photo management and sharing application in the world. Show off your favorite photos and videos to ...

Wikipedia:Press coverage 2005 - Wikipedia, the free encyclopedia
If you add an article, please cite both the title and the source. Note that if you're listing an article from a traditional press wire service ...

Entity–relationship model - Wikipedia, the free encyclopedia
In software engineering , an entity-relationship model ( ER model for short) is an abstract and conceptual representation of data . Entity-relationship ...

Entity-relationship model - Wikipedia, the free encyclopedia
In software engineering , an entity-relationship model ( ER model for short) is an abstract and conceptual representation of data . Entity-relationship ...

IT and Telecommunications Jobs in Melbourne Metro - MyCareer
Find IT and Telecommunications Jobs in Melbourne Metro on MyCareer. Fresh IT and Telecommunications Jobs posted daily. Free email alerts and ...

AWS Elastic Beanstalk: A Quick and Simple Way into the Cloud
Flexibility is one of the key principles of Amazon WebServices - developers can select any programming language and software package,any operating ...

How To Use the Amazon SDK for Android to Upload Photos to Amazon S3
This article demonstrates how to use the AWS SDK for Android to upload an image to Amazon Simple Storage Service (S3) from your mobile device ...

Resources last updated: 12/13/2015 10:02:12 PM