0% encontró este documento útil (0 votos)
25 vistas

Develop Object-Oriented Code in Finance and Operations Apps

Cargado por

Eduardo Henry
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
25 vistas

Develop Object-Oriented Code in Finance and Operations Apps

Cargado por

Eduardo Henry
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 11

Desarrollar código orientado a

objetos en aplicaciones de Finance


and Operations
Objetivos de aprendizaje
En este módulo, usted:
• Descubra la importancia de la programación orientada a objetos para las
aplicaciones de Finance and Operations.
• Aprende la importancia de las clases abstractas y la herencia en la
programación orientada a objetos.
• Obtén información sobre las interfaces.
• Utilice la cadena de mando (CoC).
• Obtén información sobre cómo se implementa el alcance en el código X++.
• Determine cuándo usar referencias y valores.
Prerrequisitos
• Conocimientos básicos de Visual Studio
• Comprensión básica de X++

Introducción
Los objetos tienen atributos (datos) y comportamiento (métodos).

Al desarrollar con un lenguaje orientado a objetos, primero deberá definir los objetos a
manipular y cómo se relacionan entre sí. Las aplicaciones de Finance and Operations se
desarrollan utilizando el lenguaje orientado a objetos X++, que proporciona clases de
sistema para una amplia gama de áreas de programación de sistemas.

Explorar la herencia y las clases


abstractas
Las clases de herencia y las clases abstractas son dos construcciones de programación
importantes que se encuentran en los lenguajes de programación orientados a objetos.
Estos conceptos se utilizan para crear relaciones padre-hijo entre clases. La herencia
permite que una subclase extienda una superclase. La subclase hereda todos los atributos
y métodos de la superclase. Las subclases también pueden invalidar el comportamiento
de los métodos heredados de la superclase o agregar más funcionalidad.

Herencia
Para comprender mejor el concepto de herencia en la programación orientada a objetos,
revisemos un ejemplo del mundo real. En este ejemplo, Vehicle es la clase principal. Hay
muchos tipos diferentes de vehículos, por ejemplo: automóviles, autobuses y camiones.
En este escenario, Vehicle es la clase principal. Los automóviles, autobuses y camiones
son clases derivadas que heredan del vehículo. La clase Vehicle tiene características que
se comparten entre todos los tipos de vehículos (velocidad, color y marchas, por ejemplo).
Las características para cada uno de los tipos de vehículos pueden ser diferentes. Por
ejemplo, un camión puede tener tracción total, pero un automóvil no.

En el ejemplo siguiente se muestra cómo una clase utiliza la herencia. La clase Car
extiende la clase Vehicle para obtener la altura y el ancho, pero también agrega el número
de pasajeros variable.
Abstracto
Las clases abstractas se identifican mediante la palabra clave abstract. No se pueden crear
instancias, pero requieren una subclase heredada de la clase abstracta. Las clases
abstractas se utilizan para implementar un concepto que luego completará la subclase.
Los métodos abstractos también se pueden declarar en clases abstractas. Los métodos
abstractos no permiten código ni declaraciones en el método. Una subclase debe extender
la clase abstracta para usar el método abstracto.

Ejemplo

El siguiente es un ejemplo de una clase abstracta.

La clase Coche amplía la clase abstracta Vehículo. Esto permite que la clase Car anule el
método printInfo () y le permite agregar funcionalidad al método operar () que no se
incluyó en la clase abstracta.

Usar atributos
Los atributos representan o almacenan metadatos sobre el comportamiento de clases y
métodos. Se puede adjuntar un atributo simplemente escribiendo el nombre del atributo
que está encerrado entre corchetes antes de la declaración de class / function donde debe
aplicarse.
Ejemplo

Por ejemplo, el atributo SysObsoleteAttribute (mensaje, setError) se puede utilizar en


métodos o clases que ya no deberían utilizarse. Durante el proceso de compilación, se
notificará al usuario con un mensaje detallado que aparece en las ventanas de salida. El
primer parámetro es el mensaje y el segundo parámetro indica si se debe establecer un
error (verdadero) o una advertencia (falso). Puede hacer que el compilador rechace o
muestre una advertencia.

Si la API ya no funciona, establezca isError = true en el atributo SysObsoleteAttribute


para que el compilador informe cualquier uso de esa API como un error del compilador.

Clases de atributos
Los atributos también se pueden crear utilizando clases de atributos. Para crear una clase
de atributo, amplíe la clase SysAttribute agregando extender SysAttribute al final de su
declaración de clase. A continuación, puede decorar una clase con el atributo que se creó
a partir de la clase de atributo. Puede especificar los parámetros de atributo del
constructor. En el siguiente código, se crea la clase de atributo PracticeAttribute y luego
la clase RegularClass usa PracticeAttribute como atributo.

Ejemplo

El siguiente ejemplo muestra la declaración y el diseño de una clase de atributo ordinaria


que podría crear.
Los atributos tienen muchos usos, incluidos los siguientes:

• Usar el atributo WebMethod en los servicios web para indicar si el método debe
ser invocable a través del Protocolo simple de acceso a objetos (SOAP) para
intercambiar información.
• Usando DLLImportAttribute para llamar a código no administrado.
• Describir el título, la versión, la descripción o la marca comercial de un
ensamblaje.
• Describir cómo asignar entre clases, miembros y nodos de Lenguaje de marcado
extensible (XML) para la serialización.
• Describir los requisitos de seguridad de los métodos.
• Especificar características para reforzar la seguridad.
• Obtener información sobre la persona que llama a un método.

Implementar la cadena de Mando


La cadena de mando (CoC) es una funcionalidad para extensiones de clase. Puede utilizar
CoC para ajustar el código X++ alrededor de los métodos definidos en la clase base. CoC
le permite personalizar clases estándar sin usar controladores de eventos. Esta función le
permite agregar lógica personalizada que se ejecutará antes y/o después de que se ejecute
el código estándar. Solo puede ampliar la lógica de los métodos públicos y protegidos. Al
ajustar un método, también puede tener acceso a los métodos protegidos, los métodos
públicos y las variables de la clase base. Es importante comprender este concepto, ya que
el código base no se puede cambiar en el desarrollo de aplicaciones de Dynamics 365
Finance and Operations.
Para usar CoC, debe crear una nueva clase que use el mismo nombre que la clase que está
ampliando con _Extension added al nombre como sufijo. La declaración de clase también
necesita usar la palabra clave final para indicar que no se puede heredar más. Finalmente,
el atributo ExtensionOf debe usarse cuando declara la clase. Luego, puede reutilizar la
misma declaración de método de la clase base en la clase extendida. Dentro del método
extendido, puede agregar su código personalizado. Debe utilizar la siguiente palabra clave
para crear un CoC. El siguiente comando llamará al siguiente método en la Cadena de
comando. Cuando no existen más métodos en la cadena, se llama al método original (en
otras palabras, extendido).

Ejemplo
El siguiente ejemplo de código muestra cómo se debe declarar la clase para usar CoC.
Cuando se llama al método ExampleClass.doSomething (), el código primero ejecutará
todo el código antes de la siguiente palabra clave. Luego, se ejecutará el código original
en el método ExampleClass.doSomething (). Finalmente, se ejecutará todo el código
después de la siguiente palabra clave.
Ciertos métodos no se pueden ajustar mediante CoC. Si el método utiliza un atributo
hookableque se establece en falso, [hookable (false)], o un atributo hookable que se
establece en falso, [hookable (false)], el método no se puede envolver. Los métodos que
utilizan la palabra clave final no se pueden incluir en una clase de extensión. Los métodos
privados también están excluidos de la extensibilidad.

Implementar identificadores de
acceso y alcance de X++
El alcance es el área donde se encuentra un elemento o se puede acceder a él. Las variables
y métodos de X ++ están dentro de un alcance definido. El alcance se puede establecer
mediante la colocación de la declaración y el uso de identificadores de acceso.
Los identificadores de acceso son [public], [protected] y [private].
Public: los métodos que se declaran como public se pueden llamar desde cualquier lugar
donde la clase sea accesible. Además, un método público puede ser anulado por una
subclase a menos que el método se declare como final.
Protected: los métodos que están protegidos se pueden anular en subclases. Los métodos
que se declaran como protegidos solo se pueden llamar desde:
• Métodos en la clase.
• Métodos en una subclase de la clase que contiene el método protegido.
Private: los métodos que se declaran como privados solo se pueden llamar desde métodos
en la clase donde se declara el método privado. No se puede anular ningún método
privado en una subclase. Cuando crea un nuevo método, la palabra clave de acceso
predeterminada que aparece en el editor de código es privada. Este es el valor
predeterminado más conservador para máxima seguridad.

Internal
Internal es una palabra clave en X ++. Tiene la misma semántica que en C #, consulte
interno (Referencia de C #).
Cuando selecciona una clase o método como interno, solo se puede acceder desde dentro
del modelo donde está definido.

observe que también puede definir métodos internos en clases públicas.

Variables de instancia
Las variables de instancia tienen un gran alcance y también se conocen como campos de
clase en X ++. Estas variables se declaran en la declaración de la clase y se puede acceder
a ellas desde cualquier método de la clase y subclases que extienden la clase, si están
declaradas públicas o protegidas.

Variables locales
Las variables locales tienen un alcance pequeño. Estas variables se definen en un método
y solo se puede acceder a ellas en ese método.
Los parámetros son un tipo de variable local que se define en un método.
Para utilizar una variable de un ámbito a otro ámbito, la variable debe pasarse mediante
el uso de parámetros. Los métodos pueden utilizar varios parámetros. Los parámetros se
tratan como variables locales y se inicializan con el valor del parámetro en la llamada al
método. En el siguiente ejemplo, el método de clase tiene dos parámetros. Esto le da al
método1 acceso a cuatro variables. Se puede acceder a las variables de instancia a y b, y
los parámetros x e y actúan como variables locales. El uso de parámetros permite asignar
valores a esos parámetros cuando se llama al método. Si se llama al método1 mediante el
código Test.method1 (a, b);, a la variable “x” se le asignará el valor Car y a la variable
“y” se le asignará el valor 20. Luego, puede usar los valores de las variables de parámetro
para asignar valores a las variables de instancia c y d.
Tenga en cuenta que cuando pasa un valor a través de parámetros, por defecto no cambia
el valor de la variable original. El término para esto es "llamada por valor" en
contraposición a "llamada por referencia". Solo se cambia la variable local.

Ejemplo
En el siguiente ejemplo, el método2 tiene una variable local a con un valor de 5. La
primera instrucción info () muestra el valor de a, que es 5. Llama al método1 y pasa el
valor de su variable local a. Method1 ahora tiene una variable local diferente a, con el
valor de 5. Method1 luego incrementa el valor en uno, haciendo a el valor de 6. La
declaración info () muestra el valor de 6. El código volverá a method2 y ejecute la segunda
instrucción info (). Esto mostrará un valor de 5. Esto se debe a que, aunque el nombre de
la variable es el mismo, el alcance es único para sus métodos respectivos.

La siguiente imagen muestra cómo se muestra la información en la interfaz de usuario.

Interfaces
Una interfaz es una especificación para un conjunto de métodos de instancia públicos.
Una interfaz define y refuerza las similitudes entre clases no relacionadas sin tener que
derivar una clase de la otra. Todas las interfaces son públicas, incluso si no agrega
explícitamente la palabra clave pública delante de la palabra clave de la interfaz en el
código classDeclaration. Los métodos de una interfaz también son públicos.
Para crear una interfaz, siga estos pasos:

En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y luego


seleccione Agregar.
En el cuadro de diálogo Nuevo elemento, seleccione Interfaz y luego ingrese un nombre
para la interfaz.
Seleccione Agregar.
Cuando agrega la palabra clave implements en una declaración de clase, la clase debe
declarar los métodos que especifica la interfaz. Una declaración de clase puede
implementar múltiples interfaces. Enumere las interfaces después de la aparición única
de la palabra clave implements y separe los nombres de las interfaces mediante comas.
Todos los métodos de interfaz que implementa una clase deben declararse explícitamente
como públicos mediante el uso de la palabra clave pública en la clase. Una clase que
implementa una interfaz también debe declararse como pública. Una interfaz puede
extender otra interfaz usando la palabra clave extiende. Sin embargo, una interfaz no
puede extender más de una interfaz.

Ejemplo de interfaz
En el siguiente ejemplo, una clase de automóvil implementa una interfaz IDrivable. La
palabra clave “is” es compatible y le permite probar si una clase implementa una interfaz.
X++
public interface IDrivable
{
public int getSpeed()
{
}

public void setSpeed(int newSpeed)


{
}
}

class Automobile implements IDrivable


{
int m_speed;

public int getSpeed()


{
return m_speed;
}

public void setSpeed(int newSpeed)


{
m_speed = newSpeed;
}
}
class UseAnAutomobile
{
void DriveAutomobile()
{
IDrivable yourIDrivable;
Automobile myAutomobile;
str sTemp = "object is not an IDrivable";

myAutomobile = new Automobile();

if (myAutomobile is IDrivable)
{
yourIDrivable = myAutomobile;
yourIDrivable.setSpeed(42);
sTemp = int2str(yourIDrivable.getSpeed());
}

Global::info(sTemp);
return;
}
}

crear una extensión mediante la


cadena de mando
Es un desarrollador que debe personalizar el método de inserción CustTable. Tras la
creación del cliente, si la calificación crediticia del cliente es inferior a 200, entonces el
cliente debe bloquearse para todas las entregas y facturación. Debería aparecer un
mensaje para alertar a la persona que está ingresando los detalles del cliente.
Antes de que empieces
Para aprovechar al máximo este ejercicio, le recomendamos que tenga los datos de
muestra estándar disponibles en las aplicaciones Finance and Operations instaladas
mediante Lifecycle Services (LCS). También necesitará un entorno de desarrollador y
una licencia de prueba o permanente para usar Visual Studio.

Crea un nuevo proyecto


• Abra Visual Studio, ejecutándose como administrador, y abra el menú Archivo.
• Seleccione Nuevo> Proyecto.
• En el cuadro de diálogo Nuevo proyecto, asegúrese de que Dynamics 365 esté
seleccionado en el panel izquierdo en Plantillas.
• En el panel central, seleccione Operaciones financieras.
• Denomine el proyecto ChainOfCommand.
• Seleccione Aceptar.
• Abra el menú de Dynamics 365 en la cinta.
• Seleccione opciones.
• En el nodo de Dynamics 365 en el panel izquierdo, seleccione Proyectos.
• Seleccione las casillas de verificación para Organizar proyectos por tipo de
elemento y Sincronizar la base de datos en la compilación para el proyecto recién
creado.
• Seleccione Aceptar.
• En el Explorador de soluciones, haga clic con el botón derecho en el nombre de
su proyecto y seleccione Propiedades.
• En la página de propiedades, cambie el campo Modelo a Gestión de flotas.
• Seleccione Aceptar.
• Ahora debe asegurarse de tener las referencias correctas.
• Vaya al menú de Dynamics 365.
• Seleccione Gestión de modelos> Actualizar parámetros del modelo.
• En el menú desplegable Nombre del modelo, seleccione Gestión de flotas.
• Seleccione Siguiente.
• En la página Paquetes de referencias seleccionados, asegúrese de que Directory y
Application Suite estén marcados.
• Una vez terminado, seleccione Finalizar.

Cree una extensión de un método en la clase CustTable


• En la ventana del Explorador de soluciones, haga clic con el botón derecho en el
proyecto ChainOfCommand.
• Seleccione Agregar> Nuevo elemento.
• En el panel izquierdo, seleccione Elementos de Dynamics 365.
• Seleccione Clase en el panel central.
• Introduzca CustTable_Extension como nombre.
• Seleccione Agregar.
• En la clase CustTable_Extension, agregue el siguiente código para establecer el
campo Facturación y entrega en espera en Todos y para mostrar un mensaje
después de la inserción.

• Salva la clase.
• Construye el proyecto.

También podría gustarte