この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Newer Version Available

This content describes an older version of this product. View Latest

DML 操作で同時に使用できない sObject

特定の sObject (設定オブジェクトともいう) に対する DML 操作は、同じトランザクション内の他の sObject の DML と混在させることができません。この制限が存在する理由は、sObject には、組織のレコードへのユーザのアクセスに影響を与えるものがあるためです。不適切なアクセスレベル権限で操作が実行されないように、こうした種別の sObject は別のトランザクションで挿入または更新する必要があります。たとえば、1 つのトランザクション内で取引先とユーザロールを更新することはできません。
同じトランザクション内で DML 操作を実行する場合、次の sObject は他の sObject と一緒に使用できません。
  • FieldPermissions
  • Group

    他の sObject を含む 1 つのトランザクションでは、グループの挿入と更新のみを行うことができます。その他の DML 操作は使用できません。

  • GroupMember

    Salesforce API バージョン 14.0 以前を使用して保存した従来の Apex コードの場合は、同じトランザクションで他の sObject があるグループメンバーを挿入できます。

    メモ

    API
  • ObjectPermissions
  • PermissionSet
  • PermissionSetAssignment
  • QueueSObject
  • ObjectTerritory2AssignmentRule
  • ObjectTerritory2AssignmentRuleItem
  • RuleTerritory2Association
  • SetupEntityAccess
  • Territory2
  • Territory2Model
  • UserTerritory2Association
  • User

    Salesforce API バージョン 14.0 以前を使用して保存された Apex コードの場合、他の sObject を含む 1 つのトランザクションで、ユーザの挿入を行うことができます。

    Salesforce API バージョン 15.0 以降を使用して保存された Apex コードの場合、UserRoleId が null に指定されていれば、他の sObject を含む 1 つのトランザクションで、ユーザの挿入を行うことができます。

    Salesforce API バージョン 14.0 以前を使用して保存された Apex コードの場合、他の sObject を含む 1 つのトランザクションで、ユーザの更新を行うことができます。

    Salesforce API バージョン 15.0 以降を使用して保存された Apex コードの場合、(有効または無効な) Lightning Sync 設定にユーザが含まれておらず、次の項目が更新されていなければ、他の sObject を含む 1 つのトランザクションで、ユーザの更新を行うことができます。
    • UserRoleId
    • IsActive
    • ForecastEnabled
    • IsPortalEnabled
    • Username
    • ProfileId
  • UserRole
  • UserTerritory
  • Territory
  • Salesforce API バージョン 17.0 以前を使用して保存された Apex コードのカスタム設定。

カスタムコントローラで Visualforce ページを使用している場合、1 つの要求またはアクション内で sObject 型とこれらの特殊な sObject を混在させることはできません。ただし、後続の要求でこれらの異なる sObject 型の DML 操作を実行できます。たとえば、[保存] ボタンで取引先を作成してから、[送信] ボタンで null 以外のロールのユーザを作成できます。

次のプロセスを使用して、1 つのクラスで複数のデータ型の sObject に対して DML 操作を実行できます。
  1. 1 つのデータ型の sObject で DML 操作を行うメソッドを作成します。
  2. 2 番目の sObject データ型を操作するために future アノテーションを使用する 2 番目のメソッドを作成します。

このプロセスは、次のセクションの例で説明します。

例: future メソッドを使用した混合 DML 操作の実行

この例では、future メソッドを使用して User オブジェクトに対する DML 操作を実行することで、混合 DML 操作を実行する方法を示します。