Escrito por

Pregunta Yone Moreno · abr 18, 2023

"El secreto para convertir una lista en una cadena: ¿cuál es la manera idónea de transformar Lista a String?"

Buenos días;

Primeramente, expresar gracias reales sinceras y profundas por el tiempo que dedican ustedes a leer, entender y responder esta duda. Sobre todo muchas gracias por responderla de la mejor manera posible. Gracias.

Tenemos una duda:

El Sistema Origen nos informa en el body que envía hacia el método del Servicio REST "getCursosAdmitidosInscripcionAbierta" de la siguiente manera:

{
    "agrupacionPuesto": ["37","38"]
}

 

Siendo el Mensaje Request:

Class Mensajes.Request.miFormacion.GetCursosAdmitidosInscripcionAbiertaRequest Extends Ens.Request
{

Parameter RESPONSECLASSNAME = "Mensajes.Response.miFormacion.GetCursosAdmitidosInscripcionAbiertaResponse";Property idUserLogueado As%String(MAXLEN = "");Property agrupacionPuesto As list Of %String(MAXLEN = "");

En el visor vemos de manera correcta:

<?xml version="1.0"?><!-- type: Mensajes.Request.miFormacion.GetCursosAdmitidosInscripcionAbiertaRequest  id: 14681697 --><GetCursosAdmitidosInscripcionAbiertaRequest><idUserLogueado>43669691M</idUserLogueado><agrupacionPuesto><agrupacionPuestoItem>37</agrupacionPuestoItem><agrupacionPuestoItem>38</agrupacionPuestoItem></agrupacionPuesto></GetCursosAdmitidosInscripcionAbiertaRequest>

A continuación viene la duda.

En el método de la Operación REST, "GetCursosAdmitidosInscripcionAbierta"; ¿de qué manera enviamos en el Body del POST al Sistema Destino el contenido de la lista agrupacionPuesto así:

["37","38"]

De momento lo que hemos hecho es convertir a mano la pRequest.agrupacionPuesto ; que es una : %Collection.ListOfDT a ["37","38"]
 

Siendo el código del método:

Method GetCursosAdmitidosInscripcionAbierta(pRequest As Mensajes.Request.miFormacion.GetCursosAdmitidosInscripcionAbiertaRequest, pResponse As Mensajes.Response.miFormacion.GetCursosAdmitidosInscripcionAbiertaResponse) As%Library.Status
{
	//Creamos Request y Response HTTPSet httpRequest=##class(%Net.HttpRequest).%New()
	set tResponse  = ##class(%Net.HttpResponse).%New()

	set URL		= ..Adapter.URL_"formacion/getcursosopen"$$$LOGINFO("URL: "_URL)
	
	set httpRequest.ContentType = "application/json"do httpRequest.SetHeader("idUserLogueado",pRequest.idUserLogueado)	
	set idUserLogueado =httpRequest.GetHeader("idUserLogueado")
	$$$LOGINFO("Enviamos en la cabecera, idUserLogueado: "_idUserLogueado)
	
	// Escribimos mensaje en body$$$LOGALERT("pRequest.agrupacionPuesto: "_pRequest.agrupacionPuesto)
	set stringAgrupacionPuesto = "["For i=1:1:pRequest.agrupacionPuesto.Count() {
    	Set stringAgrupacionPuesto = stringAgrupacionPuesto_""""_pRequest.agrupacionPuesto.GetAt(i)_""","
	}
	//elimina la última comaSet stringAgrupacionPuesto=$extract(stringAgrupacionPuesto, 1, $length(stringAgrupacionPuesto)-1)
	set stringAgrupacionPuesto = stringAgrupacionPuesto_"]"do httpRequest.EntityBody.Write(stringAgrupacionPuesto)
    $$$LOGASSERT("stringAgrupacionPuesto: "_stringAgrupacionPuesto)
    
	//Enviamos al sistema externoset tSC=httpRequest.Post(URL,0) 
	$$$LOGALERT("tSC: "_$System.Status.GetErrorText(tSC))

	//Lanzamos excepcion si hubo errorif$$$ISERR(tSC){
			$$$ThrowOnError(tSC)
	}
	
	set tResponse = httpRequest.HttpResponse
	
	set linea = ""//Leemos respuestaif (tResponse.Data.AtEnd = 0) {
		set linea = linea_tResponse.Data.Read()
	}
	$$$LOGINFO("linea: "_linea)
	
	// se transforma el objeto JSON a un objeto localset claseAux = ##class(%ZEN.Auxiliary.jsonProvider).%New()
	set tSC= claseAux.%ConvertJSONToObject(.linea,"Mensajes.Response.miFormacion.GetCursosAdmitidosInscripcionAbiertaResponse",.pResponse,1)	

	Quit$$$OK
}

Donde el fragmento que nos incumbe es:

// Escribimos mensaje en body

set stringAgrupacionPuesto = "["
For i=1:1:pRequest.agrupacionPuesto.Count() {
     Set stringAgrupacionPuesto = stringAgrupacionPuesto_""""_pRequest.agrupacionPuesto.GetAt(i)_""","
}
//elimina la última coma
Set stringAgrupacionPuesto=$extract(stringAgrupacionPuesto, 1, $length(stringAgrupacionPuesto)-1)
set stringAgrupacionPuesto = stringAgrupacionPuesto_"]"     do httpRequest.EntityBody.Write(stringAgrupacionPuesto)
    $$$LOGASSERT("stringAgrupacionPuesto: "_stringAgrupacionPuesto)
    ;$$$LOGINFO("Rellenamos body con linea: "_linea)
    
//Enviamos al sistema externo
set tSC=httpRequest.Post(URL,0)
 

¿Existe algún método interno que ya convierta %Collection.ListOfDT a String?

Muchas gracias por leernos y respondernos. Gracias.

🙏 Gracias por su tiempo, su paciencia y su disposición para hacer de este un espacio en línea enriquecedor y positivo. Resolviendo las dudas, explicando las causas y mencionando documentación, ejemplos y/o el paso a paso concreto.

Un saludo.
 

Product version: IRIS 2020.1
$ZV: IRIS for UNIX (Red Hat Enterprise Linux for x86-64) 2020.1.1 (Build 408U) Sun Mar 21 2021 22:21:14 EDT

Comments