Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Propiedades con INDEX y STORED (https://www.clubdelphi.com/foros/showthread.php?t=96561)

_Io 11-01-2024 11:28:27

Propiedades con INDEX y STORED
 
Hola.

Antes de nada Felicitar el Nuevo Año a todos y felicitar a este foro por la ayuda que aporta.

Llevo unos cuantos años con Delphi, tengo cierta soltura, pero quizás me he encasillado en lo que funciona y no he estudiado más. La cosa que ahora con lo nuevo de VERIFACTU, estoy viendo código de compañeros que no entiendo y es por eso si me podéis ayudar a comprenderlo.

Código Delphi [-]
 PersonaFisicaJuridicaType = class(TRemotable)
  private
    FNIF: NIFType;
    FNIF_Specified: boolean;
    FIDOtro: IDOtroType;
    FIDOtro_Specified: boolean;
  public
    destructor Destroy; override;
  published
    property NombreRazon: TextMax120Type  read FNombreRazon write FNombreRazon;
    property NIF:         NIFType         Index (IS_OPTN) read FNIF write SetNIF stored NIF_Specified;
    property IDOtro:      IDOtroType      Index (IS_OPTN) read FIDOtro write SetIDOtro stored IDOtro_Specified;

////

procedure PersonaFisicaJuridicaType.SetNIF(Index: Integer; const ANIFType: NIFType);
begin
  FNIF := ANIFType;
  FNIF_Specified := True;
end;

function PersonaFisicaJuridicaType.NIF_Specified(Index: Integer): boolean;
begin
  Result := FNIF_Specified;
end;

procedure PersonaFisicaJuridicaType.SetIDOtro(Index: Integer; const AIDOtroType: IDOtroType);
begin
  FIDOtro := AIDOtroType;
  FIDOtro_Specified := True;
end;

function PersonaFisicaJuridicaType.IDOtro_Specified(Index: Integer): boolean;
begin
  Result := FIDOtro_Specified;
end;

Mi dudas son:

* por que dos propiedades diferentes tienen el mismo índiceIndex (IS_OPTN)?
* Cual es la función de stored que lee el valor de una función?,no se podría haber puesto directamente la variable?

Espero haberme explicado bien.

Muchas Gracias.

Delphi01 12-01-2024 02:20:57

Cita:

Empezado por _Io (Mensaje 553954)
Hola.

Antes de nada Felicitar el Nuevo Año a todos y felicitar a este foro por la ayuda que aporta.

Llevo unos cuantos años con Delphi, tengo cierta soltura, pero quizás me he encasillado en lo que funciona y no he estudiado más. La cosa que ahora con lo nuevo de VERIFACTU, estoy viendo código de compañeros que no entiendo y es por eso si me podéis ayudar a comprenderlo.

Código Delphi [-]
 PersonaFisicaJuridicaType = class(TRemotable)
  private
    FNIF: NIFType;
    FNIF_Specified: boolean;
    FIDOtro: IDOtroType;
    FIDOtro_Specified: boolean;
  public
    destructor Destroy; override;
  published
    property NombreRazon: TextMax120Type  read FNombreRazon write FNombreRazon;
    property NIF:         NIFType         Index (IS_OPTN) read FNIF write SetNIF stored NIF_Specified;
    property IDOtro:      IDOtroType      Index (IS_OPTN) read FIDOtro write SetIDOtro stored IDOtro_Specified;

////

procedure PersonaFisicaJuridicaType.SetNIF(Index: Integer; const ANIFType: NIFType);
begin
  FNIF := ANIFType;
  FNIF_Specified := True;
end;

function PersonaFisicaJuridicaType.NIF_Specified(Index: Integer): boolean;
begin
  Result := FNIF_Specified;
end;

procedure PersonaFisicaJuridicaType.SetIDOtro(Index: Integer; const AIDOtroType: IDOtroType);
begin
  FIDOtro := AIDOtroType;
  FIDOtro_Specified := True;
end;

function PersonaFisicaJuridicaType.IDOtro_Specified(Index: Integer): boolean;
begin
  Result := FIDOtro_Specified;
end;

Mi dudas son:

* por que dos propiedades diferentes tienen el mismo índiceIndex (IS_OPTN)?
* Cual es la función de stored que lee el valor de una función?,no se podría haber puesto directamente la variable?

Espero haberme explicado bien.

Muchas Gracias.

Respuesta ChatGpt:

"El código que has proporcionado parece ser una definición de clase en Delphi. Vamos a analizar tus dudas punto por punto:

1. ¿Por qué dos propiedades diferentes tienen el mismo índice "Index (IS_OPTN)"?
En Delphi, el índice "Index (IS_OPTN)" se utiliza para indicar que una propiedad es opcional, es decir, puede estar presente o no. En este caso, las propiedades "NIF" y "IDOtro" tienen el mismo índice porque ambos son marcados como opcionales. De esta manera, se puede verificar fácilmente si una propiedad ha sido especificada o no. Si la propiedad está especificada, se debe utilizar su valor; de lo contrario, se utilizan valores predeterminados o se toman otras acciones.

2. ¿Cuál es la función de "stored" que lee el valor de una función? ¿No se podría haber puesto directamente la variable?
La palabra clave "stored" en Delphi se utiliza en las propiedades publicadas para permitir controlar si un valor de propiedad debe ser almacenado o no durante la serialización, como por ejemplo, al guardar o cargar la configuración de la aplicación. Al utilizar "stored", se puede establecer una condición o una función que determine si el valor de la propiedad debe guardarse o no.
Se usa una función en lugar de la variable directamente para proporcionar una lógica adicional en la determinación de si almacenar o no el valor de la propiedad. Esto permite personalizar el comportamiento de la propiedad en función de ciertas condiciones o reglas. En el código que has proporcionado, las funciones "NIF_Specified" y "IDOtro_Specified" se utilizan para verificar si las propiedades "NIF" y "IDOtro" han sido especificadas, respectivamente, y así decidir si guardar sus valores durante la serialización.

Espero que esta explicación aclare tus dudas. Si tienes alguna otra pregunta, no dudes en preguntar."

_Io 12-01-2024 10:53:55

Hola.

Muchas gracias ChatGpt.

Me ha quedado muy claro. Buscando más información he visto que se utiliza bastante en las clase "TRemotable "

Un Fuerte abrazo.



Cita:

Yes, it is necessary. With this information, for exemple IS_OPTN, the class from TRemotable knows that when property is Optional
to build XML, so if is optional, the node is added only if the value is stored. On your case:

Código:

property User: string Index (IS_OPTN) read GetUser write SetUser stored User_Specified
The element User will be added on XML if User_Specified true. The User_Specified turns automatically true when you set value to User, because the setter SetUser do it.

So, when the component SOAP por example, will build the XML, the element will be added only if is stored because it is Optional (IS_OPTN).


La franja horaria es GMT +2. Ahora son las 04:07:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi