VFormDataView

Hereda de: VAbstractDataView.

Esta clase representa a un objeto formulario.

Indice de funciones

De atributos

Boolean getRegister( VRegister reg )

Boolean isHardLocked()

Boolean isRegisterModified()

Boolean isSubForm()

Boolean setRegister( VRegister reg )

De widgets

Widget control( Number index )

Widget control( String szIdPrimarioControl )

Number controlCount()

VAbstractDataView dataViewActive()

VFormDataView mainForm()

void setCalendarStyle(String colorFondo, String colorTexto, String DíasSemana, String CadenaDiaMeses, Array fechas)

De foco

void setFocusToFirst()

void setFocusToNext()

void setFocusToPrev()

De comandos

void accept()

void acceptConfirm()

void acceptNoClose()

void cancel()

void cancelConfirm()

void closeForm()

void eliminate()

void eliminateConfirm()

Boolean saveRegister()

void undo()

void undoConfirm()

void updateControls()

void updateRegister()

De maestros

void execEditMaster( String szIdCampoMaes, String szIdRefForm )

void execFindMaster( String szIdCampoMaes, String szIdRefLocaliz )

void execNewMaster( String szIdCampoMaes, String szIdRefForm )

Señales

Item: cambio de seleccionado

Documentación de funciones

Funciones de atributos

Boolean getRegister( VRegister reg )

Devuelve el registro del formulario y se lo pasa la objeto de la clase VRegister especificado.

Parámetros:

  • reg: objeto de la clase VRegister donde se almacenará la ficha del formulario.

Boolean isHardLocked()

Devuelve true si la ficha del formulario está bloqueada.

Boolean isRegisterModified()

Devuelve true si algún dato del registro ha sido modificado.

Boolean isSubForm()

Devuelve true si el formulario está incrustado dentro de otro y se comporta como un subformulario.

Boolean setRegister( VRegister reg )

Asigna un nuevo registro al formulario. Esto permite cambiar de ficha o incluso pasarle una ficha vacía para que el formulario permita dar altas.

Parámetros:

  • reg: objeto de la clase VRegister con el registro de la tabla a asignar al formulario.

Funciones de widgets

Widget control( Number index )

Devuelve un objeto de la clase Widget correspondiente al control especificado.

Parámetros:

  • index: número que corresponde con el índice o posición del control en la lista de controles del formulario.

Widget control( String szIdPrimarioControl )

Devuelve un objeto de la clase Widget correspondiente al control especificado.

Parámetros:

  • szIdPrimarioControl: identificador del control.

Number controlCount()

Devuelve el número de controles que contiene el formulario.

VAbstractDataView dataViewActive()

Devuelve un objeto de la clase VAbstractDataView correspondiente al objeto contenido en un control contenedor como pueden ser el separador, caja o pila de formularios, spliter o vista de datos.

VFormDataView mainForm()

Devuelve un objeto de la clase VFormDataView correspondiente al formulario principal donde está contenido el formulario. Esta función es útil cuando un formulario está siendo usado como subformulario de otro y deseamos conocer el formulario principal. Independiente del número de niveles de amalgama en los que se encuentre un subformulario esta función siempre devuelve el objeto formulario principal que contiene a todo el resto.

void setCalendarStyle(String colorFondo, String colorTexto, String DíasSemana, String CadenaDiaMeses, Array fechas)

Permite configurar la interfaz de los días de los calendarios del formulario en curso. Se aplicará a todos los controles de tipo calendario, edición fecha con calendario y edición fecha/hora con calendario. Equivale al comando de instrucción de proceso Interfaz: Establecer estilo de los días de calendarios.

Parámetros:

  • colorFondo: cadena con el color de fondo a aplicar a los calendarios. Podemos especificar, o bien su valor hexadecimal (ejemplo: "#FFFFFF"), o bien su nombre (ejemplo: "white"). Este parámetro es opcional. Si no se especifica, no se aplicará ningún color de fondo al día o días que se configuren en el resto de los parámetros de la función.

  • String colorTexto: cadena con el color de texto a aplicar a los calendarios. Podemos especificar, o bien su valor hexadecimal (ejemplo: "#FFFFFF"), o bien su nombre (ejemplo: "white"). Este parámetro es opcional. Si no se especifica, no se aplicará ningún color de texto al día o días que se configuren en el resto de los parámetros de la función.

  • String DíasSemana: cadena con los números de día de 1 a 7 o letras para los días a los que se aplicará el estilo separados por comas:

    • De 1 a 7, día de la semana de lunes a domingo.

    • "H" o "T" para aplicar estilo al día de hoy (admitir mayúsculas y minúsculas). Ejemplo: "1,2,3,4,5".

    • "S" para aplicar estilo al día seleccionado en el calendario (admitir mayúsculas y minúsculas).

    • Este parámetro es opcional, si no se especifica, no se aplicará a ningún día.

  • String CadenaDiaMeses: cadena con los días y meses del año a los que se aplicará el estilo en todos los años, separados por comas y con el formato (d/M), ejemplo: "1/1,02/02,10/10". Este parámetro es opcional, si no se especifica nada, no se aplicará a ningún día/mes en concreto.

  • Array fechas: En este parámetro podremos especificar, o bien un dato de tipo fecha o bien un array con las fechas a las que aplicar el estilo. Este parámetro es opcional, si no lo aplicamos, no se aplicarán los colores configurados a ninguna fecha concreta.

Funciones de foco

void setFocusToFirst()

Sitúa el foco en el primer control del formulario.

void setFocusToNext()

Sitúa el foco en el siguiente control del formulario según el orden de tabulación establecido.

void setFocusToPrev()

Sitúa el foco en el anterior control del formulario según el orden de tabulación establecido.

Funciones de comandos

void accept()

Equivale al comando de botón Aceptar que graba el registro y cierra el formulario.

void acceptConfirm()

Equivale al comando de botón Aceptar controlado que graba el registro y cierra el formulario previa confirmación por parte del usuario.

void acceptNoClose()

Equivale al comando de botón Aceptar que graba el registro y no cierra el formulario. Esta función está pensada para dar altas continuas sin cerrar el formulario.

Esta función sólo es válida para formulario en cuadro de diálogo.

void cancel()

Equivale al comando de botón Cancelar que cierra el formulario sin guardar los cambios.

void cancelConfirm()

Equivale al comando de botón Cancelar controlado que cierra el formulario sin guardar los cambios previa confirmación por parte del usuario.

void closeForm()

Esta función sólo cierra el formulario. No guarda la información del registro. Si deseamos almacenar la información del registro antes de cerrar el formulario debemos usar la función saveRegister().

void eliminate()

Equivale al comando de botón Eliminar que borra el registro y cierra el formulario.

void eliminateConfirm()

Equivale al comando de botón Eliminar que borra el registro y cierra el formulario previa confirmación por parte del usuario.

Boolean saveRegister()

Guarda todos los cambios del registro. Esta función no cierra el formulario por lo que equivale a aplicar los cambios y seguir editando.

void undo()

Equivale al comando de botón Deshacer que retrocede todas las operaciones de la transacción en curso y cierra el formulario.

void undoConfirm()

Equivale al comando de botón Deshacer controlado que retrocede todas las operaciones de la transacción en curso y cierra el formulario previa confirmación por parte del usuario.

void updateControls()

Mueve los datos existentes en los campos del registro a los controles y refresca la información en el formulario. Es muy útil para refrescar los controles del formulario tras haber realizado cambios en la información de los registros que se están visualizando. Esta función no cierra el formulario.

void updateRegister()

Mueve los datos de los controles a los campos del registro y realiza la actualización del mismo. Esta función no cierra el formulario.

Funciones de maestros

void execEditMaster( String szIdCampoMaes, String szIdRefForm )

Ejecuta el comando de botón Edición de maestro asociado a un control.

Parámetros:

  • szIdCampoMaes: identificador del campo maestro.

  • szIdRefForm: identificador del formulario que se mostrará para la edición del registro.

void execFindMaster( String szIdCampoMaes, String szIdRefLocaliz )

Ejecuta el comando de botón Localizar maestro asociado a un control.

Parámetros:

  • szIdCampoMaes: identificador del campo maestro.

  • szIdRefForm: identificador del localizar que se mostrará para la selección del registro.

void execNewMaster( String szIdCampoMaes, String szIdRefForm )

Ejecuta el comando de botón Alta de maestro asociado a un control.

Parámetros:

  • szIdCampoMaes: identificador del campo maestro.

  • szIdRefForm: identificador del formulario que se mostrará para la edición del registro.

Ejemplos

1. Habilita todos los controles de un formulario

/**
 * --------------------------------------------------------------------------------
 * Habilita los controles del formulario
 *
 * @param {VFormDataView} formularioParam Formulario a procesar
 * --------------------------------------------------------------------------------
 */
var habilitaControles = function ( formularioParam )
{
    if ( formularioParam )
    {
        var control;

        for ( var numControl = 0; numControl < formulario.controlCount(); numControl ++ )
        {
            control = formulario.control( numControl );

            if ( control )
            {
                control.enabled = true;
            };
        };
    };
};

2. Deshabilita todos los controles de un formulario

/**
 * --------------------------------------------------------------------------------
 * Deshabilita los controles del formulario
 *
 * @param {VFormDataView} formularioParam Formulario a procesar
 * --------------------------------------------------------------------------------
 */
var deshabilitaControles = function ( formularioParam )
{
    if ( formularioParam )
    {        
        var tiposEnabled = [ VMainWindow.WTypeDataView, VMainWindow.WTypeMdiView, 
                             VMainWindow.WTypeWebView, VMainWindow.WTypeTabWidget,
                             VMainWindow.WTypeStackedWidget, VMainWindow.WTypeToolBox,
                             VMainWindow.WTypeSplitter, VMainWindow.WTypeGroupBox ];
        var control;

        for ( var numControl = 0; numControl < formulario.controlCount(); numControl++ )
        {
            control = formulario.control( numControl );

            if ( control )
            {
                tipo = theMainWindow.widgetType( control );
                if ( tiposEnabled.indexOf( tipo ) === -1 )
                {
                    control.enabled = false;
                };
            };
        };
    };
};

3. Cargar una ficha existente en un formulario de altas

Se trata de hacer que, en un formulario de altas de una tabla, el usuario introduzca un ID y ejecutar un manejador de evento que comprueba si existe la ficha. Si existe, editarla en el mismo formulario.

//Obtenemos el formulario en curso
form = theRoot.dataView(); 

//Obtenemos el idRef la tabla del formulario
var formInfo = form.objectInfo(); 
var tabla = formInfo.inputTable().idRef(); 

//Leemos el dato introducido en el campo ID del formulario
var ID = theRegisterIn.fieldToInt("ID");

//Buscamos el registro 
var lista = new VRegisterList(theRoot); 
lista.setTable(tabla); 
lista.load("ID", [ID]);

//Si existe el registro, lo añadimos a la ficha
if (lista.size() > 0 )
{
    newReg = new VRegister( theRoot ); 
    newReg.setTable( theRegisterIn.tableInfo().idRef()); 
    newReg = lista.readAt( 0 );
    form.setRegister( newReg ); 

    //forzamos el refresco de los controles del formuluario
    theRoot.dataView().updateControls();
}

Podemos crear un único script en el inspector de scripts y en el formulario simplemente crear un manejador de evento JavaScript que lo incluya. Ejemplo:

#include "(CurrentProject)/edit fch.js"

De este modo, un único script valdrá para cualquier formulario de cualquier tabla.

4. Comprobar si el formulario está incrustado como subformulario en otro formulario

var formulario = theRoot.dataView();
var esSubFormuario = formulario.isSubForm();

5. Desde un subformulario, ejecutar un manejado de evento que añade otro subformulario al el separador donde está incrustado

//Obtenemos el formulario principal
var formPrincipal = theRoot.dataView().mainForm();

//Accederemos al control separador

var idSeparador = "SEPARADOR";
var nuevoNombre = "Nuevo nombre";
var tabs = formPrincipal.control(idSeparador);

//Añadir un subformulario al separador
var form = tabs.addForm("Tutor de formularios/ARTICULO_SUB", "");
var titulo= tabs.setLabelText( 0, nuevoNombre );

6. Aceptar el formulario principal desde un subformulario del mismo

//Accedemos al formulario principal
var view = theRoot.dataView().mainForm();
 
//Aceptamos el formulario principal
view.accept();

7. Personalizar los días de calendarios de un formulario

Tenemos un formulario con variables locales definidas para establecer colores de fondo y texto de:

Días laborables (de lunes a viernes).

Fines de semana y festivos (sábados, domingos y festivos del año).

Para destacar los días 1 de cada mes.

Para destacar el día actual.

Para destacar el día seleccionado en el calendario.

Además, disponemos de una variable local array con las fechas de los días festivos del año.

Y el proceso ejecuta el script siguiente para personalizar los calendarios:

//Leer variables del formulario
var formulario = theRoot.dataView();

//Colores para días 1 de cada mes
var colorFondoDia1 = theRoot.varToString("COLOR_FONDO_DIA1");
var colorTextoDia1 = theRoot.varToString("COLOR_TEXTO_DIA1");

//Colores días laborables
var diasSemana = "1,2,3,4,5";
var colorFondoSemana = theRoot.varToString("COLOR_FONDO_SEMANA");
var colorTextoSemana = theRoot.varToString("COLOR_TEXTO_SEMANA");

//Colores para fines de semana y festivos
var diasFinde = "6,7";
var colorFondoFinde = theRoot.varToString("COLOR_FONDO_FINDE");
var colorTextoFinde = theRoot.varToString("COLOR_TEXTO_FINDE");

//Colore día actual
var colorFondoHoy = theRoot.varToString("COLOR_FONDO_HOY");
var colorTextoHoy = theRoot.varToString("COLOR_TEXTO_HOY");

//Colore día seleccionado
var colorFondoDiaSel = theRoot.varToString("COLOR_FONDO_DIA_SEL");
var colorTextoDiaSel = theRoot.varToString("COLOR_TEXTO_DIA_SEL");


var diasMeses = "1/1,1/2,1/3,1/4,1/5,1/6,1/7,1/8,1/9,1/10,1/11,1/12";

//Generar array de fechas
var tamArray = theRoot.varToInt("TAMAÑO");
var fechas = [];

for (var i = 0; i < tamArray; i++) {
  fechas.push( new Date(theRoot.varToDate("FECHAS_ARRAY", i)));
}

//Aplicar colores días laborables

formulario.setCalendarStyle(colorFondoSemana, colorTextoSemana, diasSemana);

//Aplicar colores días festivos y findes	

formulario.setCalendarStyle(colorFondoFinde, colorTextoFinde, diasFinde, null , fechas);

//Aplicar colores día 1 de cada mes
formulario.setCalendarStyle(colorFondoDia1, colorTextoDia1, null , diasMeses);

//Aplicar colores hoy
formulario.setCalendarStyle(colorFondoHoy, colorTextoHoy, "h");

//Aplicar colores día seleccionado
formulario.setCalendarStyle(colorFondoDiaSel, colorTextoDiaSel, "s");