Loading

L’Apex anonyme supprime l’accès à l’objet personnalisé sous licence CPQ des ensembles d'autorisations

Date de publication: Sep 27, 2025
Description
Depuis Salesforce CPQ 228, des licences d'ensembles d'autorisations (PSL) ont été introduites pour le package. Une PSL CPQ doit être attribuée aux utilisateurs pour afficher et utiliser les objets sous licence CPQ. Cette modification peut affecter les PSL existantes si elles accordent l’accès aux objets enfants sans accorder également l’accès à leur objet CPQ parent. Lorsque vous tentez d’enregistrer les modifications apportées à ces ensembles d'autorisations, un message d'erreur de validation semblable aux exemples répertoriés ci-dessous peut apparaître et empêcher l’enregistrement :
  • La lecture sur XXXXXX ne peut pas être accordée. Accordez l’autorisation à l’aide d’un ensemble d’autorisations avec la licence requise ou utilisez un ensemble d’autorisations non associé à une licence spécifique.
  • Échec de la mise à jour des autorisations DEBUG|Obj pour le motif suivant : System.DmlException: Échec de la suppression. Première exception sur la ligne 0 ID 110Dx0000074p0iIAA ; première erreur : FIELD_INTEGRITY_EXCEPTION, Impossible de retirer Lire ou Afficher tous les enregistrements si l’autorisation Afficher toutes les données est activée pour l’ensemble d'autorisations parent : [],AnonymousBlock: ligne 23, colonne 1
 

L’ensemble d'autorisations doit revenir à un état valide avant que le système autorise tout type de modification. Le retrait de toutes les autorisations d’objet CPQ/AA fera revenir l’ensemble d'autorisations à un état valide. Pour mettre à jour l’ensemble d’autorisations afin qu’il soit conforme après la mise à niveau à CPQ 228 (Winter '21), les administrateurs peuvent utiliser la requête ci-dessous pour retirer les autorisations d’objet associé à CPQ des profils personnalisés. Suivez les étapes ci-dessous pour exécuter le script dans la Developer Console :
  1. Ouvrez la Developer Console
  2. Déboguer > Ouvrir la fenêtre anonyme d'exécution (CTRL+E)
  3. Copiez et collez le code dans la fenêtre anonyme
  4. Sélectionnez : Ouvrir le journal
  5. Exécuter
  6. Cochez la case de filtre « Déboguer uniquement »

REMARQUE : 
  • L'objet Destinataire DocuSign définit Modèle de devis comme le maître dans leur relation maître-détail. Ainsi, les organisations qui utilisent DocuSign risquent de devoir supprimer les autorisations sur l’objet Destinataire DocuSign si la personne n’est pas désignée comme utilisateur CPQ avec une licence associée. Autrement, une licence d’ensemble d’autorisations CPQ doit être attribuée à l’utilisateur.
  • Les autorisations système Afficher toutes les données et Modifier toutes les données doivent être supprimées des ensembles d'autorisations pour que le script puisse être exécuté. 
Résolution
// 1. Define CPQ+AA objects (LCO + dependents) by hierarchy order for deletion String[] customLCOAndDependentObjects = new String[] { 'SBQQ__QuoteLinePricingGuidance__c','SBQQ__QuoteDocument__c','SBQQ__QuoteLineConsumptionRate__c','SBQQ__QuoteLineConsumptionSchedule__c','SBQQ__QuoteLine__c','SBQQ__QuoteLineGroup__c','SBQQ__Quote__c', 'SBQQ__PricingGuidanceTier__c','SBQQ__PricingGuidance__c', 'SBQQ__ErrorCondition__c','SBQQ__ConfigurationRule__c','SBQQ__ProductAction__c','SBQQ__ProductRule__c', 'SBQQ__LookupQuery__c','SBQQ__PriceCondition__c','SBQQ__PriceAction__c','SBQQ__PriceRule__c', 'SBQQ__LineColumn__c','SBQQ__TemplateSection__c','SBQQ__QuoteTemplate__c', 'SBQQ__SubscriptionConsumptionRate__c','SBQQ__SubscriptionConsumptionSchedule__c','SBQQ__SubscribedAsset__c','SBQQ__Subscription__c', 'sbaa__ApprovalSnapshot__c','sbaa__Approval__c', 'sbaa__ApprovalCondition__c','sbaa__ApprovalRule__c' }; // replace below with perm set id String permSetId = ''; ObjectPermissions[] profileObjPerms; // 2. Iterate and delete, so not all done in 1 batch for(String objName : customLCOAndDependentObjects) { // Query for object permissions by object profileObjPerms = [SELECT Id FROM ObjectPermissions where Parent.Id = :permSetId and SobjectType = :objName]; System.debug('Object perms for object:'+objName+':'+profileObjPerms.size()); try{ // Uncomment below line before executing // delete profileObjPerms; } catch(Exception e){ System.debug('Obj perms update failed due to the follow reason: '+ e + ',' + e.getStackTraceString()); } } // 3. Query to ensure all the relevant object perms are cleared ObjectPermissions[] objPerms = [SELECT Id FROM ObjectPermissions where Parent.Id = :permSetId and SobjectType = :customLCOAndDependentObjects]; System.debug('Rerun Object Perm Records for CPQ & AA: '+ objPerms.size());


REMARQUE : Si Règle de prix n’est pas défini comme Objet principal pour SBQQ__LookupQuery__c, vous pouvez supprimer  'SBQQ__LookupQuery__c' de la liste des objets dans l’étape 2 du code ci-dessus.
 

RUBRIQUES CONNEXES

 

Numéro d’article de la base de connaissances

000394589

 
Chargement
Salesforce Help | Article