If you want to hide "Est. Revenue" field for all except special CRM role and owner of this opportunity you can use following javascript code:
function GetCurrentUserRoles()
{
var xml = "" +
"" +
"" +
GenerateAuthenticationHeader() +
" " +
" " +
" " +
" role " +
" " +
" " +
" name " +
" " +
" " +
" false " +
" " +
" " +
" roleid " +
" role " +
" systemuserroles " +
" roleid " +
" Inner " +
" " +
" " +
" systemuserid " +
" systemuserroles " +
" systemuser " +
" systemuserid " +
" Inner " +
" " +
" And " +
" " +
" " +
" systemuserid " +
" EqualUserId " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
" " +
"";
var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader("SOAPAction", " http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
xmlHttpRequest.send(xml);
var resultXml = xmlHttpRequest.responseXML;
return (resultXml);
}
function hideRevenue()
{
UserID = Xrm.Page.context.getUserId();
OwnerID = Xrm.Page.getAttribute("ownerid").getValue()[0].id;
if (UserHasRole("Boss") || UserID == OwnerID)
{
Xrm.Page.ui.controls.get("estimatedvalue").setVisible(true);
}
else
{
Xrm.Page.ui.controls.get("estimatedvalue").setVisible(false);
}
}