{"id":339,"date":"2010-08-30T03:23:27","date_gmt":"2010-08-30T03:23:27","guid":{"rendered":"http:\/\/mahenderpal.wordpress.com\/?p=339"},"modified":"2010-08-30T03:23:27","modified_gmt":"2010-08-30T03:23:27","slug":"remove-picklist-option-based-on-security-roles","status":"publish","type":"post","link":"https:\/\/himbap.com\/blog\/?p=339","title":{"rendered":"Remove Picklist option based on Security Roles"},"content":{"rendered":"<p>Most of the client asks for this requirement. They want to hide picklist options based on security roles. Let&#8217;s take an example for this, for example if we have picklist \u201cCustomer Status\u201d having four option like \u201cRequest for Approve\u201d,\u201dApproved\u201d,\u201dRejected\u201d,\u201dBlack Listed\u201d. Let\u2019s say we have requirement to show only first option to all users having security roles other then \u201cSystem Admin\u201d. Only \u201cSystem Admin\u201d should be able to see all of these options, you can implement this using below code<\/p>\n<p>\/\/First check user have \u201csys admin\u201d role or not<\/p>\n<p>function CheckSecurityRole() {<\/p>\n<p>\u00a0\u00a0\u00a0 var xml = &#8220;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8220;&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8220;&lt;soap:Envelope xmlns:soap=&#8221;http:\/\/schemas.xmlsoap.org\/soap\/envelope\/&#8221; xmlns:xsi=&#8221;http:\/\/www.w3.org\/2001\/XMLSchema-instance&#8221; xmlns:xsd=&#8221;http:\/\/www.w3.org\/2001\/XMLSchema&#8221;&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 GenerateAuthenticationHeader() +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;soap:Body&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;RetrieveMultiple xmlns=&#8221;http:\/\/schemas.microsoft.com\/crm\/2007\/WebServices&#8221;&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;query xmlns:q1=&#8221;http:\/\/schemas.microsoft.com\/crm\/2006\/Query&#8221; xsi:type=&#8221;q1:QueryExpression&#8221;&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:EntityName&gt;role&lt;\/q1:EntityName&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:ColumnSet xsi:type=&#8221;q1:ColumnSet&#8221;&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:Attributes&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:Attribute&gt;name&lt;\/q1:Attribute&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/q1:Attributes&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/q1:ColumnSet&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:Distinct&gt;false&lt;\/q1:Distinct&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkEntities&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkEntity&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkFromAttributeName&gt;roleid&lt;\/q1:LinkFromAttributeName&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkFromEntityName&gt;role&lt;\/q1:LinkFromEntityName&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkToEntityName&gt;systemuserroles&lt;\/q1:LinkToEntityName&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkToAttributeName&gt;roleid&lt;\/q1:LinkToAttributeName&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:JoinOperator&gt;Inner&lt;\/q1:JoinOperator&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkEntities&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkEntity&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkFromAttributeName&gt;systemuserid&lt;\/q1:LinkFromAttributeName&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkFromEntityName&gt;systemuserroles&lt;\/q1:LinkFromEntityName&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkToEntityName&gt;systemuser&lt;\/q1:LinkToEntityName&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkToAttributeName&gt;systemuserid&lt;\/q1:LinkToAttributeName&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:JoinOperator&gt;Inner&lt;\/q1:JoinOperator&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:LinkCriteria&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:FilterOperator&gt;And&lt;\/q1:FilterOperator&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:Conditions&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:Condition&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:AttributeName&gt;systemuserid&lt;\/q1:AttributeName&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;q1:Operator&gt;EqualUserId&lt;\/q1:Operator&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/q1:Condition&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/q1:Conditions&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/q1:LinkCriteria&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/q1:LinkEntity&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/q1:LinkEntities&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/q1:LinkEntity&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/q1:LinkEntities&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/query&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/RetrieveMultiple&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8221; &lt;\/soap:Body&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8220;&lt;\/soap:Envelope&gt;&#8221; +<\/p>\n<p>\u00a0\u00a0\u00a0 &#8220;&#8221;;<\/p>\n<p>\u00a0\u00a0\u00a0 var xmlHttpRequest = new ActiveXObject(&#8220;Msxml2.XMLHTTP&#8221;);<\/p>\n<p>\u00a0\u00a0\u00a0 xmlHttpRequest.Open(&#8220;POST&#8221;, &#8220;\/mscrmservices\/2007\/CrmService.asmx&#8221;, false);<\/p>\n<p>\u00a0\u00a0\u00a0 xmlHttpRequest.setRequestHeader(&#8220;SOAPAction&#8221;, &#8221; http:\/\/schemas.microsoft.com\/crm\/2007\/WebServices\/RetrieveMultiple&#8221;);<\/p>\n<p>\u00a0\u00a0\u00a0 xmlHttpRequest.setRequestHeader(&#8220;Content-Type&#8221;, &#8220;text\/xml; charset=utf-8&#8221;);<\/p>\n<p>\u00a0\u00a0\u00a0 xmlHttpRequest.setRequestHeader(&#8220;Content-Length&#8221;, xml.length);<\/p>\n<p>\u00a0\u00a0\u00a0 xmlHttpRequest.send(xml);<\/p>\n<p>\u00a0\u00a0\u00a0 var resultXml = xmlHttpRequest.responseXML;<\/p>\n<p>\u00a0\u00a0\u00a0 if (resultXml != null) {<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/select the node text<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0var RoleResponse = resultXml.selectNodes(&#8220;\/\/BusinessEntity\/q1:name&#8221;);<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (RoleResponse != null) {<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 for (i = 0; i &lt; RoleResponse.length; i++) {<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (RoleResponse[i].text == &#8216;System Administrator&#8217;) {<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return true;<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/p>\n<p>\u00a0\u00a0\u00a0 }<\/p>\n<p>\u00a0\u00a0\u00a0 return false;<\/p>\n<p>}<\/p>\n<p>\/\/if your does not have sys admin role remove picklist options<\/p>\n<p>\/\/Let consider I\u00a0have used index 1,2,3,4 for our picklist options<\/p>\n<p>function HidePicklistOptions()<\/p>\n<p>{<\/p>\n<p>\u00a0\u00a0\u00a0 If(!CheckSecurityRole())<\/p>\n<p>\u00a0\u00a0\u00a0 {<\/p>\n<p>\u00a0\u00a0\u00a0 var Picklist=crmForm.all.new_customerstatus; \/\/ get picklist<\/p>\n<p>\u00a0\u00a0\u00a0 Picklist.DeleteOption(2); \/\/use approval index to remove Approved from piclist<\/p>\n<p>\u00a0\u00a0\u00a0 Picklist.DeleteOption(3); \/\/to remove Rejected<\/p>\n<p>\u00a0\u00a0\u00a0 Picklist.DeleteOption(4); \/\/to remove Black Listed<\/p>\n<p>\u00a0\u00a0\u00a0 }<\/p>\n<p>}<\/p>\n<p>\u00a0DeleteOption basically removes picklist option temporary, it does not remove them from database permanently.<\/p>\n<p>Enjoy !!!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Most of the client asks for this requirement. They want to hide picklist options based on security roles. Let&#8217;s take an example for this, for example if we have picklist \u201cCustomer Status\u201d having four option like \u201cRequest for Approve\u201d,\u201dApproved\u201d,\u201dRejected\u201d,\u201dBlack Listed\u201d. Let\u2019s say we have requirement to show only first option to all users having security roles other then \u201cSystem Admin\u201d&#8230;. <a href=\"https:\/\/himbap.com\/blog\/?p=339\">Read more &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[24,10],"tags":[],"_links":{"self":[{"href":"https:\/\/himbap.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/339"}],"collection":[{"href":"https:\/\/himbap.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/himbap.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/himbap.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/himbap.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=339"}],"version-history":[{"count":0,"href":"https:\/\/himbap.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/339\/revisions"}],"wp:attachment":[{"href":"https:\/\/himbap.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/himbap.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/himbap.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}