Publicar y Consumir Servicios Web

El consumo y publicación de servicios web en Siebel en realidad es bastante sencillo. Por su puesto, uno debe tener claros algunos conceptos básicos sobre este tipo de tecnología.

He aquí algunos enlaces de interés para reforzar esos conceptos:

Validación XML

SOAP

WSDL

Una vez que hemos refrescado nuestros conceptos podemos comenzar con el taller. Los siguientes ejemplos fueron construidos en Siebel 7.7, pero en las versiones posteriores es muy parecido. Quizá más adelante pueda publicar un ejemplo construido en Siebel 8.1.

Publicar un Servicio Web en Siebel

Esto permitirá a otras aplicaciones consumir servicios que Siebel provee.

Crear un nuevo Bussines Service, para efectos del ejemplo llamado “MyBusiness Service”, que posea las siguientes propiedades:

Nombre 

Valor 

Descripción 

Name

MyBusinessService

Nombre del Servicio

Class 

CSSService 

Clase por defecto para un servicio a la medida.

Project 

MyProject 

Proyecto al que pertenece, siempre se recomienda crear proyectos nuevos para desarrollos a la medida.

Display Name – String Override 

MyBussinessService 

Nombre de despliegue, visible para uso externo.

External Use

 

Permite llamar al servicio desde un script o desde el simulador.

Server Enabled

 

Habilitado para correr en el servidor, siempre se debe marcar cuando se trata de un Servicio Web.

Hidden

 

No se debe marcar, de lo contrario no será visible para llamados.

Tabla 1. Propiedades del Business Service.

Ilustración 1. Business Service en Siebel Tools.

Crear el método que será la operación del Web Service, en este ejemplo llamado “MyMethod”, con las siguientes propiedades:

Nombre 

Valor 

Descripción 

Name

MyMethod

Nombre del método.

Display Name – String Override 

MyMethod 

Nombre de despliegue, visible para uso externo.

Hiden

 

No debe tener marcada la opción para que sea visible.

Tabla 2. Propiedades del método.

Ilustración 2. Método en Siebel Tools.

Los Business Service que serán publicados como Servicios Web deben tener al menos un argumento de entrada. Para efectos de este ejemplo, el argumento funciona tanto de entrada como de salida.

Nombre 

Valor 

Descripción 

Name

msg

Nombre del argumento

Data Type 

String

Tipo de dato del argumento.

Type 

Input/Output

Puede ser solo de entrada, solo de salida o de entrada y salida.

Storage Type 

Property

Tipo a nivel de estructura de datos de Siebel, propiedad, jerarquía, etc. 

Optional 

 

Si está marcado, el argumento puede venir o no venir. Si está desmarcado el argumento debe venir siempre, aunque su valor sea nulo.

Hidden 

 

Si no está marcado, el objeto está visible externamente.

Display Name – String Override 

msg

Nombre de despliegue, visible externamente.

Tabla 3. Propiedades del argumento

Ilustración 3. Argumento en Siebel Tools.

Hacer clic derecho sobre el Business Service e ingresar al editor de eScript para codificar la lógica de la operación. En la función Service_PreInvokeMethod se debe hacer el llamado a nuestra función “MyMethod”, en este caso el código es:

function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{
    if (MethodName == “MyMethod”){
        MyMethod(Inputs, Outputs);
        return(CancelOperation);
    }
    return (ContinueOperation);
}

Ilustración 4. Código de la función Service_PreInvokeMethod

Luego se escribe el código de la función como tal, en este caso responde que ha recibido el mensaje X:

function MyMethod (Inputs, Outputs)
{
    var msg;
    try{
    msg = “Message received: ” + Inputs.GetProperty(“msg”);
}
    catch(exception){
        msg = exception.toString();
    }
    Outputs.SetProperty(“msg

“,msg);
}

Ilustración 5. Código de la función MyMethod.

NOTA: Es decir que si Siebel recibe como mensaje Hola, responderá Message received: Hola. Tener esto en cuenta en la sección de pruebas.

Cerrar el editor y compilar el objeto en el archivo srf.

Bajar el servicio de Siebel y colocar el archivo srf actualizado en la carpeta donde está apuntando el cliente web.

Subir el servicio de Siebel nuevamente. Cuando haya terminado, ingresar a la aplicación en Administración de Servicios Web > Inbound (de Entrada)

En el applet superior, crear un registro nuevo con las siguientes propiedades:

Nombre 

Valor 

Descripción 

Espacio de nombres

http://siebel.com/asi/

El llamado “NameSpace”, esto es el ámbito donde funciona la nomenclatura definida en el esquema XML, para resolver problemas de ambigüedad en nombres y otro tipo de conflictos.

Nombre

GFSJ MyBusinessService

Nombre del puerto de servicio.

Estado 

Activo

Debe estar activo para que funcione.

Tabla 4. Propiedades del Servicio en la aplicación.

Luego en el applet del medio crear un registro nuevo con las siguientes propiedades:

Nombre 

Valor 

Descripción 

Nombre

MyBusinessService

En este caso el nombre del Business Service, pero podría ser el nombre de un Workflow.

Tipo

Business Service

Aparece un PickApplet. Si la opción deseada no aparece en el listado, el botón “Nuevo” lanza una caja de diálogo para poder introducir el nombre del Business Service o Workflow deseado.

Nombre de Business Service/Flujo de trabajo 

MyBusiness Service

De nuevo, el nombre del Business Service/Workflow.

Transporte 

HTTP

Para este ejemplo usaremos HTTP, pero en otros casos también se pueden usar los transportes: MQ, MSMQ, JMS o Servicio Web Local.

Dirección 

http://10.1.1.14
eai_esn/start.swe?
SWEExtSource=SecureWebService
&SWEExtCmd=Execute
&UserName=SADMIN

&Password=SADMIN

Todo pegado y sin saltos de línea. El formato para http es:

http://<server>/eai_<lang>/start.swe?
SWEExtSource=SecureWebService&

SWEExtCmd=Execute&UserName=<login>

&Password=<password>

Enlace 

SOAP_DOC_LITERAL

Se pueden usar también:

SOAP_RPC_LITERAL

SOAP_RPC_ENCODED 

Tabla 5. Propiedades del puerto de servicio.

NOTA: Para el Enlace la versión 7.7 soporta los estilos RPC_Encoded, RPC_Literal, DOC_Literal, y Property Set. El enlace Property Set debería ser usado cuando el Property Set de entrada al servicio de proxy es remitido sin cambios en la dirección de destino. Esto se prevee primordialmente para su uso en combinación con transportes de Workflows o Business Services locales para evitar saturar el procesamiento de XML.

En el applet inferior crear un nuevo registro con las siguientes propiedades:

Nombre 

Valor 

Descripción 

Nombre

MyMethod

Nombre del método del Business Service.

Nombre visible del método

MyMethod

Nombre que se configuró como visible a nivel externo.

Autenticación 

Ninguna

Para otros casos puede usarse usuario y contraseña. Ver la sección de seguridad.

Tabla 6. Propiedades de la operación.

Ilustración 6. Configuración del Servicio en la aplicación Siebel.

Hacer clic en el botón “Vaciar caché” (esto publica el servicio). Luego hacer clic en el botón “Generar WSDL” y guardar el archivo como WSDL. Con este archivo las aplicaciones externas podrán acceder al servicio.

Consumir Servicio Web de Siebel con una aplicación externa

Desde el sistema que va a consumir el Servicio Web, importar el WSDL generado por Siebel para que pueda invocar el servicio.

Enviar la solicitud al servicio. Para este ejemplo se usó la aplicación SOAPSonar que generó el siguiente mensaje de solicitud:

<?xml version=”1.0″ encoding=”utf-8″?>
<
soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/&#8221; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xmlns:xsd=”http://www.w3.org/2001/XMLSchema&#8221; xmlns:tns=”http://siebel.com/asi/”&gt;

<soap:Body>

<tns:MyBusinessService_MyMethod_Input>

<tns:msg>Hola Siebel!</tns:msg>

</tns:MyBusinessService_MyMethod_Input>

</soap:Body>
</
soap:Envelope>

Ilustración 7. Solicitud en SoapSonar.

Se obtiene la respuesta. Para el ejemplo se envió el mensaje: Hola Siebel!, entonces debe obtenerse como respuesta lo que se codificó que Siebel respondiera: Message received: Hola Siebel!, que de hecho resultó correcto:

<?xml version=”1.0″ encoding=”UTF-8″?>
<
SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/&#8221; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xmlns:xsd=”http://www.w3.org/2001/XMLSchema”&gt;

<SOAP-ENV:Body>

<ns:MyBusinessService_MyMethod_Output xmlns:ns=”http://siebel.com/asi/”&gt;

<ns:msg>Message received: Hola Siebel!</ns:msg>

</ns:MyBusinessService_MyMethod_Output>

</SOAP-ENV:Body>
</
SOAP-ENV:Envelope>

Ilustración 8. Respuesta recibida.

  1. Consumir un Servicio Web externo en Siebel

    Pre-requisito: Tener el archivo WSDL del Servicio Web publicado por el sistema externo.

    En Siebel Tools hacer clic en el menú File > New. En la ventana emergente seleccionar la pestaña EAI con la opción Web Service.

    Se inicia un Asistente en el que hay que seleccionar un proyecto e indicarle:

    1. La ruta del archivo WSDL del Servicio Web externo.
    2. La ruta donde generará el archivo XML, que se debe importar luego para crear el puerto de servicio desde la aplicación.
    3. La ruta donde generará el archivo de log, que indica si generó Integration Objects u otros objetos.

    Modificar las rutas si no se desean las que pone por defecto y hacer clic en el botón “Siguiente”. Se presenta una pantalla de confirmación, hacer clic en el botón “Finalizar”.

    El asistente crea un Business Service de clase CSSWSOutboundDispatcher. Dependiendo de la complejidad de los argumentos en las operaciones, podría crear también otros objetos que deberán ser compilados. Además crea un archivo xml en la ruta indicada al inicio del Wizard, este contiene información de tiempo de ejecución acerca del WS que será importada luego como puerto de servicio.

    Detener el Servicio de Siebel y compilar los objetos creados en el archivo .srf. Poner el srf actualizado en la carpeta del server y subir de nuevo el Servicio de Siebel.

    Ingresar en la aplicación y navegar a Administración de Servicios Web > Outbount (de Salida)

    Hacer clic en el botón “Importar”. En la ventana de dialogo hacer clic en el botón “Examinar”, luego abrir el archivo generado por el Wizard de Tools.

    Una vez generado el puerto de servicio con el archivo importado, hacer clic en el botón “Vaciar caché“.

    El servicio
    está listo para ser llamado por medio del Business Service que generó el asistente desde script, workflow, runtime event, etc. Es decir, se llama como si fuera un Business Service normal de Siebel.

    Para una prueba breve el Ingresar a Administración de Procesos de Negocio > Simulador. En el applet superior crear un nuevo registro con las siguientes propiedades:

    Nombre 

    Valor 

    Descripción 

    Nombre de servicio

    ConsultaGenerica

    Nombre del proxy BS generado por el Wizard de Tools con base en el WSDL.

    Nombre del método

    Consulta

    Nombre del método que se desea probar, puede ser cualquier otro que pertenezca al BS.

    Tabla 7. Llamado al servicio y a la función.

    Luego en el applet central crear un registro con las siguientes propiedades:

    Nombre 

    Valor 

    Descripción 

    Nombre de la propiedad

    ConsultaGenerica_Consulta_Input:idType

    ConsultaGenerica _Consulta_Input:Id_Number

    Campo multivalor, con un PickApplet de lista en el que se ingresan las propiedades.

    Valor de la propiedad

    PASAPORTE

    12345678

    Los valores se configuran en el PickApplet del campo anterior.

    Tabla 8. Argumentos de entrada.

    Luego hacer clic en el botón “Ejecutar” y esto generará un registro en el applet inferior, que en la columna Valor de la propiedad mostrará el mensaje devuelto por el servicio, en este caso el mensaje fue:

    <?xml version=”1.0″ encoding=”UTF-8″?>
    <?Siebel-Property-Set EscapeNames=”true”?>
    <PropertySet>

    <
    Registro Error_undSist=”Contacto no disponible Code_undError=”00006“>

    </
    Registro>
    </
    PropertySet>

    Para el caso del servicio externo que se estaba probando, el mensaje “Contacto no disponible” es una respuesta válida, por lo tanto el llamado al Servicio Web funcionó correctamente.

  2. Seguridad en WS

    Para usar la especificación de seguridad de Servicios Web en la aplicación Siebel, se deben especificar en el archivo eapps.cfg o en el eapps_sia.cfg, en la sección del subsistema de Seguridad de Servicios Web los siguientes parámetros con sus respectivos valores:

  • UseAnonPool = TRUE
  • Impersonate = TRUE

Después de cualquier cambio en los archivos eapps.cfg o eapps_sia.cfg se deben reiniciar los servicios de Siebel y el servicio de World Wide Web.

Hay dos maneras de autenticarse ante el servicio. La primera es poniendo las credenciales como texto plano en la dirección URL. Este es el caso que ya se trabajó en el primer ejemplo.

La segunda es usando un token de seguridad dentro del mensaje SOAP, de manera que las credenciales no son visibles en el URL. Para implementar este segundo modelo hay que seguir estos pasos:

En la sección de Administración – Servicios Web > Inbound/Outbound, en el applet central donde se definen los puertos de servicio, para los puertos de servicio con transporte HTTP en la dirección se debe poner de la siguiente manera:

http://<nombreServidor>/eai_anon_<lang>/start.swe?SWEExtSource=SecureWebService&SWEExtCmd=Execute

NOTA: En este caso en lugar de eai_<lang> se pone eai_anon_<lang>. También se suprime al final de la hilera la sección &UserName=SADMIN&Password=SADMIN.

Además en el applet inferior se deben asignar los valores a la propiedades como se indica en la Tabla 9:

Nombre

Valor 

Descripción 

Tipo de autenticación

Usuar./contraseña-Borrar texto

Como ya no va por URL hay que poner que el método necesita autenticarse.

Visualización del servicio de filtro de solicitud 

MyBusinessService

Se pone de nuevo el nombre del BS. Se reutilizó el mismo de la primera guía.

Visualización del método de filtro de solicitud

MyMethod

Se especifica de nuevo el método del BS que requiere autenticación.

Tabla 9. Propiedades para configuración de usuario y contraseña en la operación del servicio.

Ilustración 9. Configuración de usuario y contraseña en la operación del servicio.

Se debe hacer clic en el botón “Vacial caché” y después en el botón “Generar WSDL”.

De nuevo enviamos la solicitud usando SoapSonar, pero al mensaje SOAP se le añade un encabezado y la sección del token que contiene el usuario y la contraseña. El mensaje debe quedar similar al siguiente:

<?xml version=”1.0″ encoding=”utf-8″?>
<
soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/&#8221; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xmlns:xsd=”http://www.w3.org/2001/XMLSchema&#8221; xmlns:tns=”http://siebel.com/asi/”&gt;
<
soap:Header>
    <wsse:Security xmlns:wsse=”http://schemas.xmlsoap.org/ws/2002/07/secext&#8221; soap:mustUnderstand=”0″>
        <wsse:UsernameToken>
            <wsse:Username>SADMIN</wsse:Username>
            <wsse:Password Type=”wsse:PasswordText”>SADMIN</wsse:Password>
        </wsse:UsernameToken>
    </wsse:Security>
</
soap:Header>
<
soap:Body>

<tns:MyBusinessService_MyMethod_Input>

<tns:msg>HELLO AND WELCOME</tns:msg>

</tns:MyBusinessService_MyMethod_Input>

</soap:Body>
</
soap:Envelope>

El WS responde lo siguiente:

<?xml version=”1.0″ encoding=”UTF-8″?>
<
SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/&#8221; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xmlns:xsd=”http://www.w3.org/2001/XMLSchema”&gt;

<SOAP-ENV:Body>

<ns:MyBusinessService_MyMethod_Output xmlns:ns=”http://siebel.com/asi/”&gt;

<ns:msg>Message received: HELLO AND WELCOME</ns:msg>

</ns:MyBusinessService_MyMethod_Output>

</SOAP-ENV:Body>
</
SOAP-ENV:Envelope>

En caso de enviar una solicitud sin la sección del token en el encabezado SOAP, el servidor responde algo similar a esto:

<?xml version=”1.0″ encoding=”UTF-8″?>
<
SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”&gt;

<SOAP-ENV:Body>

<SOAP-ENV:Fault>

<faultcode>SOAP-ENV:Server</faultcode>

<faultstring>Se requiere el token de nombre de usuario de encabezado de seguridad SOAP para la operación ‘MyMethod’.(SBL-EAI-05162)</faultstring>

<detail>

<siebelf:errorstack xmlns:siebelf=”http://www.siebel.com/ws/fault”&gt;

<siebelf:error>

<siebelf:errorsymbol>IDS_EAI_WS_NO_USERNAMETOKEN</siebelf:errorsymbol>

<siebelf:errormsg>Se requiere el token de nombre de usuario de encabezado de seguridad SOAP para la operación ‘MyMethod’.(SBL-EAI-05162)</siebelf:errormsg>

</siebelf:error>

</siebelf:errorstack>

</detail>

</SOAP-ENV:Fault>

</SOAP-ENV:Body>
</
SOAP-ENV:Envelope>

Acerca de amilianc

Más de 3 años trabajando con Siebel.
Esta entrada fue publicada en Siebel 7 y etiquetada , , , , , , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s