SlideShare una empresa de Scribd logo
1 de 22
Nicolás
Salesforce Entusiasta
Kognoz - 2008
Varios años consultor independiente
Globant
Aquivalabs
Agenda
● Introducción
● Breves definiciones
● WSDL to Apex
● Identificando estructuras
● Estrategia
● Caso de estudio I
● Caso de estudio II
● Caso de estudio III
● ¿Preguntas? ¿Reflexiones?
Motivaciones
En muchas ocasiones, precisamos realizar modificaciones de metadata
directamente desde nuestra aplicación. Lamentablemente, Apex aún no expone
funcionalidades directas para poder lograr este cometido en la mayoría de los
casos.
¿Ejemplos?
Algunos acuerdos previos
● Código con tinte académico.
● Simplificación de muchos conceptos (por razones de tiempo y para no dormir al auditorio).
Web Service Description Language
El WSDL es un lenguaje de descripción de interfaz basado en XML y se utiliza
para describir la funcionalidad ofrecida por un web service.
Metadata API
Definición de Salesforce:
Use Metadata API to retrieve, deploy, create, update, or delete customizations for your org. The most common use is to migrate changes from a sandbox or
testing org to your production environment. Metadata API is intended for managing customizations and for building tools that can manage the metadata
model, not the data itself.
The easiest way to access the functionality in Metadata API is to use the Salesforce Extensions for Visual Studio Code or the Ant Migration Tool. Both tools
are built on top of Metadata API and use the standard tools to simplify working with Metadata API.
● The Salesforce Extensions for Visual Studio Code includes tools for developing on the Salesforce platform in the lightweight, extensible VS
Code editor. These tools provide features for working with development orgs (scratch orgs, sandboxes, and DE orgs), Apex, Aura components,
and Visualforce.
● The Ant Migration Tool is ideal if you use a script or the command line for moving metadata between a local directory and a Salesforce org.
¿Y Apex?
WSDL to Apex Class
Si tengo un WSDL puedo convertirlo a una Apex Class.
WSDL to Apex Class
¿Qué WSDL preciso? Medata WSDL
¿Dónde lo obtengo? Setup -> API
WSDL to Apex Class
Point and Click. Al parecer simple (tan sólo cambiar el port Metadata de nombre)
¿Qué podría salir mal?
WSDL to Apex Class
Veamos este problema como una oportunidad de entender el funcionamiento y
poder configurar o armar la clase, con los requerimientos mínimos que nuestro
negocio nos pide.
● Clase innecesariamente grande (en muchos casos).
○ Problemas “estructurales”.
○ Problemas conceptuales (uso una clase que la instalo y no tengo mucha idea que hace).
■ Proyecto que dio soporte por muchos años a estos problemas.
■ https://github.com/financialforcedev/apex-mdapi
WSDL to Apex Class - Tres secciones (separación personal)
Funciones.
● createMetadata
● deleteMetadata
● listMetadata …entre otras.
Atributos.
● SessionHeader_element
● LogInfo
● createMetadata_element
● etc
Metadata específica.
● CustomObject
● NamedCredential
● ApprovalProcess
● SearchLayouts
WSDL to Apex Class - Tunning
Estrategia de abordaje.
● ¿Qué precisa el negocio?
● ¿Qué metadata preciso para cumplir con los requisitos?
Con las respuestas a estas preguntas, diseño mi clase y la armo.
(Va algún tip o receta para que la clase compile)
Caso de estudio. Named Credentials.
● ¿Qué precisa el negocio?
○ Crear dinámicamente y por código una named credential.
● ¿Qué metadata preciso para cumplir con los requisitos?
Metadata específica.
● NamedCredential
Atributos.
● LogInfo
● SessionHeader_element
● DebuggingInfo_element
● DebuggingHeader_element
● CallOptions_element
● AllOrNoneHeader_element
● createMetadata_element
● createMetadataResponse_element
● SaveResult
● Error
● ExtendedErrorDetails
Funciones.
● createMetadata
¿Cómo obtengo estos atributos?
Caso de estudio. Named Credentials.
La clase que nunca se generó me va a
servir para obtener los componentes
que mencionamos previamente.
Voy a quedarme con el código que
preciso (y hasta puedo usar el mismo
nombre para evitar tener que hacer
algún replace).
public String endpoint_x = URL.getSalesforceBaseUrl().toExternalForm() + '/services/Soap/m/51.0';
Inner class virtual Metadata .
public virtual class Metadata {
public String fullName;
}
La metadata específica va a extender a Metadata. En nuestro ejemplo:
public class NamedCredential extends Metadata{
En la clase agregamos:
public String type = 'NamedCredential';
public String fullName;
private String[] fullName_type_info = new String[]{'fullName','http://soap.sforce.com/2006/04/metadata',null,'0','1','false'};
private String[] type_att_info = new String[]{'xsi:type'};
Y modificamos (le agregamos ‘fullName’ a la lista de strings):
private String[] field_order_type_info = new String[]{'fullName',
'allowMergeFieldsInBody','allowMergeFieldsInHeader','authProvider','authTokenEndpointUrl','awsAccessKey','awsAccessSecret','awsRegion','awsService','certificate','end
point','generateAuthorizationHeader','jwtAudience','jwtFormulaSubject','jwtIssuer','jwtSigningCertificate','jwtTextSubject','jwtValidityPeriodSeconds','label','oauthR
efreshToken','oauthScope','oauthToken','outboundNetworkConnection','password','principalType','protocol','username'};
Lista de pasos para que la clase
funcione.
Caso de estudio. Named Credentials.
Generó el código que va a utilizar esta clase recientemente creada.
DemoService.MetadataPort service = new DemoService.MetadataPort();
service.SessionHeader = new DemoService.SessionHeader_element();
service.SessionHeader.sessionId = UserInfo.getSessionId();
DemoService.NamedCredential credential = new DemoService.NamedCredential();
credential.fullName = 'TrailblazerDemoAPI';
credential.label = 'Trailblazer Demo';
credential.endpoint = 'https://aquivalabs.com';
credential.principalType = 'NamedUser';
credential.protocol = 'AwsSv4';
credential.awsAccessKey = 'AKIARU6LVKHX2ITYNXXX';
credential.awsAccessSecret = 'NqaXhfFyRfMXTyWuHqEU86DJCVbM3uWdX6BZZZZ';
credential.awsRegion = 'us-west-2';
credential.awsService = 'execute-api';
credential.generateAuthorizationHeader = true;
DemoService.SaveResult[] res = service.createMetadata(new DemoService.Metadata[] {credential});
Caso de estudio. Permission sets.
● ¿Qué precisa el negocio?
○ Crear al dinámicamente y por código un permission set
○ Configurar algún permiso para un objeto y un campo
● ¿Qué metadata preciso para cumplir con los requisitos?
Funciones.
● createMetadata
Metadata específica.
● PermissionSet
Atributos.
● LogInfo
● SessionHeader_element
● DebuggingInfo_element
● DebuggingHeader_element
● CallOptions_element
● AllOrNoneHeader_element
● createMetadata_element
● createMetadataResponse_element
● SaveResult
● Error
● ExtendedErrorDetails
● PermissionSetApplicationVisibility
● PermissionSetApexClassAccess
● …………………..
● ………………......
● ...........................
● PermissionSetUserPermission
Caso de estudio. Custom Object (usando clase completa)
● ¿Qué precisa el negocio?
○ Crear al dinámicamente y por código un objeto
● ¿Qué metadata preciso para cumplir con los requisitos?
Funciones.
● createMetadata
Metadata específica.
● CustomObject
Atributos.
● LogInfo
● SessionHeader_element
● DebuggingInfo_element
● DebuggingHeader_element
● CallOptions_element
● AllOrNoneHeader_element
● createMetadata_element
● createMetadataResponse_element
● SaveResult
● Error
● ExtendedErrorDetails
● ..................................
● ..................................
● Y muchos otros más...
https://github.com/financialforcedev/apex-mdapi/blob/master/apex-mdapi/src/classes/MetadataServiceExamples.cls
Caso de estudio. Remote Site Setting
● ¿Qué precisa el negocio?
○ Crear al dinámicamente y por código un remote site setting.
○ Verificar desde apex que existe ese Remote Site Setting
● ¿Qué metadata preciso para cumplir con los requisitos?
Funciones.
● createMetadata
● listMetadata
Metadata específica.
● RemoteSiteSetting
Atributos.
● LogInfo
● SessionHeader_element
● DebuggingInfo_element
● DebuggingHeader_element
● CallOptions_element
● AllOrNoneHeader_element
● createMetadata_element
● createMetadataResponse_element
● SaveResult
● Error
● ExtendedErrorDetails
● ..................................
● ..................................
● Y muchos otros más...
Terminando...
● ¿Experiencias similares para compartir?
● ¿Preguntas?
Metadata api en apex
Metadata api en apex

Más contenido relacionado

La actualidad más candente

Sesion 3. desarrollo de aplicaciones jee
Sesion 3. desarrollo de aplicaciones jeeSesion 3. desarrollo de aplicaciones jee
Sesion 3. desarrollo de aplicaciones jeeHéctor Santos
 
ASP .NET MVC: Desarrollo web con el patrón MVC
ASP .NET MVC: Desarrollo web con el patrón MVCASP .NET MVC: Desarrollo web con el patrón MVC
ASP .NET MVC: Desarrollo web con el patrón MVCriojadotnet
 
Introducción a Java EE
Introducción a Java EEIntroducción a Java EE
Introducción a Java EEPaco Saucedo
 
Orm hibernate springframework
Orm hibernate springframeworkOrm hibernate springframework
Orm hibernate springframeworkVortexbird
 
Definición de apis con swagger
Definición de apis con swaggerDefinición de apis con swagger
Definición de apis con swaggerj_copete
 
[ES] Introducción a Java EE 7 & HTML 5
[ES] Introducción a Java EE 7 & HTML 5[ES] Introducción a Java EE 7 & HTML 5
[ES] Introducción a Java EE 7 & HTML 5Eudris Cabrera
 
Persistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwarePersistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwareJose Luis Bugarin Peche
 
Introducccion springframework
Introducccion springframeworkIntroducccion springframework
Introducccion springframeworkVortexbird
 
Seminario de programación Java, con Apache Maven, J2EE, JPA, Primefaces
Seminario de programación Java, con Apache Maven, J2EE, JPA, PrimefacesSeminario de programación Java, con Apache Maven, J2EE, JPA, Primefaces
Seminario de programación Java, con Apache Maven, J2EE, JPA, PrimefacesAlejandro Bolaños Ussa
 
Introducción a Zend Framework 2
Introducción a  Zend Framework 2Introducción a  Zend Framework 2
Introducción a Zend Framework 2El Taller Web
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETJavier Roig
 
Arquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EEArquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EECarlos Gavidia-Calderon
 

La actualidad más candente (20)

Sesion 3. desarrollo de aplicaciones jee
Sesion 3. desarrollo de aplicaciones jeeSesion 3. desarrollo de aplicaciones jee
Sesion 3. desarrollo de aplicaciones jee
 
5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web
 
ASP .NET MVC: Desarrollo web con el patrón MVC
ASP .NET MVC: Desarrollo web con el patrón MVCASP .NET MVC: Desarrollo web con el patrón MVC
ASP .NET MVC: Desarrollo web con el patrón MVC
 
Framework
FrameworkFramework
Framework
 
Java ee 6
Java ee 6Java ee 6
Java ee 6
 
Introducción a Java EE
Introducción a Java EEIntroducción a Java EE
Introducción a Java EE
 
Asp.net
Asp.netAsp.net
Asp.net
 
Introducción a JEE
Introducción a JEEIntroducción a JEE
Introducción a JEE
 
Orm hibernate springframework
Orm hibernate springframeworkOrm hibernate springframework
Orm hibernate springframework
 
Modulo 1 java ee platform
Modulo 1   java ee platformModulo 1   java ee platform
Modulo 1 java ee platform
 
Java script
Java scriptJava script
Java script
 
Definición de apis con swagger
Definición de apis con swaggerDefinición de apis con swagger
Definición de apis con swagger
 
[ES] Introducción a Java EE 7 & HTML 5
[ES] Introducción a Java EE 7 & HTML 5[ES] Introducción a Java EE 7 & HTML 5
[ES] Introducción a Java EE 7 & HTML 5
 
Persistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwarePersistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_software
 
Introducccion springframework
Introducccion springframeworkIntroducccion springframework
Introducccion springframework
 
Seminario de programación Java, con Apache Maven, J2EE, JPA, Primefaces
Seminario de programación Java, con Apache Maven, J2EE, JPA, PrimefacesSeminario de programación Java, con Apache Maven, J2EE, JPA, Primefaces
Seminario de programación Java, con Apache Maven, J2EE, JPA, Primefaces
 
Introducción a Zend Framework 2
Introducción a  Zend Framework 2Introducción a  Zend Framework 2
Introducción a Zend Framework 2
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NET
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Arquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EEArquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EE
 

Similar a Metadata api en apex

Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPHP Vigo
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netAlberto Diaz Martin
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETAlberto Diaz Martin
 
"Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore""Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore"www.encamina.com
 
LenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxLenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxcarrilloja98
 
Germán Peraferrer: Cormo Framework
Germán Peraferrer: Cormo FrameworkGermán Peraferrer: Cormo Framework
Germán Peraferrer: Cormo FrameworkGrupo PHP Argentina
 
Administrando SQL Server, mejores practicas para un DBA
Administrando SQL Server, mejores practicas para un DBAAdministrando SQL Server, mejores practicas para un DBA
Administrando SQL Server, mejores practicas para un DBASpanishPASSVC
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)INSIGNIA4U
 
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptxGabriela Soto
 
Guía de buenas prácticas para desarrolladores web
Guía de buenas prácticas para desarrolladores webGuía de buenas prácticas para desarrolladores web
Guía de buenas prácticas para desarrolladores webJuan Victor Minaya León
 

Similar a Metadata api en apex (20)

Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Mvc
MvcMvc
Mvc
 
S4-PD1.pptx
S4-PD1.pptxS4-PD1.pptx
S4-PD1.pptx
 
Spring Mvc Final
Spring Mvc FinalSpring Mvc Final
Spring Mvc Final
 
"Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore""Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore"
 
4 Jhs J Developer Adf
4  Jhs J Developer Adf4  Jhs J Developer Adf
4 Jhs J Developer Adf
 
LenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptxLenguajeJavaSpringBootDesarrolloweb.pptx
LenguajeJavaSpringBootDesarrolloweb.pptx
 
Germán Peraferrer: Cormo Framework
Germán Peraferrer: Cormo FrameworkGermán Peraferrer: Cormo Framework
Germán Peraferrer: Cormo Framework
 
Cormo Framework
Cormo FrameworkCormo Framework
Cormo Framework
 
Administrando SQL Server, mejores practicas para un DBA
Administrando SQL Server, mejores practicas para un DBAAdministrando SQL Server, mejores practicas para un DBA
Administrando SQL Server, mejores practicas para un DBA
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
 
Framework Catalyst
Framework CatalystFramework Catalyst
Framework Catalyst
 
Guía de buenas prácticas para desarrolladores web
Guía de buenas prácticas para desarrolladores webGuía de buenas prácticas para desarrolladores web
Guía de buenas prácticas para desarrolladores web
 
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
[Code Camp 2009] Desarrollando sitios web escalables con ASP.NET MVC (Rodolfo...
 
Taller de Grails
Taller de GrailsTaller de Grails
Taller de Grails
 

Metadata api en apex

  • 1.
  • 2. Nicolás Salesforce Entusiasta Kognoz - 2008 Varios años consultor independiente Globant Aquivalabs
  • 3. Agenda ● Introducción ● Breves definiciones ● WSDL to Apex ● Identificando estructuras ● Estrategia ● Caso de estudio I ● Caso de estudio II ● Caso de estudio III ● ¿Preguntas? ¿Reflexiones?
  • 4. Motivaciones En muchas ocasiones, precisamos realizar modificaciones de metadata directamente desde nuestra aplicación. Lamentablemente, Apex aún no expone funcionalidades directas para poder lograr este cometido en la mayoría de los casos. ¿Ejemplos?
  • 5. Algunos acuerdos previos ● Código con tinte académico. ● Simplificación de muchos conceptos (por razones de tiempo y para no dormir al auditorio).
  • 6. Web Service Description Language El WSDL es un lenguaje de descripción de interfaz basado en XML y se utiliza para describir la funcionalidad ofrecida por un web service.
  • 7. Metadata API Definición de Salesforce: Use Metadata API to retrieve, deploy, create, update, or delete customizations for your org. The most common use is to migrate changes from a sandbox or testing org to your production environment. Metadata API is intended for managing customizations and for building tools that can manage the metadata model, not the data itself. The easiest way to access the functionality in Metadata API is to use the Salesforce Extensions for Visual Studio Code or the Ant Migration Tool. Both tools are built on top of Metadata API and use the standard tools to simplify working with Metadata API. ● The Salesforce Extensions for Visual Studio Code includes tools for developing on the Salesforce platform in the lightweight, extensible VS Code editor. These tools provide features for working with development orgs (scratch orgs, sandboxes, and DE orgs), Apex, Aura components, and Visualforce. ● The Ant Migration Tool is ideal if you use a script or the command line for moving metadata between a local directory and a Salesforce org. ¿Y Apex?
  • 8. WSDL to Apex Class Si tengo un WSDL puedo convertirlo a una Apex Class.
  • 9. WSDL to Apex Class ¿Qué WSDL preciso? Medata WSDL ¿Dónde lo obtengo? Setup -> API
  • 10. WSDL to Apex Class Point and Click. Al parecer simple (tan sólo cambiar el port Metadata de nombre) ¿Qué podría salir mal?
  • 11. WSDL to Apex Class Veamos este problema como una oportunidad de entender el funcionamiento y poder configurar o armar la clase, con los requerimientos mínimos que nuestro negocio nos pide. ● Clase innecesariamente grande (en muchos casos). ○ Problemas “estructurales”. ○ Problemas conceptuales (uso una clase que la instalo y no tengo mucha idea que hace). ■ Proyecto que dio soporte por muchos años a estos problemas. ■ https://github.com/financialforcedev/apex-mdapi
  • 12. WSDL to Apex Class - Tres secciones (separación personal) Funciones. ● createMetadata ● deleteMetadata ● listMetadata …entre otras. Atributos. ● SessionHeader_element ● LogInfo ● createMetadata_element ● etc Metadata específica. ● CustomObject ● NamedCredential ● ApprovalProcess ● SearchLayouts
  • 13. WSDL to Apex Class - Tunning Estrategia de abordaje. ● ¿Qué precisa el negocio? ● ¿Qué metadata preciso para cumplir con los requisitos? Con las respuestas a estas preguntas, diseño mi clase y la armo. (Va algún tip o receta para que la clase compile)
  • 14. Caso de estudio. Named Credentials. ● ¿Qué precisa el negocio? ○ Crear dinámicamente y por código una named credential. ● ¿Qué metadata preciso para cumplir con los requisitos? Metadata específica. ● NamedCredential Atributos. ● LogInfo ● SessionHeader_element ● DebuggingInfo_element ● DebuggingHeader_element ● CallOptions_element ● AllOrNoneHeader_element ● createMetadata_element ● createMetadataResponse_element ● SaveResult ● Error ● ExtendedErrorDetails Funciones. ● createMetadata ¿Cómo obtengo estos atributos?
  • 15. Caso de estudio. Named Credentials. La clase que nunca se generó me va a servir para obtener los componentes que mencionamos previamente. Voy a quedarme con el código que preciso (y hasta puedo usar el mismo nombre para evitar tener que hacer algún replace). public String endpoint_x = URL.getSalesforceBaseUrl().toExternalForm() + '/services/Soap/m/51.0'; Inner class virtual Metadata . public virtual class Metadata { public String fullName; } La metadata específica va a extender a Metadata. En nuestro ejemplo: public class NamedCredential extends Metadata{ En la clase agregamos: public String type = 'NamedCredential'; public String fullName; private String[] fullName_type_info = new String[]{'fullName','http://soap.sforce.com/2006/04/metadata',null,'0','1','false'}; private String[] type_att_info = new String[]{'xsi:type'}; Y modificamos (le agregamos ‘fullName’ a la lista de strings): private String[] field_order_type_info = new String[]{'fullName', 'allowMergeFieldsInBody','allowMergeFieldsInHeader','authProvider','authTokenEndpointUrl','awsAccessKey','awsAccessSecret','awsRegion','awsService','certificate','end point','generateAuthorizationHeader','jwtAudience','jwtFormulaSubject','jwtIssuer','jwtSigningCertificate','jwtTextSubject','jwtValidityPeriodSeconds','label','oauthR efreshToken','oauthScope','oauthToken','outboundNetworkConnection','password','principalType','protocol','username'}; Lista de pasos para que la clase funcione.
  • 16. Caso de estudio. Named Credentials. Generó el código que va a utilizar esta clase recientemente creada. DemoService.MetadataPort service = new DemoService.MetadataPort(); service.SessionHeader = new DemoService.SessionHeader_element(); service.SessionHeader.sessionId = UserInfo.getSessionId(); DemoService.NamedCredential credential = new DemoService.NamedCredential(); credential.fullName = 'TrailblazerDemoAPI'; credential.label = 'Trailblazer Demo'; credential.endpoint = 'https://aquivalabs.com'; credential.principalType = 'NamedUser'; credential.protocol = 'AwsSv4'; credential.awsAccessKey = 'AKIARU6LVKHX2ITYNXXX'; credential.awsAccessSecret = 'NqaXhfFyRfMXTyWuHqEU86DJCVbM3uWdX6BZZZZ'; credential.awsRegion = 'us-west-2'; credential.awsService = 'execute-api'; credential.generateAuthorizationHeader = true; DemoService.SaveResult[] res = service.createMetadata(new DemoService.Metadata[] {credential});
  • 17. Caso de estudio. Permission sets. ● ¿Qué precisa el negocio? ○ Crear al dinámicamente y por código un permission set ○ Configurar algún permiso para un objeto y un campo ● ¿Qué metadata preciso para cumplir con los requisitos? Funciones. ● createMetadata Metadata específica. ● PermissionSet Atributos. ● LogInfo ● SessionHeader_element ● DebuggingInfo_element ● DebuggingHeader_element ● CallOptions_element ● AllOrNoneHeader_element ● createMetadata_element ● createMetadataResponse_element ● SaveResult ● Error ● ExtendedErrorDetails ● PermissionSetApplicationVisibility ● PermissionSetApexClassAccess ● ………………….. ● ………………...... ● ........................... ● PermissionSetUserPermission
  • 18. Caso de estudio. Custom Object (usando clase completa) ● ¿Qué precisa el negocio? ○ Crear al dinámicamente y por código un objeto ● ¿Qué metadata preciso para cumplir con los requisitos? Funciones. ● createMetadata Metadata específica. ● CustomObject Atributos. ● LogInfo ● SessionHeader_element ● DebuggingInfo_element ● DebuggingHeader_element ● CallOptions_element ● AllOrNoneHeader_element ● createMetadata_element ● createMetadataResponse_element ● SaveResult ● Error ● ExtendedErrorDetails ● .................................. ● .................................. ● Y muchos otros más... https://github.com/financialforcedev/apex-mdapi/blob/master/apex-mdapi/src/classes/MetadataServiceExamples.cls
  • 19. Caso de estudio. Remote Site Setting ● ¿Qué precisa el negocio? ○ Crear al dinámicamente y por código un remote site setting. ○ Verificar desde apex que existe ese Remote Site Setting ● ¿Qué metadata preciso para cumplir con los requisitos? Funciones. ● createMetadata ● listMetadata Metadata específica. ● RemoteSiteSetting Atributos. ● LogInfo ● SessionHeader_element ● DebuggingInfo_element ● DebuggingHeader_element ● CallOptions_element ● AllOrNoneHeader_element ● createMetadata_element ● createMetadataResponse_element ● SaveResult ● Error ● ExtendedErrorDetails ● .................................. ● .................................. ● Y muchos otros más...
  • 20. Terminando... ● ¿Experiencias similares para compartir? ● ¿Preguntas?