TprxADODataSetMaster

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

Introducción

El objeto TprxADODataSetMaster (Dataset con habilidades de master en una relación master-detail.) define funcionalidad para funcionar como el maestro en una relación master-detail.

Identidad

  • Ancestro: TprxADODataSetEdit
  • Carpeta: C:\DevelopPrx\library
  • Archivo: prxADODataSetMaster.pas

Declaración

type
  TprxADODataSetMaster = class(TprxADODataSetEdit)
  private
    FOnTransactionStart: TDataSetNotifyEvent;
    FOnTransactionEnd: TDataSetNotifyEvent;

    FFormName: String;

    FTrCatalogo: String;
    FTrTipoClase: String;

    FBatch_KeyFields: Variant;
    FBatch_KeyFieldsList: String;
    FBatch_KeyValues: Variant;

    FKeepFormOpen_Default: Boolean;
  protected
    FKeepFormOpen: Boolean;
    FReabriendo: Boolean;

    FChildDataSets: array[0..TprxChildDataSetsMax] of TprxADODataSetMaster;
    FChildDataSetsCount: Integer;

    Fsame_key_as_master: Boolean;

    procedure   Notification(AComponent: TComponent; Operation: TOperation); override;

    function    KeepFormOpen_Default_Get: Boolean;
    function    KeepFormOpen_Get: Boolean; virtual;

    function    StructureLoad: Integer; override;
    function    Get_same_key_as_master: Boolean;

    function    GetChildDataSets(Index: Integer): TprxADODataSetMaster;
    procedure   SetChildDataSets(Index: Integer; Value: TprxADODataSetMaster);

    property    Batch_KeyFields: Variant read FBatch_KeyFields write FBatch_KeyFields;
    property    Batch_KeyFieldsList: String read FBatch_KeyFieldsList write FBatch_KeyFieldsList;
    property    Batch_KeyValues: Variant read FBatch_KeyValues write FBatch_KeyValues;
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;

    procedure   Loaded; override;

    procedure   Activate(aLoadRecords: Boolean); override;
    procedure   OnMessagesEnable(aValue: Boolean); override;
    function    IsTransactionMaster: Boolean; override;

    procedure   ChildDataSetInit;
    procedure   ChildDataSetAdd(aDS: TprxADODataSetMaster);
    function    FindChildDataSetByTableName(aTableName: String): TprxADODataSetMaster;
    function    FindChildDataSetByClassName(aClassName: String): TprxADODataSetMaster;
    procedure   ChildDataSetDelete(aDS: TprxADODataSetMaster);

    procedure   ChildHasPosted(aChildDS: TprxADODataSetMaster);

    procedure   InsertXtd(Sender: TObject); override;
    procedure   CancelXtd(Sender: TObject); override;
    function    RequeryXtd: Boolean; virtual;

    function    UpdateBatchXtd_KeysSave: Boolean;
    function    UpdateBatchXtd_KeysLocate: Boolean;

    function    UpdateBatchXtd(AffectRecords: TAffectRecords = arAll): Boolean; override;

    procedure   RefreshXtd; overload;
    procedure   RefreshXtd(aFieldName: String; aFieldValue: String; aSelect: Boolean = True); overload;

    property    ChildDataSets[Index: Integer]: TprxADODataSetMaster read GetChildDataSets write SetChildDataSets;
    property    ChildDataSetsCount: Integer read FChildDataSetsCount;

    property    FormName: String read FFormName write FFormName;

    property    TrCatalogo: String read FTrCatalogo write FTrCatalogo;
    property    TrTipoClase: String read FTrTipoClase write FTrTipoClase;

    property    same_key_as_master: Boolean read Get_same_key_as_master;

    property    KeepFormOpen_Default: Boolean read KeepFormOpen_Default_Get;
    property    KeepFormOpen: Boolean read KeepFormOpen_Get write FKeepFormOpen;
    property    Reabriendo: Boolean read FReabriendo;
  published
    property    ppOnTransactionStart: TDataSetNotifyEvent read FOnTransactionStart write FOnTransactionStart;
    property    ppOnTransactionEnd: TDataSetNotifyEvent read FOnTransactionEnd write FOnTransactionEnd;
  end;

FOnTransactionStart: TDataSetNotifyEvent

Puede asociarse a un evento que se ejecuta al iniciar la transacción con la base de datos.

FOnTransactionEnd: TDataSetNotifyEvent

Puede asociarse a un evento que se ejecuta al finalizar la transacción con la base de datos.

FBatch

Proppiedades usadas para tomar la clave primaria en un update a la base de datos, las propiedades son:

  • FBatch_KeyFields guarda la lista de campos de la clave primaria.
  • FBatch_KeyFieldsList guarda la lista de campos pero separándolos con punto y coma.
  • FBatch_KeyValues guarda los valores de cada campo de la clave primaria.

FKeepFormOpen_Default: Boolean

Propiedad que por defecto indica si el form de un dataset permanece abierto luego de aplicar los cambios a la base de datos. Por ejemplo: si mantenemos la pantalla de una factura abierta tras haberla registrado.

Aunque se supone que debería manejarse por preferencias de usuario en el código siempre se la setea a True.

Ver también:

  • FKeepFormOpen: Boolean.
  • function KeepFormOpen_Default_Get: Boolean.
  • function KeepFormOpen_Get: Boolean; virtual.

FChildDataSets

  • FChildDataSets: array[0..TprxChildDataSetsMax] of TprxADODataSetMaster es un array que guarda las referencias a los detalles que tiene el dataset.
  • FChildDataSetsCount: Integer es un entero que indica la cantidad de detalles que tiene el dataset.


Implementación

function StructureLoad: Integer

Llama al inherited y posteriormente verifica si EsDetalleDe alguna otra clase y en ese caso si sus claves primarias contienen la misma cantidad de campos.

procedure ChildDataSetInit

Inicializa el array de childs a vacío.

procedure ChildDataSetAdd(aDS: TprxADODataSetMaster)

Agrega un child al array.

procedure ChildHasPosted(aChildDS: TprxADODataSetMaster)

Función llamada por un child del dataset para indicar que ha hecho algo, por ejemplo, posteado cambios.

function FindChildDataSetByTableName(aTableName: String): TprxADODataSetMaster

Dado un nombre de tabla retorna el ChildDataSet que la implementa.

function FindChildDataSetByClassName(aClassName: String): TprxADODataSetMaster

Similar anterior, pero buscamos por nombre de la clase.

procedure ChildDataSetDelete(aDS: TprxADODataSetMaster)

Elimina un child del array.

procedure InsertXtd(Sender: TObject)

Postea un registro insertado.

procedure CancelXtd(Sender: TObject)

Cancela la inserción o edición de un registro.

function RequeryXtd: Boolean

Vuelve a cargar los registros, habitualmente los mismos que tiene en pantalla.

Implementación, UpdateBatchXtd

Esta funcionalidad pertenece a las funciones de grabado en la base de datos.

function UpdateBatchXtd_KeysSave: Boolean

Guarda los valores de los campos clave para hacer un Locate después del Requery, surgido el 26/08/2015 por la prueba de comprobantes combinados Pragma y prx.

function UpdateBatchXtd_KeysLocate: Boolean

Hace un Locate usando las claves guardadas la llamada al Locate es distinta según la cantidad de campos clave que tenga la clase.

function UpdateBatchXtd(AffectRecords: TAffectRecords = arAll): Boolean

Vuelca los cambios al dataset (y sus childs) a la base de datos.

procedure RefreshXtd

Vuelve a cargar los registros y se posiciona sobre el que acabamos de editar.

procedure RefreshXtd(aFieldName: String; aFieldValue: String; aSelect: Boolean = True)

Similar anterior, pero informando un campo y su valor, para usar en comprobantes por el problema del loop en la asignación de numeración (07/09/2010).

Uso