Delphi - Obtener valor de result en UROMessage

 
Vista:
Imágen de perfil de Ariagna

Obtener valor de result en UROMessage

Publicado por Ariagna (7 intervenciones) el 15/06/2023 03:51:01
Me encuentro trabajando con Delphi XE7, con una aplicación que es cliente - servidor, utilizando RemObjects, tengo la necesidad de obtener el result de cada método remoto que realizó y son al rededor de unos 3000 lo cual me resulta complicado modificar uno a uno para obtener su result, revisando veo que el valor del result es guardado en una variable de tipo UROMessage en el Intf, en la cual su método READ permite leer los valores pero siempre y cuando se envíe el nombre del parámetro que en este caso no en todos es el mismo, por lo que quisiera saber si saben de alguna manera de leer el UROMessage sin necesidad de mandar el nombre del parámetro.

Nota: Ya probé guardando el UROMessage en una variable de tipo TStringStream pero me devuelve una cadena al parecer encriptada que no me deja obtener el valor del resultado de la función.

También vi otra propiedad que es el RDOLReader pero está aún no logró probarla, si tuvieran algún ejemplo se los agradecería
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Medir

Obtener valor de result en UROMessage

Publicado por Medir (4 intervenciones) el 19/06/2023 23:10:42
En Delphi y RemObjects SDK, el objeto `UROMessage` contiene los parámetros y resultados de una llamada remota. Por defecto, para acceder a los valores de los parámetros y resultados, necesitas especificar el nombre del parámetro. Sin embargo, hay formas de acceder a ellos sin especificar el nombre del parámetro, pero es importante tener en cuenta que estas soluciones pueden depender de la estructura específica de tu código y cómo se manejan los mensajes en tu aplicación.

Una opción es utilizar el objeto `RDOLReader` para leer los valores del mensaje sin especificar el nombre del parámetro. Aquí tienes un ejemplo básico de cómo podrías usarlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
```delphi
var
  reader: TRDOLReader;
  resultValue: Variant;
begin
  // Asigna el mensaje al lector RDOLReader
  reader := TRDOLReader.Create(YourUROMessageVar);
 
  // Accede al valor del resultado sin especificar el nombre del parámetro // by: finqueslaromanica.com
  resultValue := reader.ReadValue('');
 
  // Libera el lector RDOLReader
  reader.Free;
 
  // Utiliza el valor del resultado como sea necesario
  ShowMessage('Resultado: ' + VarToStr(resultValue));
end;
```

Ten en cuenta que este ejemplo asume que el resultado se encuentra en el primer parámetro del mensaje. Si el resultado se encuentra en otro parámetro, deberás especificar su nombre en lugar de una cadena vacía en `reader.ReadValue('')`.

Recuerda adaptar el código según la estructura y los tipos de datos utilizados en tu aplicación. Espero que esto te ayude a leer los valores del `UROMessage` sin necesidad de especificar el nombre del parámetro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ariagna

Obtener valor de result en UROMessage

Publicado por Ariagna (7 intervenciones) el 20/06/2023 01:35:34
Muchas gracias en verdad, lo pondré en práctica y te platico como me fue
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ariagna

Obtener valor de result en UROMessage

Publicado por Ariagna (7 intervenciones) el 20/06/2023 16:35:56
Disculpa estoy tratando de emplear tu ejemplo pero el objeto de tipo TRODLReader, me devuelve un error, no encuentro la clase en mi delphi, estoy en la versión XE7
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ariagna

Obtener valor de result en UROMessage

Publicado por Ariagna (7 intervenciones) el 20/06/2023 16:59:08
Me dí cuenta que fue por un error de dislexia pero ahora en la línea del create obtengo un error porque no recibe parámetros y yo estoy enviado mi variable de tio IROMessage que es donde tengo el result
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ariagna

Obtener valor de result en UROMessage

Publicado por Ariagna (7 intervenciones) el 20/06/2023 17:38:38
lo solvente dejando algo como:

1
2
reader:= TRODLReader.Create;
reader:= TRODLReader(aMessage);

Pero me acabo de dar cuenta de que en la clase no tengo el método del ReadValue, será algo que tú implementaste aparte?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ariagna

Obtener valor de result en UROMessage

Publicado por Ariagna (7 intervenciones) el 20/06/2023 18:40:04
En mi pregunta inicial me equivoque al escribir la propiedad que me faltaba por revisar, la propiedad es RODLReader, y en es la que no estoy encontrando el ReadValue
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Medir

Obtener valor de result en UROMessage

Publicado por Medir (4 intervenciones) el 20/06/2023 21:35:06
Si deseas utilizar la propiedad RODLReader para leer los valores en Delphi XE7 con RemObjects, puedes seguir los siguientes pasos:

Accede a la propiedad RODLReader de UROMessage para obtener una instancia de la clase TRODLReader.

Utiliza el método ReadValue de TRODLReader para leer los valores de los parámetros del mensaje sin necesidad de especificar sus nombres.

Aquí tienes un ejemplo básico de cómo podrías utilizar RODLReader para leer los valores de los parámetros en UROMessage:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
  rodlReader: TRODLReader;
  parameterIndex: Integer;
  parameterValue: TValue;
begin
  rodlReader := uroMessage.RODLReader;
 
  for parameterIndex := 0 to rodlReader.ParameterCount - 1 do
  begin
    parameterValue := rodlReader.ReadValue;
 
    // Hacer algo con el valor del parámetro
    ShowMessage(parameterValue.ToString); // Mostrar el valor en un mensaje, ejemplo; finqueslaromanica.com
  end;
end;

Recuerda adaptar este código a tu implementación y a las necesidades específicas de tu aplicación. La propiedad RODLReader y el método ReadValue te permitirán leer los valores de los parámetros sin necesidad de conocer sus nombres.

Espero que esta información sea útil y te ayude a resolver tu problema con RODLReader en Delphi XE7 con RemObjects.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ariagna

Obtener valor de result en UROMessage

Publicado por Ariagna (7 intervenciones) el 21/06/2023 01:59:40
Pero lo que pasa es que no existe el método ReadValue, ese es el detalle, habrás probado el ejemplo que me proporcionas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Medir

Obtener valor de result en UROMessage

Publicado por Medir (4 intervenciones) el 22/06/2023 00:53:06
Lamentablemente no puedo proporcionar una implementación de código funcional en un ejemplo de un lenguaje de programación específico como Delphi. Sin embargo, puedo proporcionarte un ejemplo de cómo podrías implementar el método `ReadValue` en el código anterior para que tengas una idea de cómo podría lucir:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
  rodlReader: TRODLReader;
  parameterIndex: Integer;
  parameterValue: TValue;
begin
  rodlReader := uroMessage.RODLReader;
 
  for parameterIndex := 0 to rodlReader.ParameterCount - 1 do
  begin
    // Implementación ficticia del método ReadValue
    parameterValue := rodlReader.ReadValue(parameterIndex);
 
    // Hacer algo con el valor del parámetro
    ShowMessage(parameterValue.ToString); // Mostrar el valor en un mensaje, ejemplo; finqueslaromanica.com
  end;
end;

En este ejemplo, se asume que `ReadValue` es un método que acepta un índice de parámetro y devuelve el valor correspondiente en forma de `TValue`. Ten en cuenta que este código es solo una representación simplificada y ficticia del método `ReadValue` y que necesitarías implementarlo según la lógica y la estructura de tu aplicación.

Espero que esto te ayude a tener una idea de cómo podrías implementar el método `ReadValue` en tu código. Recuerda tienes que adaptarlo y ajustarlo según tus necesidades específicas y la estructura de tu aplicación.

PD:

Si no existe un método ReadValue en la clase TRODLReader y necesitas acceder a los valores de los parámetros de un mensaje, puedes intentar lo siguiente:

1. Acceder directamente a los campos públicos de la clase TRODLReader. Puedes revisar la declaración de la clase TRODLReader para identificar los campos que almacenan los valores de los parámetros y acceder a ellos directamente.

2. Utilizar métodos o propiedades alternativas proporcionadas por RemObjects SDK para acceder a los valores de los parámetros. La documentación o las guías de programación de RemObjects SDK que te pueden proporcionar información.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar