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”
- Bloqueo y desbloqueo de tablas en Oracle - 22 February, 2020
- Data recovery and tables in Oracle - 18 July, 2019
- Recuperación de datos y tablas en Oracle - 18 July, 2019
Hola Benito:
Se deben agregar manualmente en el mensaje. Yo en este caso last_file si te fijas en el peoplecode es el ultimo registro que he leido y num_lines es el numero de lineas devueltas, creo que era asi
Una disculpa aun sigue sin responder, el mensaje de respuesta.
Debe llevar forzosamente los valores de LAST_FILE y NUM_FILES, ya que si debe regresar varias lineas mi rowset .
Adicional el mensaje All lo creas a partir de un registro cierto?, ese registro debe ir incluido a un arbol de seguridad para que te regrese valores?, ya que es una vista que genere y no la colgue a ningun arbol de seguridad.
Hola Luis:
Los valores LAST_FILE y NUM_FILES son unos valores que están metidos en el ejemplo porque el ejemplo es un caso real y el cliente me pidió que devolviera el número de registros que tenia la consulta (LAST_FILE) y el número de registros que devolvia (NUM_FILES) y el mensaje devuelto sería
{“XXXX_LIST_DATOS_OUT”: {
“LAST_FILE”: 70,”NUM_FILES”: 11156,”XXXX_LIST_DATOS_ALL”: [
{“EMPLOYEE_PHOTO”: “”,”NAME”: ” Maria Adela Gomez Gomez-Lobo”,”EMPLID”: “52121899N”,”OPRID”: “XXXX\\agomezgo”,”BUSINESS_TITLE”: “AREA CRITICOS Y BLOQUE OBSTETR”,”DEPT_DESCR”: “”,”EMAIL_ADDR”: “aperezpe@gmail.es”,”PHONE”: “”,”PHONE2″: “”,”PHONE3″: “”,”PHONE4″: “”,”LOCATION_DESCR”: “Hospital La Bermudez”,”OPR_MANAGER”: “XXXX\\pperez”,”MANAGER_NAME”: “Pedro Perez”}……]}}
Lo creo a partir de una SELECT que cumpla las condicines del rowset
&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
Y el mensaje All lo creo a partir de un Documento desde PeopleTools – Documentos – Creación de Documentos.