Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

匿名 Apex で CPQ ライセンスカスタムオブジェクトのアクセス権を権限セットから削除

公開日: Sep 27, 2025
説明
Salesforce CPQ 228 から、パッケージの権限セットライセンス (PSL) が導入されました。CPQ ライセンスオブジェクトを表示および操作するには、ユーザが CPQ PSL を割り当てられている必要があります。既存の権限セット (PS) で、子オブジェクトへのアクセスを許可するが、その CPQ 親オブジェクトへのアクセスは許可していない場合、この変更の影響を受ける可能性があります。このような権限セットの変更を保存しようとすると、次のような検証エラーメッセージが表示されて保存を実行できない場合があります。
  • XXXXXX に対する「参照」を付与できません。必須のライセンスに伴う権限セットを使用して権限を付与するか、特定のライセンスに関連付けられていない権限セットを使用してください。
  • DEBUG|次の理由でオブジェクト権限の更新に失敗しました: System.DmlException: 削除に失敗しました。最初の例外 (行 0、ID 110Dx0000074p0iIAA); 最初のエラー: FIELD_INTEGRITY_EXCEPTION, 親の権限セットで「すべてのデータの参照」権限が有効になっている場合に Read または ViewAllRecords を削除できません: [],AnonymousBlock: 行 23、列 1
 

権限セットを有効な状態に戻さない限り、システムではいかなる種類の変更も実行できません。すべての関連する CPQ/AA オブジェクト権限を削除すると、権限セットが有効な状態に戻ります。CPQ 228 (Winter '21) へのアップグレード後に準拠するように権限セットを更新するために、管理者は次のクエリを使用して、CPQ 関連のオブジェクト権限をカスタムプロファイルから削除できます。開発者コンソールでスクリプトを実行するには、次の手順に従います。
  1. 開発者コンソールを開きます。
  2. [デバッグ] > [Open Execute Anonymous Window (匿名実行ウィンドウを開く)] (Ctrl + E)
  3. コードをコピーして匿名ウィンドウに貼り付けます。
  4. [Open Log (ログを開く)] にチェックを付けます。
  5. 実行します。
  6. [Debug Only (デバッグのみ)] 検索条件ボックスにチェックを付けます。

注意: 
  • DocuSign 受信者オブジェクトは、見積テンプレートを主従関係の主側として定義します。そのため、DocuSign を使用している組織は、そのユーザが関連ライセンスを持つ指定 CPQ ユーザでない場合、DocuSign 受信者オブジェクトへの権限の削除が必要になる可能性があります。それ以外の場合、ユーザは CPQ 権限セットライセンスが割り当てられている必要があります。
  • スクリプトを正常に実行するには、システム権限「すべてのデータの参照」および「すべてのデータの編集」を権限セットから削除する必要があります。 
解決策
// 1. CPQ+AA オブジェクト (LCO + 連動関係) を削除の階層順に定義する 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' }; // 次を権限セット ID に置き換える String permSetId = ''; ObjectPermissions[] profileObjPerms; // 2.反復して削除するため 1 回のバッチではすべて完了しない for(String objName : customLCOAndDependentObjects) { // オブジェクトによってオブジェクト権限をクエリ profileObjPerms = [SELECT Id FROM ObjectPermissions where Parent.Id = :permSetId and SobjectType = :objName]; System.debug('Object perms for object:'+objName+':'+profileObjPerms.size()); try{ // 実行前に次の行をコメント解除 // delete profileObjPerms; } catch(Exception e){ System.debug('Obj perms update failed due to the follow reason: '+ e + ',' + e.getStackTraceString()); } } // 3.すべての関連オブジェクト権限の削除を確認するクエリ ObjectPermissions[] objPerms = [SELECT Id FROM ObjectPermissions where Parent.Id = :permSetId and SobjectType = :customLCOAndDependentObjects]; System.debug('Rerun Object Perm Records for CPQ & AA: '+ objPerms.size());


注: 価格ルールが SBQQ__LookupQuery__c の主オブジェクトとして定義されていない場合、上記のコードのステップ 2 で 'SBQQ__LookupQuery__c' をオブジェクトのリストから削除できます。
 

関連情報

 

ナレッジ記事番号

000394589

 
読み込み中
Salesforce Help | Article