zoukankan      html  css  js  c++  java
  • Apex的对象共享

    Apex的对象共享

    在Apex中,每个对象都有一个“共享”对象,其中存储了该对象的共享设定。

    这种共享对象以“share”结尾。比如Account的共享对象是AccountShare,Contact的共享对象是ContactShare。对于自定义对象,其对应的共享对象是以“__share”结尾,比如“Example_Object__c”对应的共享对象是“Example_Object__share”。

    注意,在“主-详细”(Master-Detail)关系中“详细”方面的对象没有对应的共享对象,因为它的共享设定是由“主”方面的对象决定的。

    注意,只有当对象的“组织范围内默认”(Organizational-wide-default)设置为“专用”(Private)时,共享对象才会启用。如果没有启用,在Apex代码中调用“XXX__share”时会出现该类型不存在的错误。

    这种设定的原因是:共享对象对应的是Salesforce内部数据库中的共享数据表。当对象的“组织范围内默认”设定为“公共”的时候,该对象不存在单独的共享设定,所以对应的共享对象也无法使用。

    共享对象属性

    共享对象包括以下属性:

    • objectNameAccessLevel:这个属性表明了该共享的共享级别,其名字是对象名后面加上“AccessLevel”,比如LeadShare中的属性就是LeadShareAccessLevel。该属性的值可以是Edit、Read、All
    • ParentID:该属性表明了该共享对象对应的数据记录的ID,无法被更改
    • UserOrGroupId:该属性表明了被共享的用户或组的ID,无法被更改
    • RowCause:该属性表明了共享的原因,无法被更改,默认值是“Manual”

    共享原因

    共享原因可以在设置界面中创建。每个对象都可以有自己的共享原因,在每个对象的详细信息页面中有“Apex 共享原因”相关列表。在那里可以创建和编辑共享原因。

    在Apex中使用时,共享原因的名字后面要加“__c”。

    共享对象的代码示例

    首先在设置界面中创建一个自定义对象“Example_Object__c”,然后创建一个“Apex 共享原因”,名为“Example_SR”。

    以下代码可以对该自定义对象创建一个共享对象:

    // 创建示例自定义对象
    Example_Object__c exObj = new Example_Object__c(Name = 'test object');
    insert exObj;
    
    // 创建共享对象
    Example_Object__share exSha = new Example_Object__share();
    
    // 设定共享对象的各个属性值
    exSha.AccessLevel = 'Edit';
    exSha.ParentId = exObj.Id;
    exSha.UserOrGroupId = System.UserInfo.getUserId();
    exSha.RowCause = Schema.Example_Object__share.RowCause.Example_SR__c; // 在这里,使用了Schema来调用共享原因
    
    // 插入共享对象到数据库
    insert exSha;
    
  • 相关阅读:
    URL地址中中文乱码详解(javascript中encodeURI和decodeURI方法、java.net.URLDecoder.encode、java.net.URLDecoder.decode)
    Java transient关键字使用小记
    java 序列化Serializable 详解
    JRE和JDK的区别
    JavaEE汇总
    Oracle汇总
    java提高篇(四)-----理解java的三大特性之多态
    SQL根据出生日期精确计算年龄、获取日期中的年份、月份
    PL/SQL学习笔记(四)之——删除重复记录
    PL/SQL学习笔记(二)
  • 原文地址:https://www.cnblogs.com/chengcheng0148/p/apex_object_share_basic.html
Copyright © 2011-2022 走看看