Importar bibliotecas Java y .NET personales
En MapForce puede importar archivos de clases Java compilados y archivos de ensamblados .NET (incluidos los ensamblados .NET 4.0). Si las bibliotecas importadas contienen funciones que usan tipos de datos básicos como parámetros y que devuelven tipos simples, dichas funciones aparecerán en la ventana Biblioteca y se podrán usar en los diseños de asignación de datos como cualquier otra función de MapForce. El resultado de las asignaciones de datos que incluyen funciones Java y .NET importadas se puede ver en el panel Resultados y las funciones estarán disponibles en el código generado. Para prender más sobre cómo importar bibliotecas personales consulte los ejemplos Ejemplo: importar clase Java personales e Ejemplo: importar ensamblado .NET DLL personal.
Tenga en cuenta que:
•para importar funciones Java o .NET personales necesitará los archivos de clases Java compilados (.class) o los archivos de ensamblados .NET. No se pueden importar archivos Java .jar ni archivos .dll que no sean ensamblados .NET.
•los archivos de ensamblados .NET se pueden importar si el lenguaje de transformación seleccionado es C#. Los ensamblados .NET también pueden estar escritos en lenguajes .NET como C++.NET o VB.NET, siempre y cuando solamente usen como parámetros tipos de datos básicos de System Assembly y tipos devueltos (véase Funciones .NET compatibles).
•si quiere usar funciones .NET personales en la vista previa del resultado (en el panel Resultados), esas funciones deben estar compiladas para .NET Framework 4.x o .NET Standard 2.0.
•los archivos de clases Java compilados (.class) se pueden importar si el lenguaje de transformación seleccionado es Java. Es necesario tener instalado Java Runtime Environment 7 o superior. Solamente son compatibles ciertos tipos y miembros (véase Funciones Java compatibles).
•si la asignación usa archivos de clases Java o ensamblados .NET importados, no podrá seleccionar el lenguaje de transformación C++.
•si la asignación usa archivos de clases Java o ensamblados .NET importados, no podrá seleccionar el lenguaje de transformación XSLT (deberá escribir una función XSLT personal que haga de adaptador).
•la importación de funciones de ensamblados C++ nativos tiene algunas limitaciones y requiere un procedimiento especial (véase Referencias manuales a bibliotecas Java, C# y C++ personales).
•todas las funciones a las que llame una asignación de MapForce deben devolver el mismo valor cada vez que se llame a la función con los mismos parámetros de entrada. El orden exacto y el número de veces que MapForce llama a una función es indefinido.
•en el caso de los archivos de clases Java importados y de sus paquetes, no es necesario que se añadan a la variable CLASSPATH porque el motor de ejecución integrado y el código Java de salida agregarán automáticamente los paquetes importados a la variable classpath del motor Java o a Ant. Sin embargo, las dependencias de los archivos de clases y paquetes importados no se resolverán automáticamente. Por tanto, si los archivos de clases o paquetes Java dependen de otros archivos de clases, deberá agregar los directorios primarios de todos los paquetes dependientes a la variable de entorno CLASSPATH.
Funciones Java compatibles
Clases de nivel superior, clases de miembro estáticas y clases de miembro no estáticas:
•new <nombreClase>(<arg1>, <arg2>, ...)
•<objeto>.new <clase-miembro>(<arg1>, <arg2>, ...)
Funciones de miembro y estáticas:
•<función>(<arg1>, <arg2>, ...)
•<objeto>.<método>(<arg1>, ...)
Conexiones compatibles entre tipos XML Schema y tipos Java:
Tipo XML Schema | Tipo Java |
---|---|
xs:string | String |
xs:byte | byte |
xs:short | short |
xs:int | int |
xs:long | long |
xs:boolean | boolean |
xs:float | float |
xs:double | double |
xs:decimal | java.math.BigDecimal |
xs:integer | java.math.BigInteger |
Las conexiones pueden hacerse en ambas direcciones. Los demás tipos Java (incluidos los tipos matriz) no son compatibles. Los métodos que usen dichos parámetros o valores devueltos se omitirán. Se pueden usar tipos de objeto llamando a su constructor o como valor devuelto de un método. Se pueden asignar a otros métodos Java, pero no se puede manipular el objeto en MapForce.
Funciones .NET compatibles
Clases de nivel superior y clases de miembro:
•new <nombreClase>(<arg1>, <arg2>, ...)
Funciones de miembro y funciones estáticas:
•<función>(<arg1>, <arg2>, ...)
•<objeto>.<método>(<arg1>, ...)
Conexiones compatibles entre tipos XML Schema y tipos .NET/C#:
Tipos XML Schema | Tipos .NET | Tipos C# |
---|---|---|
xs:string | System.String | string |
xs:byte | System.SByte | sbyte |
xs:short | System.Int16 | short |
xs:int | System.Int32 | int |
xs:long | System.Int64 | long |
xs:unsignedByte | System.Byte | byte |
xs:unsignedShort | System.UInt16 | ushort |
xs:unsignedInt | System.UInt32 | uint |
xs:unsignedLong | System.UInt64 | ulong |
xs:boolean | System.Boolean | bool |
xs:float | System.Single | float |
xs:double | System.Double | double |
xs:decimal | System.Decimal | decimal |
Las conexiones pueden hacerse en ambas direcciones. Los demás tipos .NET/C# (incluidos los tipos matriz) no son compatibles. Los métodos que usen dichos parámetros o valores devueltos se omitirán. Se pueden usar tipos de objeto llamando a su constructor o como valor devuelto de un método. Se pueden asignar a otros métodos .NET, pero no se puede manipular el objeto en MapForce.
Tipos de datos: problemas y soluciones
Si una función de una biblioteca personal espera tipos enteros y usted conecta constantes de tipo "Número" a los argumentos de la función, puede ocurrir un error de incompatibilidad parecido a este:
No match for MyCustomClassLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.MyCustomClassLibrary.Converter.AddValues(MyCustomClassLibrary.Converter, xs:decimal, xs:decimal). Check argument types. Este problema ocurre solamente con las constantes de tipo "Número". A continuación puede ver una asignación de ejemplo que podría producir este error. En la asignación hay dos constantes de tipo "Número" conectadas a los argumentos de la función (de tipo "Entero").
Existen varias soluciones:
1.Cambie el tipo de la constante de "Número" a "Demás opciones". (Para ello haga doble clic en la barra de título de la constante.)
2.En lugar de una constante, use un componente de entrada (por ejemplo, un archivo XML) que pase valores del tipo que espera la función.
3.En su código externo cree una función contenedora que acepte un valor decimal y devuelva un valor entero. Esta solución se puede importar como una biblioteca por separado, por lo que no es necesario cambiar el código fuente original de la función de destino para usar esta solución.