Demo lightning connect (Salesforce) presentada en el DUG que se hizo en Granada el 26/11/15, basado en el post http://agarciaodeian.com/2015/10/20/external-objects-what-lightning-connect-offers-to-us/ de Agustina Garcia
2. ¿Qué es Lightning Connect?
● Feature que permite visualizar tablas de datos alojadas
en sistemas externos en Salesforce:
● No es un ETL (Extract - Transform - Load)
● Los datos NO se copian
● Se pueden leer bajo demanda y en TIEMPO REAL como si
formaran parte de nuestro esquema
● Se pueden escribir si el datasource lo permite
3. External datasource
● Para poder trabajar con Lightning Connect necesitamos un
external datasource. Este puede ser un repositorio externo
Google Drive, Sharepoint, Amazon, una base de datos…
● Hay que elegir un adapter para comunicarse con el
datasource: Lightning Connect OData 2.0, OData 4.0
● OData es un protocolo que permite el acceso a datos en
tiempo real mediante peticiones REST.
● Puede estar autenticado (OAuth) o no.
Vamos a crear un external datasource:
- Nuestro datasource será un spreadsheet: https://goo.gl/auSswl
- Setup → Develop → External Datasource
- Type: OData 2.0
- URL: https://sheltered-badlands-
4799.herokuapp.com/InMemoryProducerExample.svc
5. External objects
● Es un nuevo tipo de objeto que permite visualizar la
información que tenemos en nuestro external
datasource
Vamos a crear un external object:
- En la página de detalle del External Datasource, click en
“Validate & Sync”
- Sincroniza el objeto “HotelReservation”
- Puedes ver que se ha creado un nuevo objeto en Setup → Develop
External Objects.
6. External objects
● ¿En qué se diferencia un external object de un objeto
custom?
● Acaba en __x
● External Datasource: datasource desde el cual lo hemos
creado
● Name field: indica cuál de los campos del objeto será el
Name.
● Standard fields:
● External Id: identifica de forma unívoca al registro
● Display URL: URL a través de la cual consumimos el objeto
7. Tabs y layouts
● Podemos crear una tab para el external object como
hacemos normalmente.
● Podemos modificar el page layout, compact layout y
search layouts del objeto, como si de un objeto normal
se tratara.
Vamos a crear una tab para nuestro external object:
- Crea una tab para “HotelReservation”
- Ve a la tab y modifica las columnas del layout para mostrar
todos los campos
9. External lookup
● Crea un lookup hacia un external object. Es decir,
podemos crear un external lookup:
● De custom object hacia external object
● De external object hacia otro external object
Vamos a crear un external lookup:
- Crea un objeto que se llame “ParkingReservation”. Varias
reservan de parking pueden estar asociadas a la misma reserva de
habitación.
- Crea un external lookup en ParkingReservation al external object
“HotelReservation”.
- Crea una tab para el objeto Parking Reservation
- Crea una reserva de parking desde la nueva tab
10. Indirect lookup
● Es un lookup desde un external object hacia un objecto
custom o standard.
● El custom o standard object que vamos a utilizar tiene
que tener un unique External Id.
Vamos a crear un indirect lookup:
- Vamos a utilizar el objeto Account para asociarlo con las
personas que hacen las reservas.
- Crea un external id en Account llamado “Guest Name”
(Guest_Name__c).
- Utiliza el script populate_accounts.txt para crear Accounts con
los mismos datos que tenemos en nuestra tabla externa.
- Edita el campo Guest Name de Hotel Reservation para que sea un
indirect lookup hacia el campo Guest Name de Account.
- Puedes ver el resultado viendo la lista de Hotel Reservations.
- Edita el layout de Account para añadir la related list de Hotel
Reservations.
11. VF, Apex and SOQL
● Podemos crear código Apex para el external object,
leer sus datos mediante SOQL y crear páginas
Visualforce.
Vamos a crear una página VF para poder imprimir facturas de las
reservas:
- Crea un controlador para Hotel Reservation
(HotelRervationController.cls).
- Crea una página VF que haga uso del controlador y cree la
factura en PDF (reservation_invoice.page).
- Crea un botón “Print Invoice” en la vista de detalle de Hotel
Reservation que nos lleve a la página VF.
- Añádelo al layout de la vista de detalle.
- Comprueba el resultado.
12. FieldSets
● También podemos crear FieldSets para un external
object.
Vamos a crear un fieldset y sobreescribir la página de detalle de Hotel
Reservation con un VF que muestre este fieldset
- Crea un fieldset para el external object Hotel Reservation
(Reservation_Information).
- Crea una página VF que haga uso del controlador y renderice los
campos indicados en el fieldset (reservation_view.page).
- Sobreescribe el comportamiento del boón view para que muestre la
nueva página.
- Comprueba el resultado.
13. Aún hay más…
● También puedes visualizar tu objeto en Salesforce1, y
como dijimos anteriormente modificar su compact
layout para personalizar los campos que se muestran.
● Puedes seguir tus external objets a través de los feeds
de Chatter (aunque sin Field History Tracking).
● Se puede acceder a ellos a través de las APIs SOAP y
REST de SF.
● Puedes aplicar FLS a tus external objects.
14. Writability
● Antes de la Winter 16 read-only. A partir de la Winter
16, writable!!
● Esto implica que a partir de la Winter 16, podemos
utilizar operaciones DML en nuestro código Apex para
escribir estos objetos.
● Diferencias en cuanto al momento en el que se
commitean los datos. Para ello:
15. Limitaciones
● Sólo podemos tener 100 external objects / org
● No podemos crear relaciones Master - Detail
●Workaround con Indirect y External Lookups
● No podemos crear Reports // Dashboards
● No se pueden crear Triggers
● No se pueden utilizar en fórmulas o workflow.
● Todo lo relacionado con sharing no aplica para los
external objects.
16. Más información
● Blog de Agustina:
http://agarciaodeian.com/2015/10/20/external-
objects-what-lightning-connect-offers-to-us/