FLS Check in 2GP

Sep 08 2020

Ich habe ein neues 2GP-Paket erstellt. Da es für AppExchange freigegeben wird, habe ich für jeden Ort, an dem ich mit der Datenbank in meinem Apex-Code in Kontakt stehe, eine generische CRUD- und FLS-Prüfung implementiert.

z.B

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

Ich erstelle eine neue Paketversion mit -cSchlüssel für die Apex-Testabdeckung, aber die Tests schlagen aufgrund von FLS-Berechtigungsprüfungen fehl. CRUD-Prüfungen bestehen einwandfrei.

In der Dokumentation geht der 2GP-Build folgendermaßen vor:

  1. Eine neue unzugängliche Arbeitsorganisation wird erstellt.
  2. Metadaten werden in die Arbeitsorganisation verschoben.
  3. Tests laufen.
  4. Das Skript nach der Installation wird ausgeführt.

Daher sehe ich keine Möglichkeit, dem Benutzer FLS-Berechtigungen zuzuweisen, für die die Tests ausgeführt werden.

Das Erstellen eines Pakets ohne -coder ohne FLS-Prüfungen funktioniert einwandfrei.

Gibt es eine Möglichkeit, diese FLS-Prüfung zu überwinden, dem laufenden Benutzer FLS-Zugriff zu gewähren oder eine andere Lösung zu finden?

Antworten

3 BritishBoyinDC Sep 08 2020 at 20:26

In Apex-Tests können Sie dazu die RunAs- Funktion verwenden. Erstellen Sie im Grunde genommen einen Benutzer im Test, weisen Sie ein Basisprofil zu (das neue Minimum Access ist hierfür hilfreich), weisen Sie dann den Berechtigungssatz zu und führen Sie das aus Test zB

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);

Dies setzt jedoch voraus, dass Sie das Perm-Set in das Paket aufnehmen. Wenn nicht, müssen Sie wahrscheinlich auf diese neue Funktion warten (oder auf Pilot anwenden), mit der Sie nicht = gepackte Metadaten in den Paketerstellungsprozess einbeziehen können, wenn die Arbeitsorganisation erstellt wird.