TpAUX DM unit

De Pragma Wiki
Ir a la navegación Ir a la búsqueda

Introducción

El componente TpAUX_DM_unit (Administración de auxiliares) administra los auxiliares instanciados en el TprxADOClientDM. Implementa funcionalidad común a todos los auxiliares.

Este componente se explica mejor con la explicación de los auxiliares (ver AUXILIARES).

Identidad

  • Ancestro: TComponent
  • Carpeta: C:\DevelopPrx\pPRAGMA
  • Archivo: pAUX_DM_unit.pas

Declaración

type
  TpAUX_DM_unit = class(TComponent)
  private
    FObjeto: String;
    FClase: String;
    FCampo: String;
    FTipo: String;

    FQuery: TprxADOQuery;
    FQueryRecs: TprxADOQuery;
    FKeys: TStringList;
    FKeyList: TStringList;
    FKeyList_Description: TStringList;
    FKeyDescription: TStringList;
    FCommands: TStringList;
    FTagValue: String;

    FSELECTVALUE: String;
  protected
    property    Keys: TStringList read FKeys write FKeys;
    property    Objeto: String read FObjeto write FObjeto;
    property    Clase: String read FClase write FClase;
    property    Campo: String read FCampo write FCampo;
    property    Tipo: String read FTipo write FTipo;
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;

    procedure   Inicializar(Sender: TObject);

    procedure   REFRESH_RUNTIME_SQL(aSQL: TStrings);

    function    F5_SELECT_SQL(aObjeto: String; aClase: String; aCampo: String; aTipo: String): Boolean;
    function    Exists(aObjeto: String; aClase: String; aCampo: String; aTipo: String): Boolean;

    function    Load(aCodigo: String = ''): Boolean; overload;
    function    Load(aObjeto: String; aClase: String; aCampo: String; aTipo: String; aCodigo: String = ''): Boolean; overload;
    function    LoadTag(aTag: String): Boolean;
    function    LoadSection(aSQL: TStringList; aSection: String; aParser: Tfva_parser_fbn; aParse: Boolean; aSELECTVALUE: String = ''): Boolean;

    property    Query: TprxADOQuery read FQuery write FQuery;
    property    QueryRecs: TprxADOQuery read FQueryRecs write FQueryRecs;
    property    KeyList: TStringList read FKeyList write FKeyList;
    property    KeyList_Description: TStringList read FKeyList_Description write FKeyList_Description;
    property    KeyDescription: TStringList read FKeyDescription write FKeyDescription;
    property    TagValue: String read FTagValue write FTagValue;
    property    Commands: TStringList read FCommands write FCommands;

    property    SELECTVALUE: String read FSELECTVALUE;
  published
  end;

Implementación

constructor Create(AOwner: TComponent)

Instancia una lista denominada Keys que carga una clave para cada registro existente en DEV AUXILIARES.

procedure REFRESH_RUNTIME_SQL(aSQL: TStrings)

La tabla DEV AUXILIARES/RUNTIME debe ser refrescada cada vez que hay un cambio en algún auxiliar, este procedimiento es llamado por las funciones de la aplicación para hacer ese refresco.

Como normalmente este refresco es parte de un comando más grande, se guarda en el argumento aSQL.

procedure Inicializar(Sender: TObject)

Para una mayor velocidad de ejecución de la aplicación, los auxiliares se cargan al ingresar a la aplicación. Este procedimiento ejecuta un SQL:

SELECT DISTINCT
pAUX_RUNTIME_TABLA.FOBJETO
, pAUX_RUNTIME_TABLA.FCLASE
, pAUX_RUNTIME_TABLA.FCAMPO
, pAUX_RUNTIME_TABLA.FTIPO
, FRECS = COUNT(*)
FROM pAUX_RUNTIME_TABLA
GROUP BY
pAUX_RUNTIME_TABLA.FOBJETO
, pAUX_RUNTIME_TABLA.FCLASE
, pAUX_RUNTIME_TABLA.FCAMPO
, pAUX_RUNTIME_TABLA.FTIPO
ORDER BY 1, 2, 3, 4

Y carga cada clave en la lista Keys uniendo los campos:

  • FOBJETO.
  • FCLASE.
  • FCAMPO.
  • FTIPO.

Cada vez que la aplicación necesite usar un auxiliar lo va a encontrar rápidamente en esta lista.

function F5_SELECT_SQL(aObjeto: String; aClase: String; aCampo: String; aTipo: String): Boolean

Esta función se usa desde el memo en el que se definen los auxiliares, y retorna la lista de etiquetas habilitadas para el tipo de auxiliar que estamos definiendo (ver DEV AUXILIARES/TIPOS ETIQUETAS).

function Exists(aObjeto: String; aClase: String; aCampo: String; aTipo: String): Boolean

Dados un objeto, una clase, un campo y un tipo busca las claves definidas, guarda el código de cada clave encontrada indicando los distintos códigos de auxiliares a ejecutar.

Retorna True si encontró claves.

function Load(aCodigo: String): Boolean

Dados los criterios carga los comandos a Commands para tenerlos más a mano, el argumento es opcional.

function Load(aObjeto: String; aClase: String; aCampo: String; aTipo: String; aCodigo: String): Boolean

Similar anterior, pero recibe como argumentos:

  • aObjeto: String es el tipo de objeto.
  • aClase: String es el código de la clase o consulta.
  • aCampo: String es el código del campo.
  • aTipo: String es el tipo de auxiliar.
  • aCodigo: String = código opcional de auxiliar (solo para los tipos de auxiliar que permiten múltiples definiciones).

function LoadTag(aTag: String): Boolean

Dados los criterios busca un Tag en los comandos, si lo encuentra retorna True (ej: <TAG SQL>), además si lo encuentra intenta ver si hay un valor definido a la derecha del tag (ej: <TAG TIPO>POST).

function LoadSection(aSQL: TStringList; aSection: String; aParser: Tfva_parser_fbn; aParse: Boolean; aSELECTVALUE: String): Boolean

Carga una sección (ej: <COMANDOS></COMANDOS>) desde Commands, si informamos el parser entonces parsea los comandos dejándolos listos para ejecutar. Si recibe un valor en aSELECTVALUE lo usa para reemplazar directamente el <SELECTVALUE>, sino lo "calcula".

El argumento aSELECTVALUE es opcional.