Fermer

juin 20, 2024

Points forts des développeurs / Blogs / Perficient

Points forts des développeurs / Blogs / Perficient


Image vedette du blog 1260x630 1

(Photo fournie par : Salesforce)

1. Capacités Apex améliorées

Requêtes relationnelles SOQL à cinq niveaux : Salesforce permet désormais aux requêtes relationnelles SOQL de parcourir jusqu’à cinq niveaux d’enregistrements parent-enfant directement dans Apex, ce qui s’aligne sur la prise en charge précédente disponible via les API REST. Cette amélioration est particulièrement utile pour récupérer des données profondément imbriquées. Voici un exemple de requête SOQL illustrant cette fonctionnalité : Exemple :

List<Account> accounts = [SELECT Name,
(SELECT LastName,
 (SELECT AssetLevel,
  (SELECT Description,
    (SELECT LineItemNumber FROM WorkOrderLineItems)
   FROM WorkOrders)
  FROM Assets)
 FROM Contacts)
FROM Account];

Chaque sous-requête de relation parent-enfant compte comme une requête agrégée et la limite pour celles-ci dans une transaction Apex est de 300 pour les transactions synchrones. Pour suivre les requêtes agrégées, utilisez Limits.getAggregateQueries().

2. Classe FormulaEval (bêta)

La classe FormulaEval dans Apex a été améliorée pour prendre en charge les sObjects en plus des classes Apex définies par l’utilisateur. Cette classe permet l’évaluation dynamique des formules au moment de l’exécution. Voici un exemple pratique :

Account account = new Account();
account.Name="Sample Account";
account.Rating = 'Hot';
String formulaExpression = 'ISPICKVAL(Rating, \'Hot\')';
FormulaEval.FormulaInstance formula = Formula.builder()
                           .withReturnType(FormulaEval.FormulaReturnType.Boolean)
                           .withType(Account.class)
                           .withFormula(formulaExpression)
                           .build();
System.debug((boolean)formula.evaluate(account)); // Expected output: true

3. Curseurs Apex (bêta)

Les curseurs Apex facilitent le traitement des résultats de requêtes SOQL volumineuses en morceaux gérables au sein d’une seule transaction. Ceci est particulièrement utile pour gérer des ensembles de données étendus. Voici un exemple d’utilisation de curseurs Apex avec Queueable :

public class FileProcessingQueueable implements Queueable {
    private Database.Cursor fileQueryCursor;
    private Integer position;

    public FileProcessingQueueable() {
        fileQueryCursor = Database.getCursor('SELECT Id,
                                              Title,
                                              ContentDocumentId,
                                              VersionData
                                              FROM ContentVersion
                                              WHERE CreatedDate = LAST_N_DAYS:100');
        position = 0;
    }

    public void execute(QueueableContext ctx) {
        List<ContentVersion> chunk = fileQueryCursor.fetch(position, 200);
        position += chunk.size();

            for (ContentVersion cv : chunk) {
            String fileName = cv.Title;
            Blob fileBody = cv.VersionData;
            System.debug('Processing file: ' + fileName);
        }

        if (position < fileQueryCursor.getNumRecords()) {
            System.enqueueJob(this);
          }
      }
  }

4. Modificateurs InvocableVariable

Les nouveaux modificateurs defaultValue et placeholder Text pour InvocableVariable vous permettent de définir des valeurs par défaut et de fournir un texte d’espace réservé personnalisé pour les paramètres d’entrée dans les actions invocables. Voici un exemple :

public class MyFlowAction {
    public class MyInvocableVariable {
        @InvocableVariable(label="Notes",
                           description='Additional notes for processing.',
                           placeholderText="Enter notes here...",
                           defaultValue="Account notes")
        public String notes;
    }

    @InvocableMethod(=label="Process Account",
                             description='Process an account record.')
    public static void processAccount(List<MyInvocableVariable> inputs) {
        // Your logic here
    }
}

5. Prise en charge de la méthode getRelationshipOrder pour les champs standard

La méthode getRelationshipOrder dans DescribeFieldResult renvoie désormais 0 pour les champs de relation principaux et 1 pour les champs de relation secondaires pour les champs standard, améliorant ainsi la gestion des relations entre les données.

6. E-mails d’exception Apex améliorés

Les e-mails d’exception générés par Apex incluent désormais des informations détaillées telles que le nom de l’organisation, le nom d’utilisateur et le nom de mon domaine, améliorant ainsi le contexte du débogage.

6. Surveillance efficace des tâches planifiées Apex

Salesforce a rationalisé la surveillance et la gestion des tâches Apex planifiées. La page Toutes les tâches planifiées affiche désormais l’ID d’objet CronTrigger associé et fournit des messages d’erreur améliorés lors de la tentative de suppression de classes utilisées par des tâches planifiées ou par lots.

7. Améliorations des composants Web Lightning (LWC)

un. Composants LWC adressables par URL:Vous pouvez désormais rendre les composants Web Lightning (LWC) adressables par URL à l’aide de la cible Lightning__UrlAddressable, permettant ainsi la navigation directe vers ces composants avec des paramètres d’état personnalisés.

b. API de barre d’utilitaires pour les LWC:Le module Lightning/platformUtilityBarApi introduit des méthodes de gestion des utilitaires dans la barre d’utilitaires, facilitant ainsi la création et la gestion des composants de la barre d’utilitaires.

8. La dernière version de l’API 61.0 apporte plusieurs améliorations :

un. API Web ElementInternals: permet aux contrôles de formulaire personnalisés de s’intégrer de manière transparente aux formulaires HTML standard, les rendant plus accessibles et fonctionnels.
b. Hooks de cycle de vie de l’API de navigateur natif: Adoption des API de navigateur natives pour les hooks de cycle de vie afin de garantir de meilleures performances et de résoudre les fuites de mémoire.
c. Intégration de composants Web tiers (bêta): Intégrez des composants Web tiers dans les LWC sans avoir besoin de les reconstruire, ce qui facilite des intégrations plus transparentes.
d. Mises à jour des composants de base pour la prise en charge native de Shadow DOM: Salesforce a mis à jour les composants de base en vue de la prise en charge future du Shadow DOM natif.
e. Évitez de coiffer les anti-modèles: optimisez les temps de rendu en évitant les anti-modèles qui conduisent à des pratiques de style inefficaces.
F. Comportement de navigation modal amélioré: Le module Lightning/navigation prend désormais en charge le réglage de replace sur true pour fermer automatiquement les modaux précédents lors de la navigation.
g. Nouveaux composants LWC pour Field Service Mobile: Tirez parti des nouveaux LWC à l’aide des plug-ins NFC et Space Capture pour améliorer la capture de données et rationaliser les processus dans les applications mobiles Field Service.

9. Améliorations du cloud de données

SOQL statique pour les DMO Data Cloud : Les développeurs peuvent désormais utiliser SOQL statique avec des objets de modèle de données (DMO) Data Cloud dans Apex. Cet ajout simplifie la récupération de données avec des résultats fortement typés. Voici un exemple :

List<Solar_Panel_Event__dlm> solarPanelEvents = [
    SELECT
        Id,
        DataSource__c,
        DataSourceObject__c,
        ac_current__c,
        ac_voltage__c,
        battery__c,
        CustomerId__c,
        date_time__c,
        dc_current__c,
        dc_voltage__c
    FROM Solar_Panel_Event__dlm
    WHERE CustomerId__c = :customerId];

10. Se moquer des requêtes SOQL pour les DMO

Salesforce prend désormais en charge les réponses aux requêtes SOQL simulées pour les DMO dans les tests unitaires Apex, améliorant ainsi la couverture et la fiabilité des tests. Voici un exemple de classe de test :

@IsTest
public class TestSolarDeviceEventsManager { 
    @IsTest
    public static void  testMockSoql() {
        SoqlStubProvider  stub = new SolarPanelEventsSoqlStub();
        Test.createSoqlStub(Solar_Panel_Event__dlm.sObjectType, stub);       
        Assert.isTrue(Test.isSoqlStubDefined(Solar_Panel_Event__dlm.sObjectType));       
        Test.startTest();       
        String customerId = '12345abd';        
        List<Solar_Panel_Event__dlm> solarPanelEvents = EventManager.getSolarPanelEvents(customerId);        
        Test.stopTest();        
        Assert.isTrue(solarPanelEvents.size() > 0);
    }

    private  class  SolarPanelEventsSoqlStub  extends  SoqlStubProvider {
        public  override  List<SObject> handleSoqlQuery(
            Schema.SObjectType sObjectType,
            String query,
            Map<String, Object> bindVariables) {
            Assert.areEqual(Solar_Panel_Event__dlm.sObjectType, sObjectType);            
            String customerId = '';
            if (bindVariables.containsKey('tmpVar1')) {
                customerId  =  (String)bindVariables.get('tmpVar1');
            }  
         
            Solar_Panel_Event__dlm  dmo  =  (Solar_Panel_Event__dlm)Test.createStubQueryRow(
                sObjectType, new Map<String, Object>{
                    'ac_current__c' => 12,
                    'ac_voltage__c' => 440,
                    'battery__c' => 1,
                    'CustomerId__c' => '12345abd',
                    'date_time__c' => System.now(),
                    'dc_voltage__c' => 1
                }
            );         
            return  new  List<SObject>{dmo};
        }
    }
}

11. Test des flux de données déclenchés par le cloud

Vous pouvez désormais exécuter des tests pour les flux déclenchés par Data Cloud, permettant ainsi aux développeurs de valider leurs fonctionnalités sans configurer manuellement les paramètres de débogage pour chaque exécution de test.

12. Relations de recherche de données

Salesforce a introduit la possibilité de créer des relations de recherche entre les DMO et un nombre sélectionné d’objets CRM. Cette fonctionnalité permet d’interroger des DMO depuis Apex ou de créer des listes associées, simplifiant ainsi les modèles de données complexes.

13. Enrichir Data Cloud avec des objets CRM

Les enrichissements de listes associées Data Cloud prennent désormais en charge les objets de compte en plus des pistes et des contacts, permettant un enrichissement et un accès plus complets aux données.

14. Prise en charge du langage de requête Einstein (EQL)

EQL prend désormais en charge l’interrogation des DMO, élargissant ainsi la portée d’EQL pour inclure ces objets pour une analyse de données plus flexible.






Source link