3. About the Speaker
•José Antonio Estevan
•jaestevan.com
•@jaestevan
Premier Field Engineer @ Microsoft
+14 Years Dynamics AX Experience
Former MVP
Proud geek
4. Extensiones, y que la fuerza nos
acompañe
1
2
3
4
¿Qué son?
La fuerza
¿Por qué son necesarias?
Poderoso el lado oscuro es
¿Cómo pensar en extensiones?
Aprender a usar la fuerza, tu debes…
¿Y a partir de ahora?
Que la fuerza nos acompañe
5. ¿Qué son?
ArtefactoEnAOT
-Atributo 1: EDT
+ Metodo 1()
-Atributo 2: EDT
ArtefactoEnAOT
-Atributo 1: EDT
+ Metodo 1 modif()
+ Metodo 2 nuevo()
-Atributo 2: Mi valor
• Overlay: El lado oscuro
6. ¿Qué son?
ArtefactoEnAOT
-Atributo 1: EDT
+ Metodo 1()
-Atributo 2: EDT
ArtefactoM1_Extension
-Atributo 2: Mi valor
ArtefactoM2_Extension
+ Metodo 1 modif()
+ Metodo 2 nuevo()
Extends
Augments
• Extensiones: La fuerza
7.
8.
9. ¿Por qué extensiones?
‘Overlay’ no
permitido
Menor coste de
propiedad
Aumento de la
calidad
Soporte para
actualización continua
Every customer on latest release; always.
10. Personalizaciones no intrusivas
No cambiar la
definición de tipos
Cambiar firma de métodos
Cambiar restricciones en tablas
(incluyendo índices)
No romper la
encapsulación
Cambiar modificadores de
acceso a métodos
(public – private – protected)
Solo cambios de
naturaleza aditiva
NO OVER-LAYERING
Cambios que no cumplan el
Principio de Liskov
Permitir el principio
Abierto/Cerrado
Los objetos (clases, módulos, métodos)
deben ser abiertos a extensión y
cerrados para modificación
11. Personalizaciones no intrusivas
Clases de extensión (+CoC)
Subscripción a eventos y delegados
Extensiones por metadatos
SysExtension y otros frameworks
https://blogs.msdn.microsoft.com/axinthefield/embrace-the-extensions-mindset-with-dynamics-365-for-finance-and-operations/
12. ¡¿Solo eso?!
• Se puede cambiar el texto que ven los usuarios (aka. Labels).
• Se pueden extender enums (los que son extensibles)
• Se pueden añadir campos, relaciones, índices y métodos a tablas.
• Se pueden añadir controles, datasources y métodos a formularios.
• Se pueden añadir métodos y estado (atributos) a clases.
• Se pueden ”envolver” (wrap) métodos protected y public en clases para inyectar
código personalizado en la ejecución (Chain-of-Command).
• Se pueden subscribir eventos personalizados y del sistema utilizando sólo
atributos. (Sí, tenemos una patente sobre esto).
• Se puede responder a delegados de forma segura, incluso con varios suscriptores
(hay que ser un “buen ciudadano”).
• Se pueden crear factorías de clases con SysExtension framework.
https://blogs.msdn.microsoft.com/mfp/2018/03/29/x-the-most-extensible-language-on-the-planet-2/
13. Chain of Command (CoC)
• Permite que los métodos sean ‘envueltos’ (wrapped) en
clases de extensión.
• Estos métodos deben incluir una llamada al método next, que
ejecuta el código original o la siguiente llamada en la ‘cadena’
• Permite acceder a métodos y miembros public y protected
de la clase original (a su estado).
• Se pueden ‘envolver’ varios métodos en una misma clase de
extensión para crear una funcionalidad compleja coherente.
• Beneficios:
• Permite habilitar muchos casos de extensibilidad con un mínimo refactor
• Permite habilitar una gran cantidad de casos reportados por partners
• El código resultante es más fácil de crear y entender
• Permite múltiples extensiones y partners sin colisión
https://docs.microsoft.com/en-us/dynamics365/unified-operations/dev-itpro/extensibility/method-wrapping-coc
14. Chain of Command (CoC)
Requerimientos:
a) Cambiar el valor devuelto por calcAmount()
b) Insertar lo que hace post() en un log, en la misma transacción.
15. Non-developer extensions
• Embed Power Apps
• User-defined fields
• Permiten añadir datos y
elementos de la interfaz
de forma no intrusiva y
sin código
https://docs.microsoft.com/es-es/dynamics365/unified-operations/fin-and-ops/get-started/user-defined-fields
https://docs.microsoft.com/es-es/dynamics365/unified-operations/fin-and-ops/get-started/embed-power-apps
16. Alternativas
• Refactorizar el código para evitar cambios
intrusivos utilizando extensiones.
• Trabajar con los equipos de Microsoft en el
análisis de nuevas posibilidades de extensión
(Extensibility Requests o programas para ISV)
• Aceptar que tu solución/implementación no
es viable para Dynamics 365 for Finance and
Operations
17. ¿Cuál es era el plan?
Kernel / Platform
App Platform
App Foundation
Hard seal
Hard seal
Nov 2016 – 7.1
Hard seal
Jun 2017 – 7.3
Hard seal
Apr 2018 – 8.0
Extension based
customizations only!
Hard seal
Nov 2016 – 7.1
Hard seal
Hard seal
Nov 2016 – 7.1
Hard seal
Jun 2017 – 7.3
Hard seal
Nov 2016 – 7.1
Hard seal
Dec 2017 – 7.2
https://docs.microsoft.com/en-us/dynamics365/unified-operations/dev-itpro/migration-upgrade/versions-update-policy
https://docs.microsoft.com/en-us/dynamics365/unified-operations/dev-itpro/extensibility/extensibility-roadmap
18. ¡¿Y ahora qué?!
Disfruta de una experiencia sin costosas actualizaciones, siempre
aprovechando los avances de la última versión.
Customers
Eliminar todo overlay evitando modificaciones intrusivas
mediante las opciones de extensión que hemos visto.
VARs
Eliminar todo overlay de sus soluciones para hacerlas
extensibles por clientes y VARs y permitir una fácil instalación.
ISVs
Facilitar opciones de extensión no intrusivas mediante nuevas
funcionalidades en la plataforma y la adaptación del código
de la aplicación.
Microsoft
21. Resumen
• Entender los beneficios del modelo de
personalización basado en extensiones.
• Comprender las posibilidades de extensión no
intrusivas del producto.
• Aprender nuevos patrones para refactorizar código
de ‘overlay’ a extensiones.
Every customer on
latest release; always.
23. Dynamics 365 Community
The Dynamics 365 Community is a site where you can find community contributions, ask questions and
interact with Microsoft Dynamics peers and experts. The community has over 200K members and is
growing.
New UI/UX: https://community.dynamics365.com