Web Services es una funcionalidad que permite acceder a la base de datos de PeopleSoft con el fin de enviar solicitudes, procesar y reenviar solicitudes.   

Este post es un pequeño tutorial, ilustrado con imágenes, para hacer la correcta creación de documentos, mensajes, servicios y  operaciones de servicios.

Creación de documentos

Para la creación de documentos se debe hacer la apertura tanto de un documento de entrada como un documento de salida.

Documento Entrada

El documento de entrada tiene como finalidad recoger la información procedente de la petición del Web Service.

Documento Salida

El documento de salida contendrá la información a devolver en el Web Service. Si es una salida que puede tener varias líneas primero habrá que crearse el documento que contendrá las líneas.

En este caso primero se crea el documento SANI_LIST_DATOS_ALL y luego se crea documento de salida SANI_LIST_DATOS_OUT tal como se ve en la imagen.

Creación de Mensajes

Mensaje de Entrada

El mensaje de entrada, al igual que el documento de entrada, recoge la información de la petición del Web Service. En el ejemplo partimos de un documento, seleccionamos el tipo de documento y rellenamos los demás campos.

Es necesario hacer click en “Añadir”

Mensaje de Salida

El mensaje de salida tiene como finalidad recoger lo que se va a enviar como respuesta al Web Service. En el ejemplo se debe partir del documento previamente seleccionado, seleccionamos en tipo el documento y rellenamos los demás campos.

Hacer click en “Añadir”

Hacer click en “Guardar”

Creación de Servicios

Una vez creados los documentos se debe realizar PeopleCode el cual rellenará la información necesaria con un Package.

La primera parte del Package debería quedar así:

import PS_PT:Integration:IRequestHandler;

class SANI_LIST_ALL implements PS_PT:Integration:IRequestHandler

   <*extends SANI_WSEMPLOYEE:Servicios*>

   method OnRequest(&Msg As Message) Returns Message;

end-class;



method OnRequest

 

A continuación debemos leer los parámetros que recibimos:

 

   Local Message &request, &response;

   Local Document &reqDOC, &respDOC;

   Local Compound &Compo

   Local String &sFieldName, &sFoto;

   Local number &nReq_ini, &nNum_elem;

Local Compound &LookupResultItem, &COMP1;

Local Collection &COLL0;

Local Primitive &ResVal;

Local boolean &status, &salir;

Local Rowset &RS_EMPLOY;

   &request = &Msg;

   &reqDOC = &request.GetURIDocument();

   &Compo = &reqDOC.DocumentElement;



   &sToken = &Compo.GetPropertyByName("TOKEN").Value;

   &sFieldName = &Compo.GetPropertyByName("NAME").Value;

   &nReq_ini = &Compo.GetPropertyByName("REQ_INI").Value;

   &nNum_elem = &Compo.GetPropertyByName("NUM_ELEM").Value;

   &sFoto = &Compo.GetPropertyByName("FOTO").Value;

   &response = CreateMessage(Operation.SANI_LIST_DATOS_GET, %IntBroker_Response);

   &respDOC = &response.GetDocument();

 

Posteriormente, se debe completar la respuesta que se enviará. En el ejemplo lo haré con un Rowset ya que puede devolver varias filas.  

La información de la cabecera debería quedar de la siguiente forma:  

      &LookupResultItem = &respDOC.DocumentElement;

Ésta información se puede completar de dos maneras:

Primera

      &ResVal = &LookupResultItem.GetPropertyByName("LAST_FILE");

      &ResVal.Value = 10;

Segunda

  &LookupResultItem.GetPropertyByName("NUM_FILES").Value = 0;

 

Una vez completada la información el cuerpo de la respuesta debe quedar configurada así:

      &COLL0 = &LookupResultItem.GetPropertyByName("LINES");

El Rowset permitirá devolver varias filas dentro del Package de la siguiente manera:

   &RS_EMPLOY = CreateRowset(Record.SANI_EMPALL_TBL);

   &cantidad = &RS_EMPLOY.Fill("WHERE UPPER(NAME) LIKE UPPER(:1) ORDER BY NAME", &sFieldName);

 

      For &R = &nReq_ini To &RS_EMPLOY.ActiveRowCount

            &COMP1 = &COLL0.CreateItem();

            &COMP1.GetPropertyByName("NAME").value = &RS_EMPLOY(&R).GetRecord(Record.SANI_EMPALL_TBL).GetField(Field.NAME).Value;

            &COMP1.GetPropertyByName("EMPLID").value = &RS_EMPLOY(&R).GetRecord(Record.SANI_EMPALL_TBL).GetField(Field.EMPLID).Value;

            &COMP1.GetPropertyByName("OPRID").value = &RS_EMPLOY(&R).GetRecord(Record.SANI_EMPALL_TBL).GetField(Field.SANI_USER_DOMAIN).Value;

            &COMP1.GetPropertyByName("BUSINESS_TITLE").value = &RS_EMPLOY(&R).GetRecord(Record.SANI_EMPALL_TBL).GetField(Field.GVT_DESCR70).Value;

&status = &COLL0.AppendItem(&COMP1);
End-for;

Return &response;

Una vez creado el Package es posible rellenar la información del Servicio.

Se debe añadir un valor. En el ejemplo he decidido el servicio como REST así que marco la casilla como REST.

Hacer click en “Añadir”

Es necesario completar la primera parte, hacer click en “Guardar” y posteriormente pasar a completar el Servicio.

Hacer click en “Añadir”.

Se debe completar los datos.

Completar la información correspondiente al apartado “Gestores”.

Hacer click en “Detalles” y completar la información.

Al hacer hacer click en aceptar el Gestor se encargará de completar la información restante.

Hacer click en “Guardar”.

Creación de Operación de Servicios

La operación de servicio sirve para recoger lo que vamos a realizar en el Servicio que previamente hemos definido. Para ello se debe ir a la ubicación Integración con Mensajería > Configuración de Integraciones > Operaciones de Servicio

Buscar el servicio previamente creado

En el ejemplo, al hacer click en “Buscar”, se ha seleccionado el Servicio REST y se ha creado una operación de Servicio.

Permisos a la operación de Servicios

Es necesario dar permisos a la operación Servicios para su correcto funcionamiento.

Hacer click en “Buscar”

Seleccionar el Servicio y hacer click en el link “Definir Seguridad”

Introducir la lista de permisos:

Hacer click en “Guardar”

Publicación del Web Service

Como último paso es necesario publicar el servicio, buscando el servicio creado y haciendo click en “siguiente”.

Hacer click en “Finalizar”

Rafael Barcelo Algora
Latest posts by Rafael Barcelo Algora (see all)