Registro de FLS en 2GP

Sep 08 2020

Creé un nuevo paquete 2GP. Dado que se lanzará a AppExchange, implementé una verificación genérica de CRUD y FLS para cada lugar con el que me comunico con la base de datos en mi código Apex.

p.ej

MyAwsomeObject.getDescribe().isUpdateable();
MyAwesomeField.getDescribe().isUpdateable();

Construyo una nueva versión de paquete con -cclave para la cobertura de prueba de Apex, pero las pruebas fallan debido a las verificaciones de permisos de FLS. Las comprobaciones CRUD pasan muy bien.

De la documentación, la compilación de 2GP es la siguiente:

  1. Se crea una nueva organización borrador inaccesible.
  2. Los metadatos se envían a la organización temporal.
  3. Las pruebas se ejecutan.
  4. Se ejecuta el script posterior a la instalación.

Entonces, no veo una forma de asignar permisos FLS al usuario en nombre de quién se están ejecutando las pruebas.

La creación de un paquete sin -co sin controles FLS funciona perfectamente.

¿Hay alguna manera de superar esta verificación de FLS, dar acceso a FLS al usuario que ejecuta o cualquier otra solución?

Respuestas

3 BritishBoyinDC Sep 08 2020 at 20:26

Entonces, en Apex Tests, puede usar la función RunAs para hacer esto; básicamente, cree un usuario en la prueba, asigne un perfil básico (el nuevo Acceso mínimo es útil para esto), y luego asigne el conjunto de permisos y ejecute el prueba, por ejemplo

Profile p = [SELECT Id FROM Profile WHERE Name = 'Minimum Access - Salesforce '];

User u = new User(Alias = 'standt', Email = '[email protected]',
EmailEncodingKey = 'UTF-8', LastName = 'Testing', LanguageLocaleKey = 'en_US', LocaleSidKey = 'en_US', ProfileId = p.Id,
TimeZoneSidKey = 'America/Los_Angeles', UserName = '[email protected]');

insert u;

PermissionSet ps = [SELECT Id FROM PermissionSet WHERE Name = 'My Permission Set'];
insert new PermissionSetAssignment(AssigneeId = u.id, PermissionSetId = ps.Id);

Pero, esto supone que está incluyendo el conjunto de permanente en el paquete. De lo contrario, probablemente tendrá que esperar a esta nueva función (o solicitar la prueba piloto) que le permitirá incluir metadatos no empaquetados en el proceso de creación del paquete cuando se construya la organización temporal.