【问题标题】:Standard User can't add/edit custom setting record in salesforce标准用户无法在 Salesforce 中添加/编辑自定义设置记录
【发布时间】:2011-11-24 12:04:59
【问题描述】:

我创建了一个包含两个字段的自定义设置对象。我还创建了一个 Apex 控制器和一个 Visual Force Page 来更新/编辑自定义设置。作为系统管理员,我可以使用该表单编辑自定义设置。但是当我以标准用户身份登录时,表单字段没有显示出来。当我以标准用户身份登录时,即使通过 Setup->Develop->CustomSettings 并单击管理,我也无法添加自定义设置。我已将我的控制器和 Visual force 页面权限设置为可供任何人访问。

下面是我的控制器代码,

   public class XYZSettingsController
     {
     public  XYZSettings__c mySettings {get; set;}
     public XYZSettings__c myOrgSettings{get; set;}

     public XYZSettingsController()
        {

          mySettings = XYZSettings__c.getValues(System.Userinfo.getUserId());
          myOrgSettings = XYZSettings__c.getInstance();
            if(mySettings == null)
              {
              mySettings = new XYZSettings__c(SetupOwnerId=System.Userinfo.getUserId());
              }    

         }
    public String getOrgUrl()
    {
    return   myOrgSettings.XYZ_Url__c;
    }

    public String getOrgEmail()
    {
            return   myOrgSettings.XYZ_Email__c;
    }

    public String getUrl()
    {
            return   mySettings.XYZ_Url__c;
    }

    public String getEmail()
    {

           return   mySettings.XYZ_Email__c;
    }

    public PageReference save() {

      if(mySettings.id == null){                   
           upsert mySettings;
             }
      else{
           update mySettings;
             }
      return null;
    }
    }

下面是我的 Visual Force 页面,

<apex:page Controller="XYZSettingsController" title="Edit XYZ access settings">
  <apex:form >
    <apex:pagemessage severity="info" strength="1">
     Your default XYZ platform url is: {!OrgUrl} and Email is: {!OrgEmail}
     <br></br>
      You can override it in the settings below
    </apex:pagemessage> 
   <apex:pageBlock title="Edit XYZ settings" mode="edit">
  <apex:commandButton action="{!save}" value="Save"/>  
     <apex:pageBlockSection columns="2">  
            <apex:inputField value="{!mySettings.XYZ_Url__c}"/>
            <apex:inputField value="{!mySettings.XYZ_Email__c}"/>
    </apex:pageBlockSection>
   </apex:pageBlock>
 </apex:form>
</apex:page>

有什么线索吗?

【问题讨论】:

    标签: salesforce apex-code visualforce


    【解决方案1】:

    我刚刚遇到了这个问题,并在 Salesforce 上回答了这个问题。请参阅我的答案以解决问题。 https://salesforce.stackexchange.com/questions/28329/giving-users-access-to-a-specific-custom-setting-without-granting-them-customize/45079#45079

    【讨论】:

      【解决方案2】:

      具有“标准用户”配置文件的用户无法写入自定义设置对象。为此,您需要授予用户“自定义应用程序”权限,而这又需要查看设置配置权限,这可能是不受欢迎的。

      最好的办法是使用自定义对象来存储用户的设置。

      另一方面:您的电子邮件和 URL 字段的 getter 是多余的,您可以使用 {!mySettings.XYZ_Url__c} 等,就像您对输入字段所做的那样,并且为了更好的格式和字符转义,您可能需要考虑使用&lt;apex:outputField value="{!mySettings.XYZ_Url__c}"/&gt;.

      【讨论】:

      • 嗨,马特,感谢您的回复。这是一个新的自定义设置对象。所以我认为字段级别的安全设置不适用?是的,我会尝试克隆配置文件并更改它。我现在在开发者帐户中。无论如何,这有关系吗?
      • 抱歉!开发者帐户不应该影响它,但另一方面,我从未尝试过写入自定义设置记录——我怀疑这是不可能的!据我所知,自定义设置的目的是维护与应用程序相关的数据列表,这些数据可能不会更改,但您不想被硬编码。
      • @LaceySnr - 不完全;它们有双重用途,其中一个是应用程序全局配置,另一个是用户特定的首选项(如 Windows 注册表等)。
      • @tamizhgeek -- 确保您的自定义设置对象是具有“公共”可见性的“层次结构”类型。
      • @jkraybill 我检查了这些类型和可见性。两者都设置正确。我无法让它工作。所以我所做的是编写了一个代理控制器,它只从表单中获取值,然后调用另一个“不共享”控制器,它实际上更新了自定义设置记录。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 2018-05-15
      相关资源
      最近更新 更多