Saltar al contenido principal
Versión: 20 R7 BETA

SOAP DECLARATION

SOAP DECLARATION ( variable ; tipo ; entrada_salida {; alias} )

ParámetroTipoDescripción
variableVariableVariable que referencia un argumento SOAP entrante o saliente
tipoIntegerTipo 4D al cual apunta el argumento
entrada_salidaInteger1 = Entrada SOAP, 2 = Salida SOAP
aliasTextNombre publicado para este argumento durante los intercambios SOAP

Descripción

El comando SOAP DECLARATION permite declarar explícitamente el tipo de los parámetros utilizados en un método 4D publicado como servicio web.

Cuando se publica un método como servicio web, los parámetros estándar $0, $1... $n se utilizan para describir los parámetros del servicio web al mundo exterior (más particularmente en el archivo WSDL). El protocolo SOAP necesita que los parámetros sean nombrados explícitamente; 4D utiliza por defecto los nombres “FourD_arg0, FourD_arg1 ... FourD_argn”.

Este funcionamiento por defecto puede ser problemático por las siguientes razones:

  • No es posible declarar $0 o $1, $2, etc. como un array. Por lo tanto, es necesario utilizar punteros; sin embargo, en este caso, es necesario conocer el tipo de los valores para la generación del archivo WSDL.
  • Luego, puede ser útil o necesario personalizar los nombres de los parámetros (entrantes y salientes).
  • Si lo desea, puede utilizar parámetros como las estructuras XML y referencias DOM.
  • Igualmente, es necesario devolver los valores de un tamaño superior a 32 KB (limite de los argumentos de tipo Texto).
  • Por último, este funcionamiento hace imposible devolver más de un valor por llamada RPC (en $0).

El comando SOAP DECLARATION le permite liberar estos límites. Puede ejecutar este comando para cada parámetro entrante y saliente y asignarle un nombre y un tipo.

Nota: incluso si se utiliza el comando SOAP DECLARATION, siempre es necesario declarar las variables y los arrays 4D ven el método Compiler_Web utilizando los comandos del tema “Compilador”.

En variable, pase la variable 4D a referenciar cuando llame al servicio web.

Advertencia: puede referenciar únicamente las variables proceso o los argumentos de los métodos 4D ($0 a $n). Las variables locales e interproceso no pueden utilizarse.

Por defecto, como sólo pueden utilizarse los argumento de tipo texto, las respuestas del servidor SOAP están limitadas a 32 KB. Sin embargo, es posible devolver argumentos SOAP con un tamaño mayor a 32 KB, utilizando BLOBs. Para exceder este límite, simplemente necesita declarar los argumentos como BLOBs antes de llamar al comando SOAP DECLARATION (ver ejemplo 4).

Notas:

  • Del lado del cliente, si suscribe este tipo de servicio web con 4D, el asistente de servicios web generará naturalmente una variable de tipo Texto en el método proxy. Para poder utilizarla, sólo necesita digitar nuevamente esta variable como un BLOB en el método proxy.
  • Este comando no soporta objetos blob (tipo 4D.Blob). Ver Pasar blobs y objetos blob a comandos 4D en developer.4d.com.

En tipo, pase el tipo 4D correspondiente. Pueden ser utilizados la mayoría de los tipos de variables y arrays 4D. Puede utilizar las siguientes constantes predefinidas, ubicadas en el tema “Servicios Web (Servidor)”:

ConstanteTipoValor
Is realEntero largo1
Is textEntero largo2
Is dateEntero largo4
Is BooleanEntero largo6
Is integerEntero largo8
Is longintEntero largo9
Is timeEntero largo11
Real arrayEntero largo14
Integer arrayEntero largo15
LongInt arrayEntero largo16
Date arrayEntero largo17
Text arrayEntero largo18
String arrayEntero largo21
Boolean arrayEntero largo22
Is string varEntero largo24
Is BLOBEntero largo30
ConstanteTipoValor
Is XMLEntero largo36
Is DOM referenceEntero largo37

En entrada_salida, pase un valor indicando si el parámetro procesado es “entrante” (es decir corresponde a un valor recibido por el método) o “saliente” (por ejemplo corresponde a un valor devuelto por el método). Puede utilizar las siguientes constantes predefinidas, ubicadas en el tema “Servicios Web (Servidor)”:

ConstanteTipoValor
SOAP inputEntero largo1
SOAP outputEntero largo2
Utilización de tipos XML

Puede declarar las variables de tipo "estructura XML" y "DOM reference", de entrada y salida, vía las constantes Is XML y Is DOM reference. Cuando los parámetros de este tipo son definidos, no se aplica ningún proceso ni codificación y los datos se trasmiten "tal cual" (ver ejemplo 5).

  • Parámetros de salida - Is XML indica que el parámetro contiene una estructura XML,
    - Is DOM reference indica que el parámetro contiene la referencia DOM de una estructura XML. En este caso, la inserción de la estructura XML en el mensaje SOAP es
    equivalente a ejecutar el comando DOM EXPORT TO VAR.

Nota: en el caso de las referencias DOM utilizadas como parámetros de salida, se recomienda utilizar las referencias globales, creadas, por ejemplo, al inicio o al cierre de la aplicación. De hecho, una referencia DOM creada dentro del mismo servicio web no puede cerrarse conDOM CLOSE XML, de lo contrario el servicio web no devuelve nada. Las llamadas múltiples al servicio web implican por lo tanto la creación de múltiples referencias DOM no cerradas, las cuales pueden provocar una saturación de la memoria.

  • Parámetros de entrada

- Is XML indica que el parámetro debe recibir un argumento XML enviado por el cliente SOAP.
- Is DOM reference indica que el parámetro debe recibir la referencia DOM de una estructura XML correspondiente al argumento XML enviado por el cliente SOAP**.**

  • Modificación del WSDL

Las estructuras XML serán declaradas por 4D como "anyType" (tipo indeterminado) en el WSDL. Si quiere dar un tipo preciso a una estructura XML, debe guardar el archivo WSDL y añadir manualmente el esquema de datos que quiere en la sección del WSDL.

Método COMPILER_WEB

Los argumentos SOAP entrantes referenciados con la ayuda de variables 4D (y no por los argumentos de métodos 4D) deben ser declarados primero en el método de proyecto COMPILER_WEB. De hecho, el uso de variables de proceso en los métodos Web Services necesitan ser declaradas antes de la llamada al método. Se llama el método de proyecto COMPILER_WEB, si existe, para cada petición SOAP aceptada. Por defecto, el método COMPILER_WEB no existe. Usted debe crearlo específicamente.

Note que el método COMPILER_WEB también es llamado por el servidor web de 4D durante la recepción de peticiones web “convencionales” de tipo POST (ver la sección URLs y acciones de formularios).

En alias, pase el nombre del argumento que debe aparecer en WSDL y en los intercambios SOAP.

Advertencia: este nombre debe ser único en la llamada RPC (parámetros entrantes y salientes), de lo contrario, sólo la última declaración será tenida en cuenta por 4D.

Nota: los nombres de los argumentos no deben comenzar por un número ni contener espacios. Además, para evitar riesgos de incompatibilidad, se recomienda no utilizar caracteres extendidos (tales como caracteres con acentos).
Si se omite el parámetro alias, 4D utilizará, por defecto, el nombre de la variable o FourD_argN para los argumentos de los métodos 4D ($0 a $n).

Nota: el comando SOAP DECLARATION debe estar incluido en el método publicado como servicio web. No es posible llamarlo desde otro método.

Ejemplo 1

Este ejemplo especifica un nombre de parámetro:

  // En el método COMPILER_WEB
 var $1 : Integer
 
  // En el método del servicio Web
  // Durante la generación del archivo WSDL y las llamadas SOAP, la palabra
  // zipcode se utilizará en lugar de fourD_arg1
 SOAP DECLARATION($1;Is longint;SOAP input;"zipcode")

Ejemplo 2

Este ejemplo se utiliza para recuperar un array de códigos postales en forma de enteros largos:

  //En el método COMPILER_WEB
 ARRAY LONGINT(codes;0)
 
  //En el método del servicio Web
 SOAP DECLARATION(codes;LongInt array;SOAP input;"in_codes")

Ejemplo 3

Este ejemplo se utiliza para referenciar dos valores devueltos sin especificar un nombre de argumento:

 SOAP DECLARATION(ret1;Is longint;SOAP output)
 SOAP DECLARATION(ret2;Is longint;SOAP output)

Ejemplo 4

Este ejemplo permite al servidor 4D SOAP devolver un argumento de un tamaño mayor a 32 KB:

 var $0 : Blob
 SOAP DECLARATION($0;Is text;SOAP output)

Note el tipo Is Text (y no Is BLOB). Esto permite que el argumento sea procesado correctamente.

Ejemplo 5

Este ejemplo illustra los resultados de los diferentes tipos de declaraciones:

 ALL RECORDS([Contactos])
 
  //Construcción de una estructura XML de la selección de contactos y almacenar el XML en un BLOB
 var ws_vx_xmlBlob : Blob
 obtenerContactosXML(->ws_vx_xmlBlob)
  //Recuperar la estructura XML en una variable de tipo texto
 var ws_vt_xml : Text
 ws_vt_xml:=BLOB to text(ws_vx_xmlBlob;UTF8 text without length)
  //Recuperar una referencia DOM a la estructura XML
 var ws_vt_xmlRef : Text
 ws_vt_xmlRef:=DOM Parse XML variable(ws_vt_xml)
 
  //Prueba las diferentes declaraciones
 SOAP DECLARATION(ws_vx_xmlBlob;Is BLOB;SOAP output;"contactListsX")
  //El XML se convierte en Base64 por 4D
 
 SOAP DECLARATION(ws_vt_xml;Is text;SOAP output;"contactListsText")
  //El XML se convierte en texto por 4D (< > become entities)
 
 SOAP DECLARATION(ws_vt_xml;Is XML;SOAP output;"xmlContacts")
  //El XML se pasa a texto XML
 
 SOAP DECLARATION(ws_vx_xmlBlob;Is XML;SOAP output;"blobContacts")
  //El XML se pasa a un blob XML
 
 SOAP DECLARATION(ws_vt_xmlRef;Is DOM reference;SOAP output;"contactByRef")
  //El XML se pasa como una referencia

Ver también

Is data file locked
SOAP get info
SOAP SEND FAULT