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

FieldPermissions

親の PermissionSet の有効化された項目権限を表します。ユーザに項目へのアクセス権を付与するには、FieldPermissions レコードをユーザに割り当てられた PermissionSet に関連付けます。FieldPermissions レコードは、PermissionSet でのみサポートされ、Profile ではサポートされません。このオブジェクトは、API バージョン 24.0 以降で使用できます。

サポートされているコール

create()、delete()、describeSObjects()、query()、retrieve()、update()、upsert()

項目

項目名 詳細
Field
型
picklist
プロパティ
Create、Filter、Group、Restricted picklist、Sort
説明
項目の API 参照名。この名前には SobjectType がプレフィックスとして付けられます。たとえば、Merchandise__c.Description__c のようになります。
ParentId
型
reference
プロパティ
Create、Filter、Group、Sort
説明
項目の親 PermissionSet の Id。
PermissionsEdit
型
boolean
プロパティ
Create、Defaulted on create、Filter、Group、Sort、Update
説明
true の場合、この親 PermissionSet に割り当てられたユーザはこの項目を編集できます。同じ項目の PermissionsRead が true である必要があります。
PermissionsRead
型
boolean
プロパティ
Create、Defaulted on create、Filter、Group、Sort、Update
説明
true の場合、この親 PermissionSet に割り当てられたユーザはこの項目を参照できます。FieldPermissions レコードでは、少なくとも PermissionsRead が true に設定されている必要があります。設定されていないと削除されます。
SobjectType
型
picklist
プロパティ
Create、Filter、Group、Restricted picklist、Sort
説明
オブジェクトの API 参照名。たとえば、Merchandise__c です。

使用方法

FieldPermissions は ObjectPermissions と同様に機能します。ただし、FieldPermissions には、項目名を返すための Field 属性が含まれています。

たとえば、次のクエリは少なくとも「参照」権限が含まれる FieldPermissions レコードをすべて返します。この結果には、項目、オブジェクト、および権限セット名が含まれます。

1SELECT SobjectType, Field, PermissionsRead, Parent.Name
2FROM FieldPermissions
3WHERE PermissionsRead = True

FieldPermissions をクエリする場合には、項目の親オブジェクトが含まれます。たとえば、Account オブジェクトの Type 項目と一致するすべての行を検索するには、次のクエリを作成します。

1SELECT Id, SobjectType, Field
2FROM FieldPermissions
3WHERE Field = 'Account.Type' AND SobjectType = 'Account'

クエリの SELECT 行に、SobjectType と Field の両方を含める必要があります。また、項目をクエリする場合、項目の完全な API 名を SobjectType.Field の形式で指定する必要もあります。

項目権限の特殊なプロパティ

自動採番項目と数式項目には、項目権限の機能に関する特殊なルールがあります。どちらにも FieldPermissions レコードがありますが、挿入と更新は PermissionsRead に��限されます。これらの項目でユーザに許可されるのは参照のみ���あるため、PermissionsEdit はどちらのデータ型にも許可されません。

次のデータ型は、常に参照可能とみなされるため、FieldPermissions レコードは返されません。

  • Id
  • CreatedById
  • CreatedDate
  • IsDeleted
  • LastModifiedById
  • LastModifiedDate
  • SystemModStamp

次のデータ型は、常に参照可能および書き込み可能とみなされるため、FieldPermissions レコードは返されません。

  • OwnerId
  • 主従カスタム (関係) 項目
  • 必須カスタム項目

その結果、ユーザに項目への何らかのアクセス権がある場合でも、次のクエリはレコードを返しません。

1SELECT Field, SobjectType, PermissionsRead
2FROM FieldPermissions
3WHERE Field='Id'

項目が FieldPermissions レコードを返せるかどうかを判別するには、項目に対して describeSObject() をコールします。たとえば、describeSObject('Merchandise__c') は、項目のプロパティを含む、Merchandise カスタムオブジェクトのすべてのプロパティを返します。permissionable プロパティが false の項目 (このセクションに挙げたデータ型など) を使用している場合、項目権限レコードは存在しないため、それらに対するクエリ、挿入、更新、削除は実行できません。

カスタム活動項目の使用

ToDo と行動は別個のオブジェクトとみなされますが、共通の活動カスタム項目セットを共有します。そのため、カスタム ToDo 項目が作成されると、カスタム行動項目も作成されます。その逆も同様です。カスタム項目は、行動レイアウト、ToDo レイアウト、またはその両方に表示できます。

カスタム活動項目は、ToDo と行動で共有されますが、FieldPermissions レコードは ToDo と行動で別個に表示されます。ただし、一方の項目権限レコードを変更すると、もう一方も自動的に変更されます。たとえば、カスタム活動項目を作成し、権限セットで項目権限を割り当て、次のクエリを実行すると、クエリは同じ権限値を持つ 2 件のレコードを返します。

1SELECT Field, Id, ParentId, PermissionsEdit, PermissionsRead, SobjectType
2FROM FieldPermissions
3WHERE SobjectType = 'event' OR SobjectType ='task'

いずれかのレコードを別の項目権限セット値で更新し、クエリを再び実行すると、両方のレコードについて同じ権限値が返されます。

項目権限のネスト

PermissionSet クエリに FieldPermissions をネストできます。たとえば、次のクエリは「参照のみ項目の編集」が true の権限セットをすべて返します。さらに、結果セットには Merchandise オブジェクトに対する「参照」項目権限と「編集」項目権限が両方とも含まれます。このためには、SOQL を項目権限のリレーション名 FieldPerms を使用する項目権限クエリでネストします。
1SELECT PermissionsEditReadonlyFields,
2(SELECT SobjectType, Field, PermissionsRead, PermissionsEdit
3FROM FieldPerms
4WHERE SobjectType = 'Merchandise__c')
5FROM PermissionSet
6WHERE PermissionsEditReadonlyFields = true

その結果、PermissionSet と子関連オブジェクト (この場合は FieldPermissions) 間のリレーションを辿ることができます。これを行うには、PermissionSet オブジェクトから子リレーション (ObjectPerms、FieldPerms など) を使用するか、子オブジェクトから Parent.permission_set_attribute を持つ PermissionSet を参照します。

重要なのは、条件付き WHERE ステートメントを使用して結果セットを限定するタイミングを考慮することです。権限セットオブジェクトの属性に基づいてクエリを行うには、SOQL を子リレーションでネストします。一方、子オブジェクトの属性に基づいてクエリを行うには、クエリで権限セットの親属性を参照する必要があります。

次の 2 つのクエリは、子リレーションを使用するか親表記を使用するかに基づいて結果が異なる同じ列を返します。
1SELECT PermissionsEditReadonlyFields,
2(SELECT SobjectType, Field, PermissionsRead, PermissionsEdit
3FROM FieldPerms
4WHERE SobjectType = 'Merchandise__c')
5FROM PermissionSet
6WHERE PermissionsEditReadonlyFields = true
および
1SELECT SobjectType, Field, PermissionsRead, PermissionsEdit, Parent.Name,
2   Parent.PermissionsEditReadonlyFields
3FROM FieldPermissions
4WHERE SObjectType='Merchandise__c'