Önemli bir konu hakkında az sonra değineceklerim."Crm'e login olan kullanıcının rollerini JavaScript ile elde etmek gerekirse.." dedik evet bu ara ara ihtiyac duyduğumuz bir bilgi.Bu durumun çözüme yönelik farklı bir versiyonunu ileride team bazlı olarak örnekle göstereceğim.Bildiğiniz gibi Microsoft CRM Dynamics içerisinde malesef alan bazlı yetkilendirme henüz yok.Bu durumu aşmak % 100 mümkün olmasa farklı bir yöntem kullanarak durumu kotarabilmek mümkün oluyor.(% 100 olmasadan kastım şu mesela team bazlı olacak şekilde form'daki herbir section'inin hangi team'ler ve haliyle içerdiği kullanıcılar tarafından erişebileceğine bir şekilde karar verebiliyoruz ama en nihayetinde o kişilerin tamamı için kayda erişme ve en önemliside update edebilme hakları oluyor.Paralelinde başka operasyonel yetkiler verdiğinizde ipin ucu biraz kaçıyor.Kimse böyle olsun istemez ;)) CRM 5'i bekliyoruz.Heycanla.
Aşağıda belirttiğimiz GetRolesForLoginPerson() metodunu kullanarak ilgili XML Fetch queryimizi server'a send ediyoruz. Dikkat ederseniz ilgili server path direkt olarak ifade etmedik.Server'da execution gerçekleştiği için path'i dinamik olarak alıyoruz.Bunu manuel olarak vermek isterseniz ipuçları serimize ait ilk yazıdan faydalabilirsiniz.
17 function GetRolesForLoginPerson(){
18 var xml = "" +
19 "<?xml version=\"1.0\" encoding=\"utf - 8\"?>" +
20 "<SOAP:ENVELOPE xmlns:xsd='\"http://www.w3.org/2001/XMLSchema\"' xmlns:xsi='\"http://www.w3.org/2001/XMLSchema-instance\"' xmlns:soap='\"http://schemas.xmlsoap.org/soap/envelope/\"'>" +
21 GenerateAuthenticationHeader() +
22 " <SOAP:BODY>" +
23 " <?XML:NAMESPACE PREFIX = [default] \"http : // schemas.microsoft.com / crm / 2007 / WebServices\" NS = "\"http://schemas.microsoft.com/crm/2007/WebServices\"" /><RetrieveMultiple xmlns='\"http://schemas.microsoft.com/crm/2007/WebServices\"'>" +
24 " <query xsi:type='\"Q1:QueryExpression\"' xmlns:Q1='\"http://schemas.microsoft.com/crm/2006/Query\"'>" +
25 " <Q1:ENTITYNAME>role</Q1:ENTITYNAME>" +
26 " <Q1:COLUMNSET xsi:type='\"Q1:ColumnSet\"'>" +
27 " <Q1:ATTRIBUTES>" +
28 " <Q1:ATTRIBUTE>name</Q1:ATTRIBUTE>" +
29 " </Q1:ATTRIBUTES>" +
30 " </Q1:COLUMNSET>" +
31 " <Q1:DISTINCT>false</Q1:DISTINCT>" +
32 " <Q1:LINKENTITIES>" +
33 " <Q1:LINKENTITY>" +
34 " <Q1:LINKFROMATTRIBUTENAME>roleid</Q1:LINKFROMATTRIBUTENAME>" +
35 " <Q1:LINKFROMENTITYNAME>role</Q1:LINKFROMENTITYNAME>" +
36 " <Q1:LINKTOENTITYNAME>systemuserroles</Q1:LINKTOENTITYNAME>" +
37 " <Q1:LINKTOATTRIBUTENAME>roleid</Q1:LINKTOATTRIBUTENAME>" +
38 " <Q1:JOINOPERATOR>Inner</Q1:JOINOPERATOR>" +
39 " <Q1:LINKENTITIES>" +
40 " <Q1:LINKENTITY>" +
41 " <Q1:LINKFROMATTRIBUTENAME>systemuserid</Q1:LINKFROMATTRIBUTENAME>" +
42 " <Q1:LINKFROMENTITYNAME>systemuserroles</Q1:LINKFROMENTITYNAME>" +
43 " <Q1:LINKTOENTITYNAME>systemuser</Q1:LINKTOENTITYNAME>" +
44 " <Q1:LINKTOATTRIBUTENAME>systemuserid</Q1:LINKTOATTRIBUTENAME>" +
45 " <Q1:JOINOPERATOR>Inner</Q1:JOINOPERATOR>" +
46 " <Q1:LINKCRITERIA>" +
47 " <Q1:FILTEROPERATOR>And</Q1:FILTEROPERATOR>" +
48 " <Q1:CONDITIONS>" +
49 " <Q1:CONDITION>" +
50 " <Q1:ATTRIBUTENAME>systemuserid</Q1:ATTRIBUTENAME>" +
51 " <Q1:OPERATOR>EqualUserId</Q1:OPERATOR>" +
52 " </Q1:CONDITION>" +
53 " </Q1:CONDITIONS>" +
54 " </Q1:LINKCRITERIA>" +
55 " </Q1:LINKENTITY>" +
56 " </Q1:LINKENTITIES>" +
57 " </Q1:LINKENTITY>" +
58 " </Q1:LINKENTITIES>" +
59 " </query>" +
60 " </RetrieveMultiple>" +
61 " </SOAP:BODY>" +
62 "</SOAP:ENVELOPE>";
63 var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
64 xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
65 xmlHttpRequest.setRequestHeader("SOAPAction", " http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
66 xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
67 xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
68 xmlHttpRequest.send(xml);
69 var resXML = xmlHttpRequest.responseXML;
70 return(resXML);
71 }
17 function GenerateAuthenticationHeader(){
18 var xml = new StringBuilder();
19 xml.Append("<soap:Header><CrmAuthenticationToken xmlns=\"");
20 xml.Append(CrmEncodeDecode.CrmXmlEncode("http\x3a\x2f\x2fschemas.microsoft.com\x2fcrm\x2f2007\x2fWebServices"));
21 xml.Append("\"><AuthenticationType xmlns=\"");
22 xml.Append(CrmEncodeDecode.CrmXmlEncode("http\x3a\x2f\x2fschemas.microsoft.com\x2fcrm\x2f2007\x2fCoreTypes"));
23 xml.Append("\">");
24 xml.Append(CrmEncodeDecode.CrmXmlEncode(0));
25 xml.Append("</AuthenticationType><CrmTicket xmlns=\"");
26 xml.Append(CrmEncodeDecode.CrmXmlEncode("http\x3a\x2f\x2fschemas.microsoft.com\x2fcrm\x2f2007\x2fCoreTypes"));
27 xml.Append("\"></CrmTicket><OrganizationName xmlns=\"");
28 xml.Append(CrmEncodeDecode.CrmXmlEncode("http\x3a\x2f\x2fschemas.microsoft.com\x2fcrm\x2f2007\x2fCoreTypes"));
29 xml.Append("\">");
30 xml.Append(CrmEncodeDecode.CrmXmlEncode("YOUR_CRM_ORGANIZATION"));
31 xml.Append("</OrganizationName><CallerId xmlns=\"");
32 xml.Append(CrmEncodeDecode.CrmXmlEncode("http\x3a\x2f\x2fschemas.microsoft.com\x2fcrm\x2f2007\x2fCoreTypes"));
33 xml.Append("\">00000000-0000-0000-0000-000000000000</CallerId></CrmAuthenticationToken></soap:Header>");
34 return xml.ToString();
35 }
Yukarıda yeni JavaScript fonksiyonunu kullanarak ilgili kullanıcı için rolleri elde ediyoruz.Kullanırken de aşağıdaki gibi kullanabiliriz.
unutmadan bunu istediğiniz bir anda yapabilirsiniz ama genelde page onload eventinde kullanıyor olmanız sizin için çok daha anlam ifade edecektir.