データアクセスに影響する要素
一部の要素は、組織のデータへ��アクセスに影響します。
API を使用する際、次の要素は組織データへのアクセスに影響を与えます。
- アクセス
- 組織で API アクセスが有効になっている必要があります。
- オブジェクトは、Salesforce に連絡してアクセスを要求するまで使用できない場合があります。たとえば、エンタープライズテリトリー管理がアプリケーションで有効になっている場合にのみ Territory2 を表示できます。オブジェクトのアクセスに関する情報は、各オブジェクトの「使用方法」セクションに記述されます。
- 場合によっては、機能に関連するオブジェクトに API でアクセスできるようにするには、機能を 1 回は使用する必要があります。たとえば、recordTypeIds を使用できるのは、ユーザーインターフェースで組織に少なくとも 1 つのレコードタイプが組織に作成された後です。
-
データアクセスの問題を調査するには、最初に WSDL を調査します。
- Enterprise WSDL: 生成された Enterprise WSDL ファイルには、組織で利用可能なすべてのオブジェクトが含まれています。API を使用して、クライアントアプリケーションは Enterprise WSDL ファイルで定義されているオブジェクトにアクセスできます。
- Partner WSDL: 生成された Partner WSDL ファイルを使用する際、クライアントアプリケーションは describeGlobal() コールで返されたオブジェクトにアクセスできます。
- オブジェクトレベルおよび項目レベルのセキュリティ
- API はユーザーインターフェースで設定したオブジェクトレベルおよび項目レベルのセキュリティを優先します。ログインユーザーの権限およびアクセス設定で許可されている場合のみ、オブジェクトや項目にアクセスできます。たとえば、ユーザーに表示されない項目は、query() または describeSObjects() コールでも返されません。同様に、参照のみ項目は更新できません。
- ユーザー権限
- API へのアクセスを試みるユーザーは、「API 対応」権限が選択されている必要があります。デフォルトでは選択されています。
- クライアントアプリケーションは、ログインユーザーと呼ばれるユーザーとしてログインします。ログインユーザーの権限によって、組織の特定のオブジェクトおよび項目への次のようなアクセスが許可または拒否されます。
- 参照 — ユーザーは、このタイプのオブジェクトを参照のみできます。
- 作成 — ユーザーは、このタイプのオブジェクトを参照し、作成できます。
- 編集 — ユーザーは、このタイプのオブジェクトを参照し、更新できます。
- 削除 — ユーザーは、このタイプのオブジェクトを参照し、編集、削除できます。
- 共有
- ほとんどの API コールでは、ログインユーザーの共有モデル外のデータは返されません。アプリケーションの場合と同様に、ユーザーには、組織のデフォルトと手動によるレコード共有の指定のうち、最も権限の大きいアクセス権が付与されます。
- 共有を無効にするユーザー権限
-
- すべて表示 — ユーザーは共有設定に関係なく、このオブジェクトに関連付けられたすべてのレコードを表示できます。
- すべて変更 — ユーザーは共有設定に関係なく、このオブジェクトに関連付けられたすべてのレコードの参照、編集、削除、移行、承認を実行できます。
- すべてのデータの編集 — ユーザーは共有設定に関係なく、すべてのレコードの参照、編集、削除、移行、承認を実行できます。この権限は、「すべて表示」および「すべて変更」と異なり、オブジェクトレベルの権限ではありません。
- 関連オブジェクト
- オブジェクトによっては、他のオブジェクトに権限を依存する場合があります。たとえば、AccountTeamMember は、共有の権限は Account レコードなど、権限が割り当てられている関連オブジェクトに従います。同様に、Partner は関連する取引先の権限に依存します。
- あるレコードの所有者を変更しても、他の関連レコードには自動的にカスケードされません。たとえば、Account の所有者が変更された場合、その Account に関連付けられた Contract の所有者が自動的に変更されることはありません。クライアントアプリケーションでそれぞれの所有者を別個に、明示的に変更する必要があります。
- オブジェクトプロパティ
- create() コールでオブジェクトを作成する場合、オブジェクトの createable 属性を true に設定する必要があります。オブジェクトで許可されている操作を判断するために、クライアントアプリケーションでオブジェクトに対して describeSObjects() コールを実行し、DescribeSObjectResult のプロパティを調べることができます。
- ページレイアウトとレコードタイプ
- ページレイアウトとレコードタイプについて Salesforce ユーザーインターフェースで定義した要件は、API では適用されません。
- 特定の項目が必須であるかどうかはページレイアウトで指定できますが、API は、そのようなレイアウト固有の項目制限や入力規則を create() および update() コールで適用しません。制限を適用するかどうかはクライアントアプリケーションが決定します。
- 指定されたレコードで選択する選択リスト値や、異なるプロファイルを持つユーザーが参照するページレイアウトは、レコード型で制御できます。ただし、ユーザーインターフェースで設定され、適用されるルールは API では適用されません。たとえば、API は、選択リスト項目の値がログインユーザーのプロファイルに関連付けられたレコードタイプ制限で許可されるかどうかを確認しません。同様に、ログインユーザーのプロファイルに関連付けられたレイアウトに項目がないという理由で、クライアントアプリケーションが特定の項目にデータを追加するのを API で拒否することはありません。
- 参照整合性
- 参照整合性を確保するために、API は特定の動作を適用または防止します。
- reference 項目の ID 値は create() および update() コールで検証されます。
- クライアントアプリケーションがレコードを削除した場合、その子の ChildRelationship の cascadeDelete プロパティの値が true であれば、その子もコールの一部として自動的に削除されます。たとえば、クライアントアプリケーションが Opportunity を削除すると、関連付けられた OpportunityLineItem レコードもまた削除されます。ただし、OpportunityLineItem が削除できない、または使用中の場合、親の Opportunity の削除は失敗します。たとえば、クライアントアプリケーションが Invoice_Statement を削除すると、関連付けられた Line_Item レコードも削除されます。ただし、Line_Item が削除できない、または使用中の場合、親の Invoice_Statement の削除は失敗します。何が削除されるかを確認するには、DescribeSObjectResult を使用し、ChildRelationship 値を確認します。
cascadeDelete の実行を阻止するいくつかの例外があります。たとえば、取引先にケースが関連付けられている場合、他のユーザーが所有する関連商談がある場合、または関連付けられた取引先責任者がカスタマーポータルで有効になっている場合、その取引先は削除できません。さらに、現在のユーザーによる成立した商談がある場合、または有効な契約のある場合、レコードの削除要求は失敗します。