Implementar un External Object para SmartDevices Genexus 16
Antes de comenzar a trabajar en esta implementación, primero hay que tener claro que tipo de objecto vamos a crear o que funcionalidad queremos tener, en mi caso tube la necesidad de implementar un impresion desde un app hacia una impresora Mini.
Primero desarrolle la APP en el entorno de Android utilizando el Android Studio, hice las pruebas de impresion, y una vez que logre crear la app y que me funcionara, hice la migracion de ese codigo y librerias para usarlas en genexus Evol3, luego hice la migracion a Genexus 16 U7, aca les detallo paso a paso como lo implemente.
Cree una carpeta con los componente del proyecto que me registro mi Android Studio, las carpetas basicas como Library, Gradle, y los archivos necesarios.
Adjunto dejare el enlace para que descarguen este proyecto.
Hay que ubicar las carpeta library, hasta llegar a las carpeta de main\Java\com\example\samplemodule (Estos nombres dependeran de los nombres originales de los modulos segun criterio)
Los archivos mas importantes para este External object, son PrintToBluetooth.java y SampleModule.Java
PrintToBluetooth.Java contiene toda la codificacion para la impresion, y el SampleModule.Java contiene la relacion del modulo y la sincronizacion con Genexus
Dentro del archivo PrintToBluetooth
@Override
public @NonNull
ExternalApiResult execute(String method, List<Object> params)
{
List<String> parameterValues = toString(params);
if (method.toLowerCase().startsWith("imprimir")) {
final String PrintName = parameterValues.get(0);
final String PrintText = parameterValues.get(1);
int lresultado;
int lresultado2;
lresultado = imprimir(PrintName,PrintText);
if (lresultado==1){
result = 0;
}else {
lresultado2 = imprimir(PrintName,PrintText);
if (lresultado2==1){
result = 1;
}else {
result = Error;
}
}
}else if (method.toLowerCase().startsWith("cerrar")) {
boolean lresultadocerrar;
lresultadocerrar= closeBT();
if (lresultadocerrar==true){
result = 0;
}else {
result = Error;
}
}
return ExternalApiResult.success(result);
}
Estas lineas son fundamentales para que el external object, pueda ser reconocido por genexus,
el constructor y el ExternalAPIResult.
y en el archivo Samplemodule.java se debe relacionar el Archivo BASE Java.
@Override
public void initialize(Context context) {
ExternalApiDefinition printToBluetooth = new ExternalApiDefinition(
PrintToBluetooth.NAME,
PrintToBluetooth.class
);
ExternalApiFactory.addApi(printToBluetooth);
Estos son los primeros pasos basicos para poder crear el external object.
Luego, que hemos terminado, hay que registrar donde estan las Dll de compilacion del generador
del external object para genexus.
del external object para genexus.
Que archivos hay que modificar para que funciona.
Dentro de la carpeta PrintToBluetooth\library
hay un archivo llamada build.gradle
repositories {
maven { url "file:///C://Program%20Files%20(x86)//GeneXus//GeneXus16//Android/m2Repository" }
google()
jcenter()
maven { url "https://jitpack.io" }
}
Se deben modificar el maven la url de la ubicacion de nuestros repositorios de genexus, aca
se toman la librerias de sincronizacion.
Otro de los archivo a revisar y asegurarse que las ubicacion sean correctas
es en la carpeta raiz de PrintToBluetooth, aca buscar el archivo gradle-mvn-push.gradle
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file:///C://Program%20Files%20(x86)//GeneXus//GeneXus16//Android/m2Repository")
}
}
Igual asegurarse que las ubicaciones de la url esten correctamente mapeadas.
una vez que tenemos esta informacion correcta, bien el procedimiento que debemos ejecutar
para que se compile y se integre al genexus.
Dentro de la carpeta: C:\Program Files (x86)\GeneXus\GeneXus16\Libraries\SampleLibrary
Samplelibrary es el nombre de nuestro proyecto principal, aca hay que agregar
en el archivo samplelibrary el redireccionamiento de el object external.
Otro paso muy importante es agregar los permisos de uso de bluetooth para nuestra app, para eso
hay que ubicar el archivo C:\Program Files (x86)\GeneXus\GeneXus16\Android\Templates\ApplicationProject\src\main
editar el siguiente archivo
usespermission.Extension.AndroidManifest.xml
y agregarle las siguientes lineas de codigo
y aca ya listo. estamos para generar nuestra aplicacion
Entrar a windows en modo comando, y en la carpeta de printtobluetoth
Microsoft Windows [Versión 10.0.17134.228]
(c) 2018 Microsoft Corporation. Todos los derechos reservados.
C:\WINDOWS\system32>cd..
C:\Windows>cd..
C:\ModelosGx15\PrintToBluetooth>dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: 201B-3B0C
Directorio de C:\ModelosGx15\PrintToBluetooth
Ejecutar el comando: gradlew uploadArchives
Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.6.3/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 8s
25 actionable tasks: 1 executed, 24 up-to-datees of :library:releaseCompileClasspath > Transform artifact core.aar (and
C:\ModelosGx15\PrintToBluetooth>
El resultado deberia ser SATISFACTORIO, y listo, ahora solo es de instalar el xpz
Como usarlo:
--MODO DE USO--
Modo de uso &IsOk = &PrintToBluetooth.imprimir(&PrinterName,&Texto)
Ejmplo:
&Texto = ''
&Texto += "test de Impresion 1" + NEWLINE()
&Texto += "test de Impresion 2"
&PrinterName = '00:XA:00' /*mac address de la printer */
&lOk = &PrintToBluetooth.imprimir(&PrinterName,&Texto)
if &lOk
interop.Msg("Ticket Impreso")
else
interop.Msg("Conectar Impresora")
Endif
!!Buena Suerte!!
s
Buenas tardes, tengo un inconveniente al usar el comando gradlew uploadArchives. Me da el siguiente error
ResponderBorrarCould not deploy to remote repository | Failed to deploy artifacts/metadata: No connector available to access repository remote (C:\Program Files (x86)\GeneXus\GeneXus16Trial\Android\m2repository) of type default using the available factories WagonRepositoryConnectorFactory
Se te ocurre por que puede estar pasando?
Desde ya gracias.
Hola! vendes el External Object para usarlo directamente ??? es compatible con cualquier impresora Bluetooth ???
ResponderBorrarHola, me interesa descargar el external Object para probar con una impresora APPEX 2 EXTECH
ResponderBorrarMe puedes apoyar
Hola buenas, como estas? quisiera contactar contigo para realizar la implementacion
ResponderBorrarHola, tienes el xpz que me puedas proporcionar?
ResponderBorrarHola Jóvenes ,disculpen la molestias pudieron encontrar alguna forma para manda a imprimir,y estoy loco de probar muchas cosas y nada ,me podrían dar una mano
ResponderBorrarHola, excelente trabajo!
ResponderBorrarPodrías compartirme el link del proyecto de Android? el que comentaste que dejarías adjunto.
Muchas gracias!
Hola, excelente trabajo!
ResponderBorrarPodrías compartirme el link del proyecto de Android? el que comentaste que dejarías adjunto.
Muchas gracias!
No se porque salgo como anónimo en los comentarios