function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
DaizoDaizo 

API経由でのCaseレコードのアクセス権限について

初めて投稿します。

VB.NETからSOAP APIを用いて、Caseレコードの参照、登録、更新を行おうとしておりますが、どうしても調べきれない点がありまして、アドバイスを頂ければと思います。

 

VB.NETの画面上でCaseレコードの「所有権の移動」「編集有無」権限によってボタンの表示・非表示を行おうとしておりますが、これらのアクセス権限の有無を確認する方法がどうしても調べきれませんでした。

今のところ、CaseShareのレコードをSOQLで取得して解析すればいけるのかなぁといった理解ですが、これで正しいでしょうか?

 

もし正しい場合ですが、CaseShareではグループも登録できるので、再帰的にSOQLをコールする感じになりますでしょうか?

 

なるべくAPIのコール回数を控えたいのと、もっとシンプルのやり方があるのでは、と思っております。

 

まだ始めたばかりで、明後日な質問があるかもしれませんが、アドバイス頂ければと思います。

よろしくお願い致します。

 

Best Answer chosen by Admin (Salesforce Developers) 
Mitch OkamotoMitch Okamoto

レコードの共有権限に関しては「オブジェクト名__Share」(標準オブジェクトの場合は __ は無し)のテーブルに設定されているレコードをSOQLで取得するという手法で問題ありません。

 

クエリの条件としては、Caseのデータ自体は直接関連を持っているので以下の様にとれますが、UserOrGroupIdの方は(多分ですが)TaskのWhat項目の様に意味不明(汗)なマジカル関連を持っていないので再起処理になってしまうと思います。

 

SELECT Id, Case.CaseNumber, UserOrGroupId ,CaseAccessLevel, RowCause, LastModifiedDate, LastModifiedById, IsDeleted FROM CaseShare WHERE CaseID = 'XXXXXXXXXX'

 

 

再起処理の際に考慮すべき点は、一個一個クエリで取って来てしまうとCall数が膨大になりますので、月並みですがIN句等を利用して、全てのIDのレコードを一括で取ってくる様にする位でしょうか。

 

 

また代替案としては、Apexには言語仕様としてSOAPやRESTのエンドポイントを作成する機能があります。

API Call数を減らすには、該当の処理を全てApexで実装し、一回のコールで該当ユーザとオブジェクトの組み合わせでボタンをどう出すかを返す様な処理を作ったあげると、Call数が削減出来ると思います。

 

webService Method

http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_web_services_methods.htm

 

Apex REST Methods

http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_rest_methods.htm