TpAUX DM unit
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.