Desarrollar código para ampliar un marco

Completado

Cuando necesite cambiar el comportamiento de un elemento, cree una extensión de ese elemento. Algunos elementos requieren la escritura de código para cambiar su comportamiento, como agregar un controlador de eventos. En otros casos, puede crear una extensión de clase para cambiar la composición de un elemento.

Extensiones de clase

Para ampliar la lógica empresarial relacionada con una tabla, cree una clase de aumento. Si desea agregar otro campo de id. a la tabla y rellenarlo, deberá crear un controlador de eventos de datos para el evento de inserción y luego implementar la lógica para rellenar el nuevo campo en ese controlador de eventos. Puede crear una clase que aumente la tabla y permita el acceso a los campos y métodos de la tabla de manera que sea fácil de leer. Al crear una extensión de clase, debe decorarla con el atributo ExtensionOf, usar el sufijo _Extension e indicar la clase como final.

El siguiente es un ejemplo de creación de una clase que extiende InventTable. Se pueden agregar métodos a esta clase aumentada en la que se utiliza el comentario.

[ExtensionOf(tableStr(InventTable))]
final class InventTableNew_Extension
{
 	public void newDefaultInventLocationId()
	 {
	 //enter your code here
	 }
}

Controladores de eventos

Un controlador de eventos es una forma de escribir o copiar código en un elemento que se ejecuta cuando se produce un determinado evento, como cuando se modifica un campo o se elimina un registro. Algunos elementos, como tablas y formularios, contienen un nodo Eventos en la ventana del diseñador que, cuando se expande, muestra todos los eventos asociados a ese elemento. Si necesita agregar un comportamiento adicional que no existe actualmente en un elemento, debe crear una extensión de ese elemento y luego agregar un controlador de eventos al elemento extendido.

A continuación se muestran métodos para controladores de eventos que se extraen de la tabla CustTable. Estos métodos se pueden copiar y agregar a su elemento o clase extendido haciendo clic con el botón derecho en el evento en la ventana del diseñador de elementos y seleccionando Copiar método del controlador de eventos.

Captura de pantalla de Visual Studio que muestra cómo copiar el método del controlador de eventos desde la ventana del diseñador de tablas

  • Evento OnDeleted: se trata de un controlador posterior al evento que se desencadena cuando se elimina un registro de la tabla. Puede usarlo, por ejemplo, para mostrar un mensaje Registro de información después de eliminar un registro.
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::Deleted)]
public static void CustTable_onDeleted(Common sender, DataEventArgs e)
{
}
  • Evento OnInserting: este se desencadena cuando se están insertando datos. Por ejemplo, este podría activarse cuando agrega un nuevo cliente a las aplicaciones de finanzas y operaciones.
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::Inserting)]
public static void CustTable_onInserting(Common sender, DataEventArgs e)
{
}
  • Evento OnValidatedWrite: se trata de un controlador posterior al evento que se desencadena después de introducir datos. Este se utiliza para validar los datos que se están escribiendo en una página, como asegurarse de que un cliente tenga al menos 18 años verificando una fecha de nacimiento.
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::ValidatedWrite)]
public static void CustTable_onValidatedWrite(Common sender, DataEventArgs e)
{
}

Cadena de comando

Puede ajustar la lógica a los métodos que se definen en la clase base que está aumentando. También puede ampliar la lógica de métodos públicos y protegidos sin tener que usar controladores de eventos.

Al ajustar un método, puede obtener acceso a métodos públicos y protegidos, así como a variables de la clase base. Mediante el uso de un contenedor alrededor de un método y la palabra clave next se crea una cadena de comando (CoC).

La CoC es un patrón de diseño en el que una solicitud es gestionada por una serie de receptores. Una clase de extensión se utiliza para ajustar métodos protegidos o públicos de clases, tablas, entidades de datos y formularios. Debe tener en cuenta algunas restricciones al ajustar métodos:

  • El método de contenedor debe tener la misma firma que el método base.
  • Cuando aumenta las clases de formulario, solo se pueden ajustar métodos de nivel de raíz, no métodos definidos en clases anidadas.

Se requieren métodos de contenedor en una clase de extensión para llamar siempre a next para que siempre se llame al método next en la cadena y, finalmente, a la implementación original. Este proceso garantiza que cada método en la cadena se factorice en el resultado. El método debe llamar a next() sin condiciones.