nkjmkzk.net

powered by Kazuki Nakajima

Archive for 8月, 2012

Apex Sharingでロールに対して共有を設定する

Apex Sharingではレコード単位で「誰がこのレコードにアクセスできるのか」を制御することができます。

例えばproduct__cというカスタムオブジェクトがあったとして、そのレコードに共有を設定する最低限のステップは下記の通り。

product__share ps = new product__share();
ps.parentId = 'レコードId';
ps.userOrGroupId = 'アクセスを許可するユーザーまたはグループのId';
ps.accessLevel = 'None' | 'Read' | 'Edit' | 'All';
ps.rowCause = schema.product__share.rowCause.manual;
database.saveResult sr = database.insert(ps,false);

マニュアルを見ると、「誰が」の部分に該当するUserOrGroupIdには、ユーザー、公開グループ、ロールまたはテリトリーを指定できるとあります。

The user or group IDs to which you are granting access. A group can be a public group, role, or territory. This field cannot be updated.

なのでロールIdを指定できそうなのですが、実際には、その名の通りuserIdもしくはgroupId以外ははじかれます。

結論としてはロールを指定して共有を実施したい場合は、ロールに紐づく公開グループのIdを指定する必要があります。

最初、わざわざ公開グループを作成して対象のロールにマップする必要があるかと思いましたが、ロールは作成した時点で暗黙的に見えない公開グループが自動的に作成され、その公開グループに紐づけられています。

その暗黙的に作成され、マップされる公開グループのdeveloperNameはロールのそれと同じになっており、relatedIdにロールのIdが格納されています。したがって、下記のようなSOQLでロールの対になる見えない公開グループを取得することができます。

id group_id = [select id from group where relatedId = 'ロールのId' and type = 'Role'].id;

例えば次のユースケースを考えてみましょう。

原則として(Org Wide Defaultとして)product__cは非公開に設定する。
ただしあるロールのユーザーが作成したproduct__cのレコードは、同じロールを持つユーザーから参照/更新アクセスを許可する。

このユースケースの場合、下記のようなトリガーで実現することができます。

trigger grant_edit_to_same_role on product__c (after insert) {
    for (product__c p : Trigger.new){
        string role_id = UserInfo.getUserRoleId();
        id group_id = [select id from group where relatedId = :role_id and type = 'Role'].id;
        product_sharing.grant_to_same_role(p.id, group_id, 'Edit');
    }
}

public class product_sharing {
    public static void grant_to_same_role(string record_id, string role_id, string access_level){
        product__share ps = new product__share();
        ps.parentId = record_id;
        ps.userOrGroupId = role_id;
        ps.accessLevel = access_level;
        ps.rowCause = schema.product__share.rowCause.manual;
        database.saveResult sr = database.insert(ps,false);
    }
}

ご参考まで。

without comments

Written by 中嶋 一樹

8月 25th, 2012 at 4:20 pm

Posted in Uncategorized

Tagged with ,

Force.com アプリケーションパートナーのホームページ

「Force.comでのアプリケーションを開発に興味がある」、「プラットフォームを比較検討している」、そんな方にまずみていただきたいのがこちらのページです。

アプリケーションパートナープログラムとは

アプリケーションパートナーというプログラムに参加することでForce.comを活用したアプリを開発、販売することができます。

年会費や販売目標等の制約はありません。条件はForce.comを活用したアプリケーションを開発いただくことのみです。

上記ホームページではアプリケーションパートナープログラムの概要、特典、条件、種類に加え、アプリケーションプロバイダーからみたForce.comというプラットフォームのメリットが網羅されています。

Force.comを検討されている方は一度こちらのサイトをチェックして情報収集してみてはいかがでしょうか。

without comments

Written by 中嶋 一樹

8月 1st, 2012 at 4:46 pm

Posted in Uncategorized

Tagged with ,