Writing a VisualForce Page for Opportunity and having an issue with referencing the $UserRole.Id. It saves the way its written but its not doing what we need it to on the actual VisualForce Page. It is working for the $UserRole.Name tho :/ .

The code is as follows-

<apex:page Controller="CloseOppController">
    <apex:pageBlock title="Opportunity Close Form">
    <apex:pageMessages />
    <apex:pageBlockSection title="Win/Loss Detail" collapsible="false">
      <apex:inputField value="{!opportunity.StageName}" required="true"/>
      <apex:inputField value="{!opportunity.Closed_Reason__c}" required="{!IF($UserRole.Name != 'Sales Ops', true, false)}"/>
      <apex:inputField value="{!opportunity.Reason_Code__c}" required="{!IF($UserRole.Name != '***I have tried both the 15 digit and the 18 digit ID HERE***', true, false)}"/>
      <apex:inputField value="{!opportunity.Primary_Competitor__c}" required="{!IF($UserRole.Name != 'Sales Ops',true,false)}"/>
      <apex:inputField value="{!opportunity.Additional_Competitors__c}"/>

Thank you in advance!

  • UserRole.Name is generally not an id. Have you tried querying the UserRole object through the workbench or dev console etc? I have also cleaned up your post a bit. In the future try and format your questions so they are easily read. :) Dec 11 '15 at 20:29
  • Just fyi IF(boolean_expression, true, false) is always identical to simply boolean_expression. In other words, it is excessively verbose.
    – Adrian Larson
    Dec 11 '15 at 21:10
  • @JesseMilburn Sorry for the confusion... Yes, I am aware that UserRole.Name is not an ID... but the User's Role has an ID associated with it. ID is what I am trying to use instead of Name because we're more likely to change the "name" than the ID of the Role. When I use the UserRole.Name it does work and the field is not required for our Sales Ops folks... when I use the 15 or 18 digit ID of the "Sales Ops" Role it Saves but it doesnt work for either. This is the problem I am trying to solve. We want to use the ID instead of the Name... what am I doing wrong in the code that is not letting me? Dec 11 '15 at 21:13
  • @AdrianLarson , Can you please explain... I feel like there were some key words missing because I did not understand your statement? Dec 11 '15 at 21:14
  • I'm not sure I can state it more simply... you are evaluating a truthy expression and then saying if it is true, use true, and if it is false, use false. Just use the truthy value.
    – Adrian Larson
    Dec 11 '15 at 21:16