Appliquer les modificateurs d'accès dans les propriétés Apex du balisage de composant Lightning (mise à jour reportée)

Cette mise à jour est reportée à la version Summer ’21. Son activation (application) automatique était prévue dans Summer ’20. Cette mise à jour définit des composants Lightning cohérents avec l'utilisation des propriétés Apex dans d'autres contextes. Par exemple, une expression de balisage ne peut plus accéder à une propriété Apex avec une méthode getter Apex privée.

Où : cette modification s'applique aux composants Aura et Web Lightning dans Lightning Experience, Salesforce Classic, les sites de Générateur d'expérience et dans toutes les versions de l'application Salesforce.

Quand : cette mise à jour est appliquée lors de la mise à niveau d'une organisation sandbox ou de production vers Summer ’21. L'application automatique commence le 4 avril 2021 pour certaines organisations sandbox. Pour recevoir la date de mise à niveau de la version majeure de votre instance, accédez à Statut Trust, recherchez votre instance, puis cliquez sur l'onglet de maintenance.

Pourquoi : prenons par exemple une classe Apex avec une méthode getter privée pour une propriété de classe counter.

public class EnforcePrivateGetter {
    @AuraEnabled

    public Integer counter { private get; set; }

    @AuraEnabled
    public static EnforcePrivateGetter GetRepro2()
    {
        EnforcePrivateGetter result = new EnforcePrivateGetter();
        result.counter = 2; 
        return result;
    }
}

Lorsque la mise à jour est activée, ce composant Aura ne peut pas accéder à la méthode getter private avec l'expression {!v.apexObject.counter}. La même restriction s'applique à un composant Web Lightning.

<aura:component controller="EnforcePrivateGetter" access="global">
    <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>

    <aura:attribute type="EnforcePrivateGetter" name="apexObject" />

    counter = {!v.apexObject.counter} <br></br>
</aura:component>

Voici le contrôleur JavaScript.

({
    doInit : function(cmp, ev) {
        var action = cmp.get("c.GetRepro2");
    
        action.setCallback(this, function(response) {
          var state = response.getState();
          if (state === "SUCCESS") {
            cmp.set('v.apexObject', response.getReturnValue());
          }
          else if (state === "ERROR") {
            console.log('Error : ' + JSON.stringify(errors));
          }
        });
        $A.enqueueAction(action);
    }
})

Lorsque la mise à jour est activée, la correction consiste à retirer le modificateur d'accès private de la méthode getter et de changer la définition de la variable de classe sur :

public Integer counter { get; set; }

Pour pouvoir être lue hors de la classe Apex, une propriété Apex ne peut pas avoir un modificateur d'accès private ou protected.

Comment : pour tester cette mise à jour, nous recommandons de travailler dans une organisation sandbox. À partir du 4 avril, vous pouvez continuer à activer ou à désactiver la mise à jour depuis Mises à jour de version dans la Configuration jusqu'à son application automatique lors de la mise à niveau de votre organisation vers la version Summer ’21.

  1. Dans Configuration, saisissez Mises à jour de version dans la case Recherche rapide, puis sélectionnez Mises à jour de version.
  2. Recherchez « Appliquer les modificateurs d'accès dans les propriétés Apex du balisage de composant Lightning », puis cliquez sur Afficher les détails ou sur Commencer.
  3. Testez le comportement des composants qui utilisent des classes Apex avec des modificateurs d'accès private ou protected dans des méthodes getter.