Introducción
En Axapta podemos encontrar métodos en todos los objetos de la aplicación, y por lo tanto, en las tablas. Éstas disponen de una serie de métodos que controlan su funcionalidad básica. Además de estos métodos, el programador puede añadir aquéllos que considere necesarios. Sin embargo, debe ajustarse a unos estándares de desarrollo.
En Axapta, existen una serie de procedimientos de desarrollo estándar que son muy importantes. Éstos nos determinan la forma de trabajar, con el objetivo de facilitar la programación, la comprensión del código y la revisión del mismo por parte de personas distintas a las que han realizado el desarrollo inicial. Por eso es de vital importancia que siempre nos ajustemos lo más posible a los estándares definidos.
Un primer punto importante a señalar, es que no debemos escribir código en X++ para solucionar problemas que pueden ser resueltos mediante las propiedades de los objetos, ya que es una pérdida de tiempo y un esfuerzo de desarrollo inútil.
Por otro lado, el código escrito en los métodos de las tablas debe estar directamente relacionado con la tabla. Si no es así debemos plantearnos la posibilidad de escribir el código en otras partes del sistema.
Para aquellas tablas que tengan una clave primaria, SIEMPRE debemos crear los métodos estándar que se describen en los siguientes apartados.
Método FIND
El método find nos sirve para encontrar un registro determinado de una tabla, a partir de un valor del campo que sea la clave principal de la misma. Se trata de un método estático y que recibe los siguientes parámetros de entrada:
- La clave de la tabla
- Un booleano opcional utilizado para indicar si se van a realizar una actualización del registro seleccionado
El método find de todas las tablas sigue la misma estructura. Veamos un ejemplo:
Ejemplo
static CustTable find(CustAccount custAccount,
boolean _forUpdate = false)
{
CustTable custTable;
;
if (custAccount)
{
custTable.selectForUpdate(_forUpdate);
select firstonly custTable
index hint AccountIdx
where custTable.accountNum == custAccount;
}
return custTable;
}
El hecho de que find sea un método estático nos facilita la tarea de buscar un registro de la tabla desde cualquier lugar del sistema, sin necesidad de tener una instancia de la tabla CustTable. La forma de ejecutar el método sería por lo tanto la siguiente:
CustTable::find(customer)
Donde customer sería una variable del tipo CustAccount que contendría el valor de la clave del registro que queremos buscar.
Método EXIST
El método exist es un método que nos indica si un registro determinado existe en la tabla, a partir de un valor del campo que sea la clave principal de la misma. Se trata de un método estático que tiene como parámetro de entrada el siguiente:
- La clave de la tabla
Ejemplo
static boolean exist(CustAccount custAccount)
{
return (custAccount && CustTable::find(custAccount).recID != 0);
}
En el ejemplo se puede observar que se realiza una llamada al método find. Resulta evidente que es mucho más eficaz reutilizar el código existente que reescribir la instrucción de selección.
Método TXTNOTEXIST
El método TxtNotExist nos devuelve un texto estático que utilizamos como mensaje de error.
Ejemplo
static str 80 txtNotExist()
{
return "@SYS9779";
}
La etiqueta del ejemplo corresponde al texto “La cuenta %1 no existe”.
- Siempre que introduzcamos una cadena de texto en el código deberemos utilizar etiquetas.
Método CHECKEXIST
El método checkExist nos indica si un registro determinado existe en la tabla, a partir de un valor del campo que sea la clave principal de la misma. Si el registro no existe, devuelve un mensaje de error. Se trata de un método estático que recibe el siguiente parámetro de entrada:
- La clave de la tabla
Ejemplo
static boolean checkExist(CustAccount custAccount)
{
if (custAccount && !CustTable::exist(custAccount))
return checkFailed(strfmt(CustTable::txtNotExist(),custAccount));
return true;
}
Como se observa en el ejemplo, el método checkExist hace uso de los métodos exist y txtNotExist descritos anteriormente.
También hace referencia a un metodo de la clase Global checkFailed
Volver |