Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-01-2024
_Io _Io is offline
Miembro
 
Registrado: ene 2024
Posts: 18
Poder: 0
_Io Va por buen camino
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.

Última edición por Casimiro Notevi fecha: 11-01-2024 a las 14:10:05. Razón: Poner etiquetas [delphi] [/delphi] al código.
Responder Con Cita
  #2  
Antiguo 12-01-2024
Delphi01 Delphi01 is offline
Miembro
 
Registrado: nov 2015
Ubicación: Barcelona,España
Posts: 68
Poder: 9
Delphi01 Va por buen camino
Cita:
Empezado por _Io Ver Mensaje
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."
Responder Con Cita
  #3  
Antiguo 12-01-2024
_Io _Io is offline
Miembro
 
Registrado: ene 2024
Posts: 18
Poder: 0
_Io Va por buen camino
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).
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
acceder a propiedades desde propiedades agrupadas Tpersistent _CALI Varios 2 29-06-2018 14:44:52
Index is out of date... index table torito Conexión con bases de datos 7 10-12-2016 13:21:31
Acceso a las propiedades de un objeto desde el editor de propiedades Hugo OOP 0 24-11-2006 12:58:22
Index,...!!! 3 Rikardote Conexión con bases de datos 2 28-12-2004 13:05:00
Index,...!!! Rikardote Conexión con bases de datos 5 24-12-2004 03:39:15


La franja horaria es GMT +2. Ahora son las 19:23:16.


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
Copyright 1996-2007 Club Delphi