Si bien es muy probable que ya muchos lo sepan, pero me gustaría
comentar ciertas limitaciones del entorno de programación lenguaje X++ que en
un comienzo yo no conocía y que pueden ser muy útiles de saber para otros
desarrolladores.
Debe existir unas
cuantas más, así que conocen bienvenido el comentario.
No se puede
reutilizar el código de un formulario por el siempre hecho de que los
formularios no son verdaderas clases
Es decir si hacen
la simple prueba de cambiar el extends ObjectRun por object, implementar un
interfaz o cambiar nombre no verá ningún resultado palpable.
Tampoco se puede
implementar un comportamiento genérico para cierto formulario, aunque hay
algunos trucos para lograrlo.
En fin,
resumiendo, los forms no son clases, sino simplemente un esquema de árbol que
especifica como debe construirse una interfaz grafica a partir de objetos
concretos con botones, cajas de texto, etc.
Estas limitaciones
también aplican a los formularios que tienen el mismo comportamiento.
Esta forma de construcción
de estos elementos me hace recordar un poco a la programación orientada a
prototipos, claro que es una versión simplificada y muy práctica.
Ciertas clases
no son accesibles al programador X++
Si bien gran parte
de la lógica del sistema está escrita en X++, existen clases de kernel que no
pueden ser modificadas.
Un ejemplo de
ellas son todas las que empiezan con x*. XRecord, XSession, etc.
El límite no es
del todo claro. Algunas veces y se pueden llegar a encontrar puertitas para introducir
código en procesos centrales del sistema.
Todas las
tablas comparten una definición común (Common)
Esta definición
permite que todas las tablas, por ejemplo, puedan llevar un campo que
identifique la empresa, fecha y hora de creación, modificación, ect.
Pero a pesar de
que ayudaría mucho, no existe un mecanismo para agregar campos por defecto a nuestras
tablas modificando la tabla base common.
Un
formulario/reporte es un objeto indivisible
Usando el
comparador se pueden detectar algunas limitaciones en la detección de cambios.
Por ejemplo si modificamos
un método dentro de una tabla, funcio no distinge capas.
El lenguaje X++ no es 100% orientado a
objetos
No existe el polimorfismo.