lunes, 10 de diciembre de 2018

AEM hablemos del arquetipo 11

Cuando creamos un proyecto con AEM. Siempre es importante saber que arquetipo estamos usando. Pues esto me determinara que source, herramientas y auto-configuraciones se esta utilizando.


Para declarar un servlet;

 Arquetipo 10:


@SlingServlet(paths="/bin/mySearchServlet", methods = "POST", metatype=true)
public class HandleClaim extends org.apache.sling.api.servlets.SlingAllMethodsServlet {
    private static final long serialVersionUID = 2598426539166789515L;
}


Arquetipo 11:

@Component(service=Servlet.class,
property={
Constants.SERVICE_DESCRIPTION + "=Simple Demo Servlet",
"sling.servlet.methods=" + HttpConstants.METHOD_POST,
"sling.servlet.paths="+ "/bin/myDataSourcePoolServlet"
})
}



Para usar @reference;

 Arquetipo 10:

import org.apache.felix.scr.annotations.Reference;

@Reference
private DataSourcePool dataPool;


Arquetipo 11:

import org.osgi.service.component.annotations.Reference;

@Reference
private DataSourcePool dataPool;


Usando DataPools:


Arquetipo 10:
Se configura como; Apache Sling Connection Pooled DataSource
http://localhost:4502/system/console/configMgr


Arquetipo 11:

Se configura como; Day Commons JDBC Connections Pool
http://localhost:4502/system/console/configMgr

miércoles, 5 de diciembre de 2018

Adobe AEM Form + AEM Data Model + MySql Example

Prerequisitos:

  1. AEM 6.3
  2. AEM-6.3.3.0-6.3.3.zip
  3. AEM-CFP-6.3.3.1-1.0.zip
  4. AEM-FORMS-6.3.3.1-LX-4.1.90.zip
  5. Mysql 

Pasos:

Necesitamos crear un ambiente con todos los prerequisitos anteriormente listados. 



Seguidamente necesitamos crear una base de datos.

Script:

CREATE DATABASE Registro_de_mascotas;
USE Registro_de_mascotas;

CREATE TABLE Mascotas (Nombre VARCHAR(20), Raza VARCHAR(30), Sexo CHAR(1), Fecha_de_nacimiento DATE);


Debemos crear la conexión a la base de datos. Y lo para esto, necesitamos;

Instalar los drivers en AEM:
Lo hacemos atravez de este tool:

http://localhost:4502/system/console/bundles

Dentro instalamos los bundles que necesitemos. Para este caso en especifico instalamos el de Mysql.


Este lo podes descargar aqui





Configurar Mysql como Datasource de AEM

Esto lo hacemos en el siguente tool:
http://localhost:4502/system/console/configMgr

Dentro buscamos: Apache Sling Connection Pooled DataSource

Y pulsamos en mas (+)

En el formulario, ponemos los datos de la base de datos:

Detalles:
Notas: Los datos que no se encuentra debajo dejarlos default


Datasource name: MascotasDataSource
DataSource service property name:
datasource.name
JDBC driver class:
com.mysql.jdbc.Driver
JDBC connection URI:
jdbc:mysql://localhost:3306/Registro_de_mascotas?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
Username:
root
Password:
<VACIO>
Test on Borrow:
True
Test on Return:
True
Validation Query:
-1
Transaction Isolation:
READ_COMMITTED

Después de pulsar Save. Se creara por debajo un nuevo data source:



Nuestro siguiente paso es crear un nuevo data model.
http://localhost:4502/aem/forms.html/content/dam/formsanddocuments-fdm




Agregamos un nombre y pulsamos siguiente;



Seleccionamos el Datasource







Y pulsamos el botón de crear
Tenemos que editar el DataModel Recién creado.




Dentro en el Panel de edición, simplemente podemos desplegar el árbol y tendremos acceso a la base de datos.

Debemos agregar la tabla y los inputs.  Dentro del modelo:


Pulsamos el botón "Add Selected". Se agregara una tabla al panel de edición:

 Tenemos que editar la tabla y escogerles los modos y servicios (Mas adelante se explica esto en detalle)



Debemos escoger el;
Read Service: get.
Bidding To: Request Atribute
Biding Value: Nombre. (Nombre de la tabla)
Es importante destacar que he tenido problemas configurando el Bidding Value. Si se presenta ese problema utilizar la nomenclatura <Nombre Tabla>.<Nombre campo> eg; Mascotas.Nombre

Debemos escoger el;
Write Service: insert






Pulsamos Done.
Ahora nos toca configurar los servicios.

Editamos el servicio Get:




 Escogemos el método;
Output Model Object: Mascotas.
Return array?: True (Por que la tabla de prueba no tiene llave primaria)

Editamos el servicio Insert:

Escojemos:
Output Type: Boolean (Defecto)
Arguments: Mascotas







Nuestra siguiente tarea seria probar que el DataModel este funcionando correctamente.

Entramos al utilitario de Test Model Object


Dentro escogemos el
Select Model/Service: Write model Object

Y debemos escribir los datos a insertar:

{
  "Mascotas": {
    "Nombre": "Pepe",
    "Raza": "Indefinida",
    "Sexo": "M",
    "Fecha_de_nacimiento": "2015-12-17"
  }  
}


Y pulsamos el botón Test:

Mi experiencia me dice que este tool tiene mucho problemas, pues me a tocado pulsar repetidamente Test, hasta 5 veces para la respuesta del insert sea True.

Ahora nos toca pulsar la búsqueda.

En este caso escogemos:
Select Model/Service: Read model object

Pulsamos Mascotas. Y nos generara un template solicitando el Nombre.
Seria poner "Gabo" para hacer referencia al que acabamos de insertar.


{
    "request": {
        "attribute": {
            "Nombre": "Gabo"
        }
    }
}


De igual manera que en el insert, Me toco pulsar varias veces el botón de Test. Porque las primeras veces me muestra errores de conexión, como el 4 o 5 intento funciona correctamente.

Crear el formulario:

El paso final es crear el formulario basado en el Data Model anterior, en el siguiente tool:


http://localhost:4502/aem/forms.html/content/dam/formsanddocuments


Creamos un Adaptive Form



Creamos un Template en blanco
Nombramos el Formulario como: MascotasForm





Escogemos el datasource


Y pulsamos el botón Create.

Seguidamente tenemos que editar el formulario:
Nos vamos al tab de Data Model Objects y arrastramos toda la tabla:


Luego agregamos el botón de submit:







Y editamos el container del formulario:
En la sección de  Submission:
Submit Action: Submit using Form Data model
Data Model to submit: Escojemos el del mascotas.

Y por ultimo guardamos los cambios.

Ahora solo resta pulsar el botón de preview.
De igual manera que los tool de testing, cuando doy submit la primera vez me genera un error. Es hasta el segundo submit cuando efectivamente se insertan los valores en la base de datos.

AEM hablemos del arquetipo 11

Cuando creamos un proyecto con AEM. Siempre es importante saber que arquetipo estamos usando. Pues esto me determinara que source, herramien...