Ir al contenido

SageX3Soap

Ejecuta operaciones en Sage X3 a través de sus Web Services SOAP (protocolo CAdxWebServiceXmlCC). Cada llamada incluye autenticación HTTP Basic Auth y la cabecera SOAPAction requerida por el servidor Syracuse.

El nodo realiza una doble validación XML:

  1. Antes de enviar — verifica que el objectXml de entrada sea XML bien formado y no contenga caracteres de control prohibidos.
  2. Después de recibir — detecta SOAP Fault de protocolo y errores de aplicación Sage X3 (status != 1 en el response).

Si cualquiera de las dos validaciones falla, el nodo sale por el conector de error con el detalle del problema.

CampoTipoRequeridoDescripción
credentials_idcredentialsSiCredencial Sage X3 SOAP (ver abajo)
operationselectNoOperación SOAP: run, read, save, modify, delete, query. Default: run
public_nametextSiNombre del web service publicado en Sage X3 (ej: YBONIWS)
object_xmltextareaNoXML de negocio a enviar (objectXml). Si vacío, usa data[data_key] o el data completo
data_keytextNoCampo del data del nodo anterior que contiene el XML a enviar
languagetextNoCódigo de idioma para el callContext (default: ENG)
request_configtextNoOpciones de respuesta Sage X3 (default: adxwss.optreturn=JSON&adxwss.beautify=true)
timeouttextNoTimeout de la solicitud HTTP en milisegundos (default: 30000)

Crear una credencial de tipo sageX3Soap con los siguientes campos:

CampoDescripciónEjemplo
usernameUsuario Sage X3web
passwordContrasenaweb
urlEndpoint SOAP completohttp://server:8124/soap-generic/syracuse/collaboration/syracuse/CAdxWebServiceXmlCC
pool_aliasPool alias de la administración SyracusePOOL
OperaciónDescripción
runEjecutar un subprograma Sage X3
readLeer un registro por clave
saveCrear un registro nuevo
modifyModificar un registro existente
deleteEliminar un registro
queryConsultar una lista de registros
Content-Type: text/xml; charset=UTF-8
Authorization: Basic <base64(username:password)>
SOAPAction: "urn:CAdxWebServiceXmlCC#run"

El SOAPAction cambia automáticamente según la operación seleccionada.

Antes de construir el SOAP Envelope, el nodo verifica el objectXml:

  • Si esta vacío → valido (operaciones read/query pueden no necesitar XML)
  • Si no es string → error
  • Si contiene caracteres de control prohibidos en XML 1.0 (\x00–\x08, etc.) → error
  • Si el XML esta mal formado (parseo fallido) → error con descripción del problema

Después de recibir la respuesta de Sage X3:

  • Respuesta vacía → error EMPTY_RESPONSE
  • <soapenv:Fault> en la respuesta → error con faultCode y faultString
  • status != 1 en el return de Sage → error SAGE_STATUS_N con el detalle
{
"sage_response": {
"status": "success",
"result": {
"GRP": {
"FLD": [
{ "@_NAME": "SALFCY", "#text": "SIT" },
{ "@_NAME": "BPRNUM", "#text": "CS001" }
]
}
},
"messages": []
}
}

El campo result contiene el resultXml de Sage X3. Si request_config incluye adxwss.optreturn=JSON, el resultado ya viene parseado como objeto JSON. Si no, es un string XML.

{
"error": {
"message": "Sage X3 error [SOAP_FAULT]: The server cannot service the request",
"faultCode": "SOAP_FAULT",
"faultString": "The server cannot service the request",
"detail": null
}
}
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wss="http://www.adonix.com/WSS">
<soapenv:Header/>
<soapenv:Body>
<wss:run soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<callContext xsi:type="wss:CAdxCallContext">
<codeLang>ENG</codeLang>
<poolAlias>POOL</poolAlias>
<poolId xsi:nil="true"/>
<requestConfig><![CDATA[adxwss.optreturn=JSON&adxwss.beautify=true]]></requestConfig>
</callContext>
<publicName xsi:type="xsd:string">YBONIWS</publicName>
<objectXml xsi:type="xsd:string"><![CDATA[
<PARAM><FLD NAME="SALFCY">SIT</FLD></PARAM>
]]></objectXml>
</wss:run>
</soapenv:Body>
</soapenv:Envelope>

Configuración del nodo:

{
"credentials_id": "12",
"operation": "read",
"public_name": "BPCUSTOMER",
"object_xml": "<PARAM><GRP ID=\"BPC0\"><FLD NAME=\"BPCNUM\">CS001</FLD></GRP></PARAM>",
"language": "ENG",
"request_config": "adxwss.optreturn=JSON&adxwss.beautify=true"
}

Configuración del nodo:

{
"credentials_id": "12",
"operation": "run",
"public_name": "YBONIWS",
"data_key": "xml_sage",
"language": "ENG"
}

El XML se lee del campo xml_sage del data del nodo anterior.

  • El objectXml se envuelve en <![CDATA[...]]> automáticamente dentro del SOAP Envelope para evitar colision con caracteres especiales XML
  • El endpoint WSDL para obtener el esquema de los web services es: http://server:port/soap-wsdl/syracuse/collaboration/syracuse/CAdxWebServiceXmlCC?wsdl
  • Sage X3 requiere que event_scheduler este habilitado en Syracuse para procesar las peticiones
  • Si request_config no incluye adxwss.optreturn=JSON, el campo result de la salida será un string XML que deberá procesarse con el nodo XmlToJson
  • SageCreateDocument — Crear documento fiscal en Sage X3 via SQL Server
  • XmlToJson — Convertir respuesta XML a JSON
  • JsonToXml — Construir el objectXml desde un objeto JSON
  • HTTP — Llamadas HTTP genericas con cabeceras personalizadas