Mariano Gómez, principal y fundador de Maximum Global Business, LLC. en Georgia (USA), MVP Dynamics GP, nos hizo el honor de aceptar colaborar en nuestro blog Dynamics Latam. Esperen más contribuciones de Mariano pronto…

 

¡Gracias y bienvenido Mariano!
 

 

Como crear un Ensamble con Interoperabilidad COM para uso con Microsoft Dexterity

 

Este es mi primer artículo para los desarrolladores y usuarios de Dynamics GP de Microsoft para la comunidad hispano parlante y agradezco de antemano a mis amigos de Microsoft por la oportunidad brindada.

Hace un tiempo atrás, estuve trabajando con un cliente en la industria aeroespacial. Mi cliente tenía la necesidad de crear algunas personalizaciones para integrar su sistema CAD con Microsoft Dynamics GP, por medio de unas interfaces realizadas en Dexterity. La personalización en cuestión necesitaba de una librería de funciones trigonométricas para hacer varios cálculos sofisticados, para obtener costos de materiales utilizados en la producción de varios componentes aeronáuticos.

Como es sabido, Dexterity es un ambiente de desarrollo para aplicaciones de negocios, por tanto, no fue dotado con todas las funciones matemáticas y estadísticas como las que se encuentran presentes dentro de C# o VB.NET. Para resolver este problema, recurrimos a .NET para crear un ensamble con interoperabilidad COM. La idea detrás de este proyecto, es la de aprovechar los métodos incorporados en la clase Math disponibles bajo el espacio System - System.Math. El siguiente es un pequeño extracto del código creado para el cliente:

 

//Creado por Mariano Gomez, MVP
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace TrigonometricFunctions
{
    public class TrigonometricFunctions
    {
        [GuidAttribute("8268A95E-6FCB-4FB2-88A1-1E38F49F4FB8"), ClassInterface(ClassInterfaceType.AutoDual)]
        public class TrigFn
        {
            // dx in degrees
            public double fSin(double dx)
            {
                double angle = Math.PI * dx / 180.0;
                // returns sin(dx)
                return Math.Sin(angle);
            }

            // dx in degrees
            public double fCos(double dx)
            {
                double angle = Math.PI * dx / 180.0;
                // returns cos(dx)
                return Math.Cos(angle);
            }

            // dx in degrees
            public double fTan(double dx)
            {
                double angle = Math.PI * dx / 180.0;
                // returns tan(dx)
                return Math.Tan(angle);
            }

        }
    }
}

 

Una vez creadas las funciones dentro de la clase TrigFn, el siguiente paso es configurar Visual Studio para compilar y exponer estas funciones para su llamado desde Dexterity a través de interoperabilidad COM. Como es sabido, Dexterity no puede hacer referencia directa a ensamblados .NET, por lo tanto estas funciones deben ser expuestas a través de COM.

 

 

No hubo necesidad de registrar el ensamble en forma manual. Tomamos ventaja de la capacidad que tiene Visual Studio para registrar el ensamblado para interoperabilidad COM bajo la pestaña de Build (Visual Studio versión en Inglés). Para efectos de demostración, he creado una simple ventana de Dexterity, como se muestra a continuación:

 

 

Luego procedí con la adición de las siguientes líneas de código al botón ‘(L) Sine’, el cual fue creado como una variable local a la ventana.

 

{ script: l_Sine_CHG }

local TrigonometricFunctions oTrig;
local currency angle, sine;

oTrig = new TrigonometricFunctions.TrigFn();

'(L) Prompt' = "The Sine value is ";
'(L) Conversion' = oTrig.fSin('(L) Angle');

En el código anterior, TrigonometricFunctions es un tipo de datos creado después de haber adjuntado el ensamblado de interoperabilidad COM TrigonometricFunctions como una Librería (Library) a nuestra aplicación de Dexterity. El tipo de datos hace referencia a la clase TrigonometricFunctions.TrigFn


Referencias:


·         Utilizando un ensamblado de .NET desde una aplicación basadas en Dexterity - haga clic aquí  

·         Microsoft Dynamics GP 10.0 Whitepaper: Como utilizar un ensamble.NET desde una aplicación Dexterity - haga clic aquí

Descargas:

Proyecto.NET de TrigonometricFunctions - haga clic aquí
Dexterity - Aplicación de Ejemplo   - haga clic aquí


Hasta la próxima!


MG.-
Mariano Gómez, MVP
Blog: http://dynamicsgpblogster.blogspot.com